是的,我已经阅读了之前关于这个问题的广泛评论。
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
答案 0 :(得分:0)
我认为它不是很好,但比全球isNaN
更好,原因是当某个值为true
时,它只返回NaN
。不幸的是,Number.isNaN
不会阻止错误的参数错误,因为它显然不是一个声明或特殊的东西,它不能解释像/
(除法)或任何传递的表达式其他的事情。那就是它。