【问题标题】:Why is NaN useful and in what situations为什么 NaN 有用以及在什么情况下有用
【发布时间】:2016-07-06 23:51:55
【问题描述】:

好的,所以我已经学习了 3 个月的 Javascript,并且已经很好地接触到解决几个任务。在我的书的开头,他们有 NaN 的示例,但它们通常涉及诸如

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

我什至看过其他 stackoverflow 帖子,但我仍然没有看到可以在哪里使用它的场景。话虽如此,这个全局属性在什么情况下对我有帮助?实际程序中有哪些实际情况?

【问题讨论】:

  • 您可以将 NaN 与 sql null 进行比较。 “未知”值,或发生错误。它是有毒的,因为它会使用 NaN 值 NaN 本身来做任何其他事情,例如var foo = 1 + NaN 结果给你NaN,而不是1。一旦发生错误,您不想继续使用该错误值,因为此时您的结果变得未定义。和 sql null 完全一样,您必须使用特殊工具来检测它,例如isNaN() 与sql的is null.
  • var helloWorld = 'hello world'; isNaN(helloWorld - 1)简单一。
  • 通常在进行任何类型的算术运算时,您使用来自未知来源(用户、数据库、api 等)的变量,这有助于检查您得到的结果是否是一个数字在进入更多需要该值的数学之前。
  • var stringInput = "blah"; var convertedToNum = Number(stringInput); alert(isNaN(convertedToNum));(警告“true”,因为“blah”无法转换为数字)
  • 我猜NaN 应该表明 Javascript 开发人员无法计算 :D Humor by Brendan Eich

标签: javascript nan


【解决方案1】:

NaN 是无意义的数学运算产生的数字:

Number('abc'); // NaN
0 / 0;         // NaN
Math.sqrt(-1); // NaN
Math.log(-1);  // NaN
Math.asin(2);  // NaN

当你做一些数学运算并且一些操作数是NaN时,它会传播到结果:

NaN + 2;          // NaN
NaN * 0;          // NaN
1 / NaN;          // NaN
Math.pow(NaN, 2); // NaN

【讨论】:

    【解决方案2】:

    NaN 在您的值不是数字(但应该是)时最有用。您只会在少数地方从标准 API 中返回 NaN,尤其是 parseInt

    parseInt 函数将其第一个参数转换为字符串,对其进行解析,并返回一个整数或 NaN。

    这里的大部分价值在于,一旦将NaN 引入数学运算符链,就定义了运算(即使它们对初始操作数没有意义,从而产生NaN)和将继续返回NaN。从the / instructions 中可以看出,大多数数学运算符都有一个子句,如果任一操作数已经不是数字,则立即返回NaN

    【讨论】:

    • 您究竟打算如何让某事物成为一个数字,但事实证明并非如此?只是想知道它是如何工作的。
    • 正如@Jack 在问题 cmets 中提到的,用户输入(或服务器输入,或者实际上是任何外部源)。 NaN 的存在是为了在您收到无效输出时保持有效的操作链。而不是因为错误的输入意外地产生了一些操作x / 0而抛出,而是得到x / NaN和定义的(如果是垃圾)输出。
    • @cresjoy Math.sqrt(-1) 产生 NaN,就像许多其他旨在给出数字的“无效”数学运算一样。
    • 我明白了,所以更多的是为了测试一些案例和修复一些失误
    • 最好得到一个值 (NaN),它可以愉快地通过一个复杂的公式(尽管以 NaN 结尾),而不是一个错误的值,它会让你的数学计算一半。垃圾进/垃圾出比垃圾进/垃圾车着火/一切爆炸。
    猜你喜欢
    • 2011-08-20
    • 2014-01-25
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多