2016-07-06 91 views
3

好吧,所以我一直在学习Javascript三个月,并已经获得了一些很好的解决几个任务的机会。在我的书的开始,他们有不同的NaN例子,但它们通常包括像为什么NaN有用,在什么情况下

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

事情我甚至看其他计算器职位,我还没有看到的,我可以在使用它的情况。这就是说,这种全球性财产在什么情况下对我有帮助?实际计划中的一些实际情况是什么?

+0

你可以将NaN与sql'null'进行比较。 “未知”值或发生错误。它是有毒的,因为它会使用NaN本身的NaN本身来做其他事情,例如, 'var foo = 1 + NaN'会给你'NaN',而不是'1'。一旦发生错误,您不希望继续使用该错误值,因为您的结果在此时不明确。和sql null完全一样,你必须使用专门的工具来检测它,例如isNaN()'v.s. sql的'是null'。 –

+0

'var helloWorld ='hello world'; isNaN(helloWorld - 1)'简单的一个。 –

+0

通常,在使用任何类型的算术时,如果您使用来自未知来源(用户,数据库,api等)的变量,则有助于检查您得到的结果是否为数字,然后再转到需要更多数学那个价值。 – Jack

回答

1

NaN是从数学运算,这是没有意义的结果的数量:

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

当你做一些数学opertion和一些操作数是NaN,它会传播到结果:

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

NaN当你有一个不是数字的值(但应该是)时是最有用的。你将只能得到在一些地方从标准API NaN回来,尤其是parseInt

的parseInt函数功能第一个参数转换为字符串,分析它,并返回一个整数或NaN。

这里大部分的价值是,一旦NaN已被引入到数学运算链,操作定义(即使他们并没有意义,与初始操作数,从而产生NaN),并会继续返回NaN。大多数数学运算符(从the / instructions可以看到)都有一个条款,如果任一操作数已经不是数字,则立即返回NaN

+0

你究竟打算什么东西是一个数字,但事实证明它不是?只是想知道如何工作。 –

+0

正如@Jack在问题评论中提到的,用户输入(或服务器输入,或者真的是任何外部源)。当您收到无效输出时,存在'NaN'来保持有效的操作链。而不是因为糟糕的输入不小心产生了一些op'x/0',你会得到'x/NaN'和一个定义的(如果是垃圾)输出。 – ssube

+0

@cresjoy'Math.sqrt(-1)'产生'NaN',就像许多其他旨在给出数字的“无效”数学运算一样。 –

相关问题