Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript确保对象不由空对象定义或与空对象一起定义_Javascript - Fatal编程技术网

Javascript确保对象不由空对象定义或与空对象一起定义

Javascript确保对象不由空对象定义或与空对象一起定义,javascript,Javascript,我从一个库中得到了一段代码,其中包含以下内容。options=options |{}的目的是什么 var x = function(options) { options = options || {}; if ('select_message' in options) options.selectMessage = options.select_message; // something else } 乍一看

我从一个库中得到了一段代码,其中包含以下内容。
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 = {};

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


MDN:

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


MDN:

这个| |是一个二进制运算符,它将返回第一个真值。如果执行布尔({})=>true。如果选项未定义,{}为返回值,选项设置为该值


你的想法是正确的。如果选项传入的内容是“truthy”(),则对象将设置为自身,或者只是保持相同的对象。如果它是“false”,它将被设置为空对象。

该| |是一个二进制运算符,将返回第一个truthy值。如果执行布尔({})=>true。如果选项未定义,{}为返回值,选项设置为该值


你的想法是正确的。如果选项传入的内容是“truthy”(),则对象将设置为自身,或者只是保持相同的对象。如果是“falsey”,它将被设置为一个空对象。

这应该会有帮助:你问“目的是什么…”,但你问题的主题行已经回答了这个问题。如果
|
运算符的两个操作数都不是
true
false
,则该运算符不会返回
true
false
。谢谢@Ian。我以前不知道这一点,所以这只是我的假设。这应该会有帮助:你问“目的是什么…?”,但你问题的主题已经回答了这个问题。如果
|
运算符的两个操作数都不是
true
false
,则该运算符不会返回
true
false
。谢谢@Ian。我之前不知道这一点,所以这只是我的假设。“…未定义[或任何其他假y值]…”-有时必须根据OPs建议的最后一段进行显式检查。“…未定义[或任何其他假y值]…”-有时必须根据OPs建议的最后一段进行显式检查。