有没有一种方法将NaN值转换为0而不使用if语句?例子:
if (isNaN(a)) a = 0;
每次检查我的变量都很烦人。
有没有一种方法将NaN值转换为0而不使用if语句?例子:
if (isNaN(a)) a = 0;
每次检查我的变量都很烦人。
当前回答
var i = [NaN, 1,2,3]; var j = i.map(i =>{返回isNaN(i) ?0: i}); console.log (j)
其他回答
你可以这样做:
a = a || 0
...这将把a从任何“假”值转换为0。
“伪”值是:
假 零 未定义的 0 ""(空字符串) NaN(非数字)
如果你喜欢,也可以这样:
a = a ? a : 0;
...这和上面的效果是一样的。
如果意图不仅仅是测试NaN,那么您可以做同样的事情,但首先要做toNumber转换。
a = +a || 0
它使用一元+运算符将a转换为数字。这有一个额外的好处,可以将数字字符串“123”转换为数字。
唯一意想不到的事情可能是,如果有人传递一个可以成功转换为数字的数组:
+['123'] // 123
这里我们有一个数组,它有一个成员是数字字符串。它将成功地转换为一个数字。
我建议你使用正则表达式:
const getNum = str => /[-+]?[0-9]*\.?[0-9]+/.test(str) ? parseFloat(str) : 0;
下面的代码将忽略NaN,以允许计算正确输入的数字:
几点getNum str = => /[-+]?[ 0] * \ 0 - 9] + - ?[。(str)测试?欧芹(str): 输入]; getElementById (getTotal”)的文件。addEventListener(点击)=> 使共=滴哩。文件夹(fld => getNum(fld.value) .reduce(a、b)=>a+b); 控制台日志(总量)。 }); <输入类型=“文本”/> <输入类型=“文本”/> <输入类型=“文本”/> <输入类型=“文本”disabled /> <巴顿打字=“巴顿”id=“getall”>Calculate</按钮>
NaN是JavaScript中唯一不等于自身的值,所以我们可以利用这个信息:
const x = NaN;
let y = x!=x && 0;
y = Number.isNaN(x) && 0
我们也可以用Number。isNaN而不是isNaN函数,因为后者将其参数强制为一个数字
isNaN('string') // true which is incorrect because 'string'=='string'
Number.isNaN('string') // false
使用user113716的解决方案,顺便说一下,它是伟大的,以避免所有的if-else,我已经实现了这种方式来计算我的小计文本框从文本框单位和文本框数量。
在单位和数量文本框中写入非数字的过程中,它们的值被替换为零,因此最终发布的用户数据中没有非数字。
<script src="/common/tools/jquery-1.10.2.js"></script>
<script src="/common/tools/jquery-ui.js"></script>
<!--------- link above two lines to your jQuery files ------>
<script type="text/javascript">
function calculate_subtotal(){
$('#quantity').val((+$('#quantity').val() || 0));
$('#unit').val((+$('#unit').val() || 0));
var calculated = $('#quantity').val() * $('#unit').val();
$('#subtotal').val(calculated);
}
</script>
<input type = "text" onChange ="calculate_subtotal();" id = "quantity"/>
<input type = "text" onChange ="calculate_subtotal();" id = "unit"/>
<input type = "text" id = "subtotal"/>
编写自己的方法,并在任何需要数值的地方使用它:
function getNum(val) {
if (isNaN(val)) {
return 0;
}
return val;
}