【发布时间】:2011-12-10 12:23:16
【问题描述】:
很多时候我可以看到变量设置是这样的
var d = d || {}
或
var = var || []
想到了几个问题
- 它的主要用途是什么?
- 如何在变量定义中使用 OR?
【问题讨论】:
标签: javascript
很多时候我可以看到变量设置是这样的
var d = d || {}
或
var = var || []
想到了几个问题
【问题讨论】:
标签: javascript
如果左边是falsy(例如undefined,如果没有传递函数参数就是),它计算右边。与返回 true 或 false 的某些语言不同,JavaScript 会返回最后要评估的一面。这很方便,也是为什么要使用这种结构。
使用它的主要原因是在未传递函数参数时提供合理的默认值。
var a = function(b) {
b = b || [];
}
在前面的代码示例中,如果没有传递b,则默认为空数组([])。但是,如果我通过0 或其他falsy,它也会变成一个空白数组。小心这个。
【讨论】:
Array 制作为代码示例,因为它是数组的构造函数,并且是语言中的实际类型/对象。
0、false 和空字符串是给定上下文的合法值时,它会咬你。
|| 运算符如果为真则返回左侧,如果左侧不为真则返回右侧。
所以:
var d = d || {}
是一种快速的说法:
var d;
if (!d) {
d = {};
}
【讨论】:
var d = d || {}总是会为d分配一个值,即使它是当前值(虽然这可能会被智能引擎优化);在obj.x = obj.x || foo 的情况下,面对自定义的getter/setter,这无法优化,但这是一个不同的故事......在某种程度上。