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

时间:2013-11-08 18:22:21

标签: javascript variable-assignment or-operator

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

// 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

我做错了什么吗?谢谢!

2 个答案:

答案 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!"