在javascript中将NaN转换为0

Tam*_*Pap 218 javascript

有没有一种方法可以在没有if语句的情况下将NaN值转换为0:

if (isNaN(a)) a = 0;
Run Code Online (Sandbox Code Playgroud)

每次都检查我的变量是非常烦人的.

use*_*716 539

你可以这样做:

a = a || 0
Run Code Online (Sandbox Code Playgroud)

...将任何"假"值转换为0.

"假"值是:

  • false
  • null
  • undefined
  • 0
  • "" (空字符串)
  • NaN (不是数字)

如果您愿意,可以这样:

a = a ? a : 0;
Run Code Online (Sandbox Code Playgroud)

......具有与上述相同的效果.


如果意图不只是测试NaN,那么你可以做同样的事情,但首先进行toNumber转换.

a = +a || 0
Run Code Online (Sandbox Code Playgroud)

这使用一元+运算符尝试转换a为数字.这具有将数字字符串转换为数字的附加好处'123'.

唯一出乎意料的事情可能是有人传递了一个可以成功转换为数字的数组:

+['123']  // 123
Run Code Online (Sandbox Code Playgroud)

这里我们有一个Array,它有一个数字字符串成员.它将成功转换为数字.

  • @Ӫ_._Ӫ不适用于仍然是NaN的字符串:) (4认同)
  • 谢谢你的伙伴,为我自己选择并修改了一下a = a*1 || 0 (2认同)

Wic*_*ams 28

使用双波浪号(双​​按位NOT) - ~~在JavaScript中做了一些有趣的事情.例如,您可以使用它代替Math.floor甚至替代它parseInt("123", 10)!它已经在网上进行了很多讨论,所以我不会介绍它为什么在这里工作,但是如果你感兴趣的话:JavaScript中的"双波浪形"(~~)运算符是什么?

我们可以利用双波形的这个属性来转换NaN为数字,并且很高兴这个数字为零!

console.log(~~NaN); // 0

  • 谢谢,我根本不知道这个 `~~`,我只是将它与 `parseFloat()` 一起使用,就像这样:`~~parseFloat($variable);`。非常整洁:) +1 (2认同)

Sak*_*ket 22

编写自己的方法,并在需要数字值的任何地方使用它:

function getNum(val) {
   if (isNaN(val)) {
     return 0;
   }
   return val;
}
Run Code Online (Sandbox Code Playgroud)

  • 在上面的评论中,我最终使用了Number(val),因为无论如何它都返回0。 (2认同)

Woo*_*old 6

对任何事情都更简单有效:

function getNum(val) {
   val = +val || 0
   return val;
}
Run Code Online (Sandbox Code Playgroud)

...这会将 a 从任何“falsey”值转换为0.

“falsey”值是:

  • false
  • null
  • undefined
  • 0
  • "" (空字符串)
  • NaN (不是数字)