JavaScript逻辑或无效分配

时间:2014-06-02 20:04:27

标签: javascript logical-operators

我正在尝试理解JavaScript的逻辑OR运算符是如何工作的,我正在尝试重新创建我在书中读到的代码,但是我自己扭曲了但是当我尝试运行代码时,我不断收到引用错误。

function add(a,b) {
   b || b = 1;
   return a+b;
}

我的理解是,如果左操作数为假,则评估右操作数,然后返回或使用右操作数的值。使用上面的代码,我想要做的是当调用函数并省略第二个参数时,它将使用默认值1作为等式的第二个值,但我不断得到一个引用无效的引用错误左手任务。

3 个答案:

答案 0 :(得分:2)

可能你想实现这个目标:

b = b || 1;

答案 1 :(得分:2)

请尝试使用b || (b = 1)。这也正是CoffeeScript为其||=运算符生成的内容。

答案 2 :(得分:1)

问题在于operator precedence。赋值=的优先级低于布尔值或||,因此

b || b = 1

被解释为

(b || b) = 1

无效,因为您无法分配到表达式。为了达到你想要的目的,你必须首先告诉JS你想要||然后=

b || (b = 1)

但更常见的表达方式是

b = b || 1

在您的函数的上下文中,这可能无法按预期工作,因为0是一个有效的整数值,您的代码会将其视为false并将其替换为1。因此,编写函数的正确但更详细的方法是

 function add(a, b) {
    b = (typeof b == "undefined") ? 1 : b;
    return a + b;
 }