为什么有些人会分配像var example = window.example ||这样的JavaScript变量{};

时间:2012-02-09 02:20:48

标签: javascript

我一直在看人们分配JavaScript变量,例如:

var example = window.example || {};

我想知道原因。是的,我已经意识到了||是OR运算符和{};是一个对象文字。

如果有人能回答,那就太好了,谢谢!

3 个答案:

答案 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设置为该值。如果不是(例如,因为它尚未定义),它将被赋予默认值{}(空对象)。