Javascript ||运营商仍然返回NaN

时间:2016-03-14 13:37:47

标签: javascript

我正在尝试从数据库中添加值。如果ajax调用没有返回数据,则值为null,我得到一个NaN。所以,我正在使用||运营商,但我仍然得到NaN。我做错了什么?

var total = (parseFloat(value[8])+parseFloat(value[9])+parseFloat(value[10])+parseFloat(value[11])).toFixed(1)  || 0;

2 个答案:

答案 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。否则,根据值计算并返回该值。