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建议的最后一段进行显式检查。