Javascript确保对象未被OR定义为空对象

时间:2015-06-20 04:52:13

标签: javascript

我从库中获得了一段代码,其中包含以下内容。 options = options || {}的目的是什么?

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

    }

乍一看,似乎选项将变为true或false,因为它使用布尔运算符。但这并没有多大意义。我的假设是它确保“选项”不会被定义,例如下面的内容。

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

2 个答案:

答案 0 :(得分:3)

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

MDN:Falsy

答案 1 :(得分:1)

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

你的想法是正确的。如果选项传递的是" truthy" (http://www.sitepoint.com/javascript-truthy-falsy/),对象设置为自身,或者只是保持相同的对象。如果它是" falsey",它将被设置为空对象。