在Javascript中,num = + thenum ||是什么假的意思?

时间:2014-12-28 09:33:44

标签: javascript

我通过阅读书籍自学JavaScript。我无法理解其中一个代码

var thenum = document.getElementById("sr_num").value;
thenum = +thenum || false

最后一行从未在整本书中解释过。我无法理解这是什么。任何人都可以向我解释这将非常感激。谢谢。

2 个答案:

答案 0 :(得分:3)

thenum = +thenum || false

是确保thenum确实是有效数字。如果不是,则thenum将被分配false

+thenum会尝试将thenumdocument.getElementById("sr_num").value中的字符串值)中的字符串值转换为数字。如果失败,它将返回NaN,这被认为是假的。您可以像这样确认

console.log(+"All hail lelouch");
// NaN

因此,如果thenum不是有效数字,则表达式变为

thenum = NaN || false

由于NaN是假的,false将在thenum中分配。

注意:此表达式无效的唯一有效数字输入是0。因为当输入为"0"时,表达式变为

thenum = +"0" || false
       = 0 || false

因此,thenum仍会被分配false

答案 1 :(得分:0)

HTMLInputElement.value返回一个字符串。 +thenum被称为一元加号运算符,并将任何值转换为NumberNaN。由于NaN是假的,因此OR(||)运算符会评估表达式的后半部分,将false分配给thenum。另一个例外是如果+thenum恰好返回0,那是唯一的假数字。这也会将false分配给thenum,但这似乎不是故意行为。除了这两个例外,由于所有其他数字都是真实的,OR表达式的后半部分将不会被评估,并且该数字将被分配给thenum。以下片段将演示正在发生的事情。

等效行为:

if(+thenum) {
    thenum = +thenum;
else {
    thenum = false;
}

(可能)预期的行为:

if(isNaN(+thenum)) {
    thenum = false;
} else {
    thenum = +thenum;
}

上述(可能)预期行为的简写:

thenum = (isNaN(thenum = +thenum) ? false : thenum);

希望这有助于澄清事情。