什么时候和为什么数的计算结果为NaN,相乘之后,在Javascript?(When and why

2019-10-18 09:45发布

从我的经验,我知道,我可以得到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,不啻为许多 相关 答案 这里的堆栈溢出,但给我带来任何帮助或回答我的问题。

Answer 1:

相乘的东西,不能转换为数字的数时,你会得到一个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被定义为不等于一切,包括自己。



Answer 2:

你确定,该值永远是不确定的? 文档没有这么说,但我认为这是可能的。

http://docs.phonegap.com/en/1.0.0/phonegap_accelerometer_accelerometer.md.html#Acceleration



Answer 3:

0 * Infinity ----> NaN至少在铬和Firefox。

Infinity * Infinity3.14159 * InfinityInfinity + Infinity有适当的行为。 他们都是Infinity

Infinity - InfinityNaN

你可能会认为你没有Infinity S,但0.000001/0就足以创造一个。



文章来源: When and why number evaluates to NaN, after multiplying, in Javascript?