有没有办法在没有 if 语句的情况下将 NaN 值转换为 0:
if (isNaN(a)) a = 0;
每次都检查我的变量很烦人。
有没有办法在没有 if 语句的情况下将 NaN 值转换为 0:
if (isNaN(a)) a = 0;
每次都检查我的变量很烦人。
你可以这样做:
a = a || 0
...这会将 a 从任何“falsey”值转换为0
.
“falsey”值是:
false
null
undefined
0
""
(空字符串)NaN
(不是数字)或者这个,如果你喜欢:
a = a ? a : 0;
...这将具有与上述相同的效果。
如果意图不仅仅是测试NaN
,那么您可以执行相同的操作,但首先进行toNumber转换。
a = +a || 0
这使用一元 + 运算符来尝试转换a
为数字。这具有将数字字符串等内容转换为数字的额外好处'123'
。
唯一出乎意料的可能是,如果有人传递了一个可以成功转换为数字的数组:
+['123'] // 123
这里我们有一个数组,它有一个数字字符串成员。它将成功转换为数字。
使用双波浪号(double bitwise NOT) - ~~
- 在 JavaScript 中做了一些有趣的事情。例如,您可以使用它来代替Math.floor
甚至替代parseInt("123", 10)
! 它在网络上已经讨论了很多,所以我不会在这里介绍它的工作原理,但是如果您有兴趣:JavaScript 中的“双波浪号”(~~) 运算符是什么?
我们可以利用双波浪号的这个特性来转换NaN
为一个数字,很高兴这个数字为零!
console.log(~~NaN); // 0
编写您自己的方法,并在需要数字值的任何地方使用它:
function getNum(val) {
if (isNaN(val)) {
return 0;
}
return val;
}
对任何事情都更简单有效:
function getNum(val) {
val = +val || 0
return val;
}
...这会将 a 从任何“falsey”值转换为0
.
“falsey”值是:
false
null
undefined
0
""
(空字符串)NaN
(不是数字)怎么样一个正则表达式?
function getNum(str) {
return /[-+]?[0-9]*\.?[0-9]+/.test(str)?parseFloat(str):0;
}
下面的代码将忽略 NaN 以允许计算正确输入的数字