Javascript-为什么Number.isNaN对非数字字符串返回false是一件“好事”?

时间:2016-08-08 01:19:53

标签: javascript syntax

是的,我已经阅读了之前关于这个问题的广泛评论。

YDKJS,Types&语法,第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

1 个答案:

答案 0 :(得分:0)

我认为它不是很好,但比全球isNaN更好,原因是当某个值为true时,它只返回NaN 。不幸的是,Number.isNaN不会阻止错误的参数错误,因为它显然不是一个声明或特殊的东西,它不能解释像/(除法)或任何传递的表达式其他的事情。那就是它。