【问题标题】:isNaN() throwing an error when passing a BigIntisNaN() 在传递 BigInt 时抛出错误
【发布时间】:2020-05-08 19:40:04
【问题描述】:

为什么函数 isNaN() 在传递 BigInt 作为参数时会抛出错误?

错误:

Uncaught TypeError: Cannot convert a BigInt value to a number
    at isNaN (<anonymous>)
    at <anonymous>:1:1

要复制的代码:

let i = BigInt('2');
isNaN(i);

【问题讨论】:

  • 根据文档 BigInt 是一个对象。它不是一个数字。
  • BigInt 不能被强制转换为数字,这是isNaN 所做的第一件事。见the spec on isNaNthe spec on ToNumber
  • 因为它是这样指定的:isNaN() -> ToNumber() -> BigInt -> “引发 TypeError 异常”
  • @Amy "BigInt cannot be coerced into a number" - 诚然有点迂腐,但我相信它可以,只是不使用这种方法: ) 例如,Number(BigInt('2')) === 2 工作正常。
  • @Andreas 正确!这是我评论的基础。

标签: javascript bigint


【解决方案1】:

它是一个对象,如果您需要将其转换为数字,您可以简单地使用Number,例如:

let i = BigInt('2');
isNaN(Number(i));

console.log(isNaN(Number(i)));

【讨论】:

  • “它是一个对象”。但是,isNaN({ key: 10 }) 不会抛出错误
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多