3

根据我的经验,我知道,当它实际上不包含数字时,我可以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);

Anacceleration是一个基本的 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在做一些值的乘法之后得到一个?

顺便说一句:我在 MDN 上读过这篇文章,与 Stack Overflow 上的许多 相关 答案 一样好,但没有给我带来任何帮助或回答我的问题。

4

3 回答 3

6

将数字与无法转换为数字的内容相乘时,您将得到 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”检查表达式是否可以转换为数字。您可以检查乘法的两个数字以确认两者都是数字以避免错误。

为了完整起见,要知道变量是否完全是 NaN,您必须将其与自身进行比较:

var a = NaN;
if (a != a) console.log('a is NaN');

这是因为 NaN 被定义为不等于一切,包括它自己。

于 2013-07-18T08:49:24.183 回答
2

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

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

于 2013-07-18T08:47:50.997 回答
1

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

Infinity* Infinity, 3.14159 * Infinity, 和Infinity + Infinity表现良好。他们都是Infinity

Infinity - Infinity也是NaN

你可能认为你没有Infinitys,但一个0.000001/0就足以创建一个。

于 2013-08-29T09:43:27.997 回答