我正在尝试从数据库中添加值。如果ajax调用没有返回数据,则值为null,我得到一个NaN。所以,我正在使用||运营商,但我仍然得到NaN。我做错了什么?
var total = (parseFloat(value[8])+parseFloat(value[9])+parseFloat(value[10])+parseFloat(value[11])).toFixed(1) || 0;
答案 0 :(得分:0)
你的逻辑需要被颠倒。当您应该评估每个单独的值时,您正在评估最后所有值的结果。您可以编写一个包装函数来解析每个值。
// Safely parse a float to the value or zero.
function parseValue(value) {
return parseFloat(value) || 0;
}
var value = []; // Values are intentionally empty.
var total = (
parseValue(value[8]) +
parseValue(value[9]) +
parseValue(value[10]) +
parseValue(value[11])
).toFixed(1);
document.body.innerHTML = total; // Prints 0.0
或者您可以将|| 0
移到值的总和中。
var value = []; // Values are intentionally empty.
var total = (
parseFloat(value[8]) +
parseFloat(value[9]) +
parseFloat(value[10]) +
parseFloat(value[11]) ||
0
).toFixed(1);
document.body.innerHTML = total; // Prints 0.0
答案 1 :(得分:-2)
||运营商不是"检查空值并提供默认功能"。它是一个逻辑OR运算符。您的数组元素仍然被解析为浮点数(如代码中所见)...
parseFloat(value[8]) + parseFloat(value[9]) + parseFloat(value[10]) + parseFloat(value[11]))
...因此在逻辑OR运算的左侧返回NaN值。
您必须在整个数组中检查NULL值,如果其中任何一个为NULL,则返回0。否则,根据值计算并返回该值。