请有人向我解释这行代码的作用:
var list = calls[ev] || (calls[ev] = {});
我最好的猜测:
它使用calls.xxx的值设置变量“list”,其中xxx是一个变量,ev。如果 call[ev] 不存在,那么它会将其创建为一个空对象并将该空对象分配给“list”。是对的吗?
为什么要使用括号?在哪里可以找到有关使用 || 的更多信息 设置变量时,以及在这种情况下使用括号?谢谢!
请有人向我解释这行代码的作用:
var list = calls[ev] || (calls[ev] = {});
我最好的猜测:
它使用calls.xxx的值设置变量“list”,其中xxx是一个变量,ev。如果 call[ev] 不存在,那么它会将其创建为一个空对象并将该空对象分配给“list”。是对的吗?
为什么要使用括号?在哪里可以找到有关使用 || 的更多信息 设置变量时,以及在这种情况下使用括号?谢谢!
这段代码相当于
var list;
if (calls[ev])
list = calls[ev];
else {
calls[ev] = {};
list = calls[ev];
}
使用了该语言的两个特性:
a || b
. If a
is true
thenb
不计算)。因此,如果您分配var v = a || b;
并a
评估可以转换为的东西true
,则b
不会评估。var a = b = c;
)为了避免这种解释,括号是必要的:
var list = (calls[ev] || calls[ev]) = {};
(这是一个错误)。
你的猜测是对的。这是在 JavaScript 中为变量声明“默认”值的常用方法。
function foo(bar) {
var bar = bar || 0; //This sets bar to 0 if it's not already set
console.log(bar);
}
它的工作方式是,在 JavaScript 中,未定义的变量是虚假的,这意味着在任何布尔比较操作中,它将评估为false
. 然后,您可以使用 OR 运算符组合两个值,它将返回计算结果为 的第一个值true
。
你的第一个猜测是正确的。这是初始化 javascript 命名空间的常见模式。它用于确保您不会覆盖以前的同名对象。大多数流行的库都会做类似的事情来创建它们的命名空间对象。
括号在那里,以便以正确的顺序评估表达式。