2015-06-20 58 views
1

我从库中获得了一段代码,其中包含以下内容。 options = options || {}的目的是什么?Javascript确保对象不是由空或者对象定义的对象

var x = function(options) { 
     options = options || {}; 
     if ('select_message' in options) 
      options.selectMessage = options.select_message; 
     // something else 

    } 

乍一看,由于使用布尔运算符,选项似乎变为真或假。但这并不合理。我的假设是它确保“选项”不会被定义,即类似于下面的内容。

if (typeof options != 'undefined') 
    options = {}; 
+1

这应该有所帮助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators – Ian

+0

你问“目的是什么......?”,但主题行你的问题已经回答了。如果它的操作数都不是“true”或“false”,'||'操作符不会返回true或false。 – nnnnnn

+1

谢谢@Ian。我以前不知道,所以这只是我的假设。 –

回答

3

如果optionsfalsyundefinedfalsenull0等)它被分配{}(匿名对象)。当通过对象提供可选参数时,这是一种常见模式。通过确保options至少被分配一个匿名对象,它使得后面的代码在访问选项属性(如options.something)时不必检查它是否被定义。

MDN:Falsy

+2

“..未定义[或任何其他false-y值] ..” - 有时它必须根据OPs末尾提出的代码段明确检查。 – user2864740

+0

@ user2864740确实,更新提到了虚假。 – Cymen

1

的||是一个二元运算符,它将返回第一个真值。如果你做布尔({})=> true。如果选项未定义,则返回{},并将选项设置为此值。

你在想这是对的。如果选项通过“truthy”(http://www.sitepoint.com/javascript-truthy-falsy/),则对象设置为自身,或者只是保持相同的对象。如果它是“虚假的”,它将被设置为空对象。

相关问题