2012-04-27 50 views
23

可能重复:
What does “options = options || {}” mean in Javascript?两个管道符号(OR)

我在JS看到了这一点:

item = item || {}; 

我猜这是三元运算符的一些变体,但实际上做了什么?

+6

我们是否一些JavaScript snobbs在家里今晚downvoting或只是一般的无聊的人! ? – benhowdle89 2012-04-27 22:48:20

+1

@Martin。你会建议我可以搜索接收这个答案... – benhowdle89 2012-04-27 22:49:35

+0

好问题。我一直在寻找一段时间,最后[明白了](http://stackoverflow.com/questions/9579262/logical-operator-in-javascript-0-stands-for-boolean-false)。但说实话,这并不像我想象的那么容易。恢复我所有的赞扬 – 2012-04-27 22:58:28

回答

28
(expr1 || expr2) 

“返回expr1的,如果它可以被转换成真;否则,返回 表达式2”。

source

所以当expr1是(或计算结果为)这些0,"",false,null,undefined,NaN之一,那么expr2返回,否则expr1返回

2

它等同于:

if(!item){ item = {}; } 
+1

因此,如果项目是假的,那么项目是一个空对象? – benhowdle89 2012-04-27 22:44:32

+2

'false'或'undefined'或者其他任何有价值的东西,是的 – 2012-04-27 22:45:05

+2

为什么这是低票? – 2012-04-27 22:45:54

7

如果项目存在,设置项项目,或将其设置为{}

+4

你不值得投票。 – 2012-04-27 23:05:15

+0

@Sheikh是的,答案没有错,但我觉得它很差。 Kolink和ajax在这里有最好的答案。特别是Kolink值得赞赏 – 2012-04-27 23:06:32

+0

@你为什么不喜欢? 。 – 2012-04-27 23:08:21

11

这就是所谓的冗余,但在这种情况下,它是一件好事。基本上,如果item没有定义(或以其他方式falsy(false0"" ...),然后我们给它一个默认值

最常见的例子是在事件:

evt = evt || window.event; 
+4

您不配拥有反对票。 – 2012-04-27 23:05:44