我在一本书中找到了这个例子:
// Create _callbacks object, unless it already exists
var calls = this._callbacks || (this._callbacks = {});
我简化了它,以便我不必使用特殊的对象范围:
var a = b || (b = "Hello!");
当定义b时,它可以工作。如果未定义b,则它不起作用并抛出ReferenceError。
ReferenceError: b is not defined
我做错了什么吗?谢谢!
答案 0 :(得分:11)
执行this._callback
之类的属性查询时,如果_callbacks
的{{1}}属性不存在,您将获得this
。但是,如果您只对undefined
这样的裸名称进行查找,则在b
不存在时会出现引用错误。
这里的一个选项是使用带有b
运算符的三元组,如果操作数是一个尚未定义的变量,它将返回typeof
。例如:
"undefined"
答案 1 :(得分:3)
它应该以这种形式起作用:
var b, a = b || (b = "Hello!", b);
// ^ assign b
// ^ () and , for continuation
// ^ return the new value of b
//=> result: a === b = "Hello!"