RangeError on calling new Date().valueOf().toString() with base 10 radix

问题描述 投票:0回答:0

我的应用程序中有一个实用程序方法,直到最近几天一直没有问题。我不确定原因,因为这段代码在这个应用程序的生命周期的几年里没有改变。

在下面的方法中,一个 RangeError 被抛出在

return new Date().valueOf().toString()

如果我在返回值之前插入一个 console.log 就可以避免错误(如下面的评论所示)。

有趣的是,也可以通过传递除 10 之外的任何可接受的基数来避免错误,这是 toString() 未提供时的默认基数。

/** Creates a simple & unique ID based off the current date/time */
export function makeUniqueId(toHex: boolean = false): string {
  if (toHex) {
    return new Date().valueOf().toString(16).toUpperCase();
  } else {
    // const myDate = new Date().valueOf().toString();
    // console.log(myDate); // No RangeError
    // return myDate; // No RangeError if console.log is present, otherwise RangeError!
    // return new Date().valueOf().toString(); // RangeError!
    // return new Date().valueOf().toString(10); // RangeError!
    return new Date().valueOf().toString(9); // No RangeError
  }
}

我可以在最新版本的 Chrome 和 Safari 中重现此问题。错误如下:

ERROR RangeError: Maximum call stack size exceeded at Number.toString (<anonymous>) at makeUniqueId (

javascript tostring
© www.soinside.com 2019 - 2024. All rights reserved.