从我的经验,我知道,我可以得到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
是一个碱的PhoneGap对象和我很难相信,它包含一个字符串或任何其他值,除了浮动,这可能导致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
做只是一些值乘后?
BTW:我读过这在MDN,不啻为许多 相关 答案 这里的堆栈溢出,但给我带来任何帮助或回答我的问题。
相乘的东西,不能转换为数字的数时,你会得到一个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不可。 您culd检查相乘的两个号码,以确认这两个都是数字,以避免错误。
为了完整起见,要知道如果一个变量正是南你必须与自己进行比较:
var a = NaN;
if (a != a) console.log('a is NaN');
这是因为NaN被定义为不等于一切,包括自己。
你确定,该值永远是不确定的? 文档没有这么说,但我认为这是可能的。
http://docs.phonegap.com/en/1.0.0/phonegap_accelerometer_accelerometer.md.html#Acceleration
0 * Infinity ----> NaN
至少在铬和Firefox。
Infinity
* Infinity
, 3.14159 * Infinity
和Infinity + Infinity
有适当的行为。 他们都是Infinity
。
Infinity - Infinity
也NaN
你可能会认为你没有Infinity
S,但0.000001/0
就足以创造一个。