使用值(如果存在),否则使用或运算符指定默认值

Xip*_*ias 7 javascript variable-assignment or-operator

我在一本书中找到了这个例子:

// Create _callbacks object, unless it already exists
var calls = this._callbacks || (this._callbacks = {});
Run Code Online (Sandbox Code Playgroud)

我简化了它,以便我不必使用特殊的对象范围:

var a = b || (b = "Hello!");
Run Code Online (Sandbox Code Playgroud)

当定义b时,它可以工作.如果未定义b,则它不起作用并抛出ReferenceError.

ReferenceError: b is not defined
Run Code Online (Sandbox Code Playgroud)

我做错了什么吗?谢谢!

And*_*ark 11

执行属性查找时this._callback,如果_callbacks属性不存在,this则会得到undefined.但是,如果您只是在一个裸名称上查找,b如果b不存在,您将收到引用错误.

这里的一个选择是使用带typeof运算符的三元组,"undefined"如果操作数是一个尚未定义的变量,它将返回.例如:

var a = typeof b !== "undefined" ? b : (b = "Hello!");
Run Code Online (Sandbox Code Playgroud)