【问题标题】:Javascript- Why is it a "good thing" that Number.isNaN returns false for a non-numeric string?Javascript-为什么 Number.isNaN 为非数字字符串返回 false 是一件“好事”?
【发布时间】: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


【解决方案1】:

我觉得不是很完美,但是比全局的isNaN好,原因是它只在某个值为NaN时才返回true。不幸的是,Number.isNaN 不会防止错误的参数错误,因为它显然不是一个语句或特殊的东西,它不会解释传递的表达式,如/(除法)或任何其他东西。就是这样。

【讨论】:

  • 但是 Number.isNaN 不会捕获像“foo”这样的字符串。与使用对象相比,我不小心使用字符串而不是数字的可能性不是更大吗?那怎么“安全”?它会让我说 a=2/"foo"。
猜你喜欢
  • 1970-01-01
  • 2017-12-14
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 2014-11-20
相关资源
最近更新 更多