我一直在看人们分配JavaScript变量,例如:
var example = window.example || {};
我想知道原因。是的,我已经意识到了||是OR运算符和{};是一个对象文字。
如果有人能回答,那就太好了,谢谢!
答案 0 :(得分:4)
Short circuit evaluation利用以及JavaScript返回最后评估的表达式。
如果LHS是 truthy ,则表示满足整个表达式(它是||
),JavaScript返回LHS。
如果LHS是 falsy ,则需要对RHS进行评估,因为它位于逻辑或运算符(||
)的另一侧。即使RHS是 falsy ,也会返回它,因为它是评估的最后一个表达式。
它通常用于为函数提供默认参数值...
var sayHello = function(name) {
name = name || 'Alex';
alert('Hello ' + name);
}
答案 1 :(得分:1)
当多个脚本共享同一个对象时,通常会使用此方法。
每个脚本都包含声明:
var example = window.example || {};
当第一个脚本运行时,示例不存在,因此上面的表达式创建一个空对象(window.example计算为false)
然后其他脚本将重用现有元素,因为第一个表达式变为true。
如果您不知道脚本将以何种顺序执行(异步加载或可移动的小部件),这将非常有用。
[编辑]跟进您的上述评论,这可能适用于其他JavaScript对象:
Array: var exampleArray = window.exampleArray || [];
String: var exampleString = window.exampleString || "";
答案 2 :(得分:0)
这是
的简写语法var example = (typeof window.example == 'undefined') ? {} : window.example;
显然,window.example
只是变量example
。
注意:这是略微谎言 - 它不测试“undefined”,它测试“not-truey”(空字符串,0,null等)。
如果window.example
包含任何truey值,则example
设置为该值。如果不是(例如,因为它尚未定义),它将被赋予默认值{}
(空对象)。