【发布时间】:2016-08-08 01:19:53
【问题描述】:
是的,我已经阅读了之前关于这个问题的大量 cmets。
YDKJS,类型和语法,第 2 章说使用 isNaN() 是一个错误,因为存在一些内部一致性问题。
我使用isNaN() 来查看在算术表达式中使用变量是否会出错。
当前“已批准”的 ES6 Number.isNaN() 会告诉我,在数字表达式中使用不强制转换为数字的字符串是可以的。在我看来,这颠覆了使用isNaN() 的全部目的。
为什么这是一件好事?我不关心语言的形式一致性——我只是不想让我的算术表达式崩溃。
是否存在Number.isNaN() 可以防止window.isNaN() 不会出现的错误的实际情况?
例子:
var a = 2 / "foo"; // is not a number,
var b = "foo"; // is not a number
var c = 2; // is a number
alert("a="+a+", window.isNaN(a)="+window.isNaN(a)+", Number.isNaN(a)="+Number.isNaN(a)+", isNaN(a)="+isNaN(a)); //true, true,true
alert("b="+b+", window.isNaN(b)="+window.isNaN(b)+", Number.isNaN(b)="+Number.isNaN(b)+", isNaN(b)="+isNaN(b)); //true, false, true
alert("c="+c+", window.isNaN(c)="+window.isNaN(c)+", Number.isNaN(c)="+Number.isNaN(c)+", isNaN(c)="+isNaN(c)); //false, false, false
【问题讨论】:
-
2 / "foo",这是无法避免的,因为它总是返回NaN。算了。 -
这样就留下了 Number.isNaN 在给定不强制为数字的字符串时返回 false 的问题。 YDKJS 说这是比 windows.isNaN 更好的结果,windows.isNaN(在我看来是正确的)说这样的字符串是 NaN。
-
是的...我在第一个回答中就这么说了。
标签: javascript syntax