有没有一种方法将NaN值转换为0而不使用if语句?例子:

if (isNaN(a)) a = 0;

每次检查我的变量都很烦人。


当前回答

使用双波浪号(双位NOT) - ~~ -在JavaScript中做了一些有趣的事情。例如,你可以用它来代替数学。floor或甚至作为parseInt("123", 10)的替代!在网络上已经讨论过很多次了,所以我不会在这里解释为什么它可以工作,但如果你感兴趣的话:JavaScript中的“双波浪号”(~~)操作符是什么?

我们可以利用双波浪号的这个属性将NaN转换为一个数字,幸运的是,这个数字是零!

console.log(~~NaN);0

其他回答

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

function getNum(val) {
   val = +val || 0
   return val;
}

...这将把a从任何“假”值转换为0。

“伪”值是:

假 零 未定义的 0 ""(空字符串) NaN(非数字)

使用双波浪号(双位NOT) - ~~ -在JavaScript中做了一些有趣的事情。例如,你可以用它来代替数学。floor或甚至作为parseInt("123", 10)的替代!在网络上已经讨论过很多次了,所以我不会在这里解释为什么它可以工作,但如果你感兴趣的话:JavaScript中的“双波浪号”(~~)操作符是什么?

我们可以利用双波浪号的这个属性将NaN转换为一个数字,幸运的是,这个数字是零!

console.log(~~NaN);0

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

function getNum(val) {
   if (isNaN(val)) {
     return 0;
   }
   return val;
}

使用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"/>

请试试这个简单的功能

var NanValue = function (entry) {
    if(entry=="NaN") {
        return 0.00;
    } else {
        return entry;
    }
}