Answers:
你可以这样做:
a = a || 0
...这会将a的“ falsey”值转换为0
。
“假”值是:
false
null
undefined
0
""
(空字符串)NaN
(不是数字)如果您愿意,也可以这样:
a = a ? a : 0;
...将具有与上述相同的效果。
如果要测试的不仅仅是NaN
,则可以执行相同的操作,但首先进行toNumber转换。
a = +a || 0
这使用一元+运算符尝试转换a
为数字。这具有将数字字符串等内容转换为数字的附加好处'123'
。
唯一出乎意料的事情是,如果有人传递了可以成功转换为数字的数组:
+['123'] // 123
在这里,我们有一个具有单个成员的数组,该成员是数字字符串。它将成功转换为数字。
NaN
价值。这不能作为对所有非数字值的测试。尽管我们可以先尝试toNumber转换。我会更新。
使用双波浪号(双按位NOT)- ~~
在JavaScript中做了一些有趣的事情。例如,您可以使用它代替Math.floor
甚至替代它parseInt("123", 10)
!网上已经对此进行了很多讨论,因此我不会在这里介绍它的工作原理,但是如果您感兴趣的话:JavaScript中的“双波浪号”(~~)运算符是什么?
我们可以利用双波浪号的此属性将其转换NaN
为数字,并且很高兴该数字为零!
console.log(~~NaN); // 0
~~
在所有的,我只是用它的旁边parseFloat()
,像这样:~~parseFloat($variable);
。非常整洁:) +1
编写自己的方法,并在需要数字值的任何地方使用它:
function getNum(val) {
if (isNaN(val)) {
return 0;
}
return val;
}
Number(val)
它时返回0
它。
与其将它们塞在一起以使您可以继续,不如不备份并想知道为什么首先遇到NaN?
如果操作的任何数字输入为NaN,则输出也将为NaN。这就是当前IEEE浮点标准的工作方式(不仅仅是Javascript)。该行为是有充分理由的:其根本目的是防止您使用假结果而不意识到它是假的。
NaN的工作方式是,如果在某些子操作中出错(在较低级别生成NaN),最终结果也将是NaN,即使您将自己立即识别为错误,错误处理逻辑(可能是抛出/捕获?)尚未完成。
NaN作为算术计算的结果 始终表示在算术细节方面出现了问题。这是计算机说“这里需要调试”的一种方式。与其找到某种方法来继续以几乎不可能的数字继续下去(真的是0,是您想要的吗?),不如找出问题并加以解决。
Javascript中的一个常见问题是,如果给定一个毫无意义的参数,两者parseInt(...)
和parseFloat(...)
都会返回NaN(null
,''
等等)。在最低级别(而不是更高级别)上解决问题。这样一来,整个计算的结果就有很大的道理,而您并没有用魔术数(0或1或其他值)代替整个计算的结果。((parseInt(foo.value)|| 0)的技巧仅适用于总和,而不适用于乘积-对于您希望默认值为1而不是0的乘积,但如果指定的值确实为0,则无效。)
也许为了便于编码,您希望函数从用户处检索一个值,将其清理,并在必要时提供默认值,例如:
function getFoobarFromUser(elementid) {
var foobar = parseFloat(document.getElementById(elementid).innerHTML)
if (isNaN(foobar)) foobar = 3.21; // default value
return(foobar.toFixed(2));
}
如果尝试使用parseInt,则使用isNaN的方法不起作用,例如:
parseInt("abc"); // NaN
parseInt(""); // NaN
parseInt("14px"); // 14
但是在第二种情况下isNaN会产生false(即空字符串是一个数字)
n="abc"; isNaN(n) ? 0 : parseInt(n); // 0
n=""; isNaN(n) ? 0: parseInt(n); // NaN
n="14px"; isNaN(n) ? 0 : parseInt(n); // 14
总之,isNaN将空字符串视为有效数字,但parseInt则不将其视为有效数字。在OSX Mojave上通过Safari,Firefox和Chrome进行了验证。
使用用户113716解决方案,这很好地避免了所有这些问题,否则,我已经实现了这种方式,可以根据文本框单位和文本框数量计算小计文本框。
在单位和数量文本框中写入非数字的过程中,它们的值将被零替换,因此最终发布的用户数据中不会有非数字。
<script src="/common/tools/jquery-1.10.2.js"></script>
<script src="/common/tools/jquery-ui.js"></script>
<!----------------- link above 2 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;
}
}