我正在尝试理解JavaScript的逻辑OR运算符是如何工作的,我正在尝试重新创建我在书中读到的代码,但是我自己扭曲了但是当我尝试运行代码时,我不断收到引用错误。
function add(a,b) {
b || b = 1;
return a+b;
}
我的理解是,如果左操作数为假,则评估右操作数,然后返回或使用右操作数的值。使用上面的代码,我想要做的是当调用函数并省略第二个参数时,它将使用默认值1作为等式的第二个值,但我不断得到一个引用无效的引用错误左手任务。
答案 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;
}