根据我的经验,我知道,在进行某种划分或尝试使用字符串编号时,我可以获得NaN
,而实际上它不包含数字。当我能得到NaN
时,还有其他任何情况吗?特别是 - 是否有可能从乘法中得到它?
这是我在PhoneGap应用程序中使用的一段代码:
var g = 9.80665;
acceleration.x = (acceleration.x * g).toFixed(2);
acceleration.y = (acceleration.y * g).toFixed(2);
acceleration.z = ((acceleration.z + 1) * g).toFixed(2);
acceleration
是base PhoneGap object我很难相信,它包含一个字符串或除浮动之外的任何其他值,可能会导致NaN
。
但是,在某些情况下(在某些特定设备上),我从上面得到NaN
。
使用这样的代码“保护”上面的值不是问题:
acceleration.x = (parseFloat(acceleration.x) || 0) + ' m/s\u00b2';
acceleration.y = (parseFloat(acceleration.y) || 0) + ' m/s\u00b2';
acceleration.z = (parseFloat(acceleration.z) || 0) + ' m/s\u00b2';
但是,我真的好奇,何时以及为什么在做了一些值的乘法之后我能得到NaN
?
顺便说一句:我在MDN看过this,在Stack Overflow看到了many related answers here,但没有给我任何帮助或回答我的问题。
答案 0 :(得分:4)
将数字乘以无法转换为数字的数字时,您将获得NaN。
1 * '100' // 100 because '100' will be converted to 100
1 * '' // 0 because '' will be converted to 0
1 * 'ten' // NaN because 'ten' can't be converted to a number
1 * [] // 0 because [] converted to number will be 0
1 * [123] // 123 because [] will be 123
1 * ['ten'] // NaN
1 * {} // NaN
1 * true // 1 because true will be 1
1 * false // 0
1 * null // 0
1 * undefined // NaN, undefined can't be converted to number
1 * function(){} // NaN
函数'isNaN'检查表达式是否可以转换为数字o。你需要检查两个乘法的数字,以确认两者都是数字以避免错误。
为了完整起见,要知道变量是否正好是NaN,您必须将其与自身进行比较:
var a = NaN;
if (a != a) console.log('a is NaN');
之所以发生这种情况,是因为NaN被定义为与所有事物都不相等,包括它自己。
答案 1 :(得分:2)
您确定,价值永远不会被定义吗?文档没有这么说,但我认为这可能是可能的。
http://docs.phonegap.com/en/1.0.0/phonegap_accelerometer_accelerometer.md.html#Acceleration
答案 2 :(得分:1)
0 * Infinity ----> NaN
。
Infinity
* Infinity
,3.14159 * Infinity
和Infinity + Infinity
表现良好。它们都是Infinity
。
Infinity - Infinity
也是NaN
您可能认为自己没有Infinity
,但0.000001/0
就足以创建一个{{1}}。