【问题标题】:Why doesn't var x.isNaN where x = 1/0 return Number?为什么 var x.isNaN where x = 1/0 不返回数字?
【发布时间】:2014-04-28 21:08:21
【问题描述】:

typeof(Infinity) 在 Javascript 中返回 Number

但是为什么x.isNaN, where x = 1/0 不返回Number 呢?

示例代码:

 var x = 1/0;

 document.write(typeof(x)); //returns Number

 document.write(x.isNaN); //return undefined

P.S:我是 Javascript 新手,我从 W3Schools 学习它。如果您能指导我找到任何其他可靠的资源,我会很高兴。

【问题讨论】:

标签: javascript


【解决方案1】:

isNan 不是任何数字的属性。但是,isNaN 既是全局范围内的函数,又是 on the Number object。 (后者是更新/更强大的版本)

由于isNaN 是一个函数,您必须将要检查的变量作为参数传递:
isNaN(x)Number.isNaN(x) 将返回true,如您所料。

document.write(x.isNaN); 返回undefined 的原因是因为xNumber)没有isNan 属性。

【讨论】:

  • 其实Number.isNaNisNaN是JavaScript中两种不同的方法。
  • 我已经编辑了我的帖子。很抱歉帖子中的拼写错误。如果您能在当前使用 isNaN(variable) where the variable = 1/0; 的情况下澄清一下,将很高兴基本上任何会导致无穷大的东西。
  • @MincH:问题是:x.isNaNisNaN 不是属性。这是一个函数:isNaN(x) 可以工作。
  • @MincH: isNaN(Infinity) 将返回false,因为Infinity 不是NaN。你对什么感到困惑?
  • @MincHL:是的,因为Infinity 是数字数据类型的值。 “那为什么 isNaN(x), 其中 x = 1/0, 返回 true ? x 将存储无穷大。” 因为NaNInfinity 是两个不同的值isNaN 仅测试值是否为 NaN,而不是 Infinity。也许你正在寻找isFinite,它测试一个值是否not Infinity。为什么你认为isNaN 应该为Infinity 返回true
【解决方案2】:

数字(包括 NaN)没有 isNaN 方法。它是全球性的。你想要的其实是isNaN(x)。 (注意大写N。)

【讨论】:

    【解决方案3】:

    isNaN 不是属性,它是全局函数或Number 静态 方法(不适用于实例化变量)。

    你必须使用:

    isNaN(x);
    Number.isNaN(x);
    

    Preferencially, Number.isNaN,虽然 IE、Opera 或 Safari 尚不支持它。

    【讨论】:

    • 请注意,Number.isNaN() 是 ES6 的一部分,尚不支持所有浏览器。
    • 知道了!即使在这种情况下, Number.isNaN(x) 也不会返回 true。如果我错了,请纠正我。
    • @Andre 明白了。无穷大在 Java Script 中被认为是一个数字。所以 isNaN(Infinity) 返回 false 因为 isNaN(variable) 只有在变量不是数字时才返回 true。很抱歉造成我的困惑。
    • @MincH isNaN(x) 将返回 false,因为 Infinity 仍然是 Number 类型。
    • @AndréFigueiredo:不,它会返回false,因为Infinity 不是NaN。此外,Number.isNaN(x); 似乎正在为我使用 chrome。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2021-07-12
    • 2023-03-03
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多