javascript:| |(或)在变量定义中?
可能重复:javascript:| |(或)在变量定义中?,javascript,Javascript,可能重复: 很多时候我可以看到变量是这样设置的 var d = d || {} 或 我想到了几个问题 主要目的是什么 如何使用或在变量中定义 如果左侧为falsy(例如未定义,如果未传递函数参数,则函数参数为falsy),则它会计算右侧。最后一个要求值的方面是用JavaScript返回的,这与某些返回true或false的语言不同。这很方便,为什么要使用这个结构 它利用 使用它的主要原因是,如果未向函数传递参数,则提供合理的默认值 var a = function(b) { b =
很多时候我可以看到变量是这样设置的
var d = d || {}
或
我想到了几个问题
未定义
,如果未传递函数参数,则函数参数为falsy),则它会计算右侧。最后一个要求值的方面是用JavaScript返回的,这与某些返回true或false的语言不同。这很方便,为什么要使用这个结构
它利用
使用它的主要原因是,如果未向函数传递参数,则提供合理的默认值
var a = function(b) {
b = b || [];
}
在前面的代码示例中,如果未传递
b
,则默认为空白数组([]
)。但是,如果我传递了0
或其他错误,它也会变成一个空白数组。注意这一点。如果为真,则|
操作符返回左手侧,如果左手侧不为真,则返回右手侧
因此:
这是一个简单的说法:
var d;
if (!d) {
d = {};
}
应该注意的是,
var d=d | |{}
将始终为d
分配一个值,即使它是当前值(尽管智能引擎可能会对此进行优化);在obj.x=obj.x | | foo
的情况下,这无法在自定义getter/setter中进行优化,但情况不同。。。有点像。@pst我制作了Array
一个代码示例,因为它是数组的构造函数,也是语言中的实际类型/对象。是的,这个构造很常见,也很方便,但当0
时,它会咬你一口,false
和空字符串都是给定上下文的合法值。@alex想知道这是不是真的,因为它再次缺少乐观并发性。。。我只是想格式化更大的代码块。
var d = d || {}
var d;
if (!d) {
d = {};
}