前几天我得到了一段代码,我很好奇,但我不确定它实际上是做什么的;
options = options || {};
到目前为止我的想法;如果存在,则将变量options
设置为值options
,否则设置为空对象。
是/否?
答案 0 :(得分:47)
这对于将默认值设置为函数参数非常有用,例如:
function test (options) {
options = options || {};
}
如果您在没有参数的情况下调用test
,options
将使用空对象进行初始化。
如果第一个操作数是 falsy ,则逻辑OR ||
运算符将返回其第二个操作数。
Falsy 值为:0
,null
,undefined
,空字符串(""
),NaN
和当然false
。
答案 1 :(得分:12)
您的代码段中的内容是实现默认模式的最常用方法,它将返回第一个操作数的值,该值产生 true 值时转换为布尔值。
var some_data = undefined;
var some_obj_1 = undefined;
var some_obj_2 = {foo: 123};
var str = some_data || "default";
var obj = some_obj1 || some_obj2 || {};
/* str == "default", obj == {foo: 123} */
以上基本等同于执行以下更详细的替代
var str = undefined;
var obj = undefined;
if (some_data) str = some_data;
else str = "default";
if (some_obj1) obj = some_obj1;
else if (some_obj2) obj = some_obj2;
else obj = {};
逻辑OR运算符产生的值的示例:
1 || 3 -> 1
0 || 3 -> 3
undefined || 3 -> 3
NaN || 3 -> 3
"" || "default" -> "default"
undefined || undefined -> undefined
false || true -> true
true || false -> true
null || "test" -> "test"
undefined || {} -> {}
{} || true -> {}
null || false || {} -> {}
0 || "!!" || 9 -> "!!"
如您所见,如果未找到匹配项,则最后一个操作数的值为yield。
有几种情况,但最常用的是设置函数参数的默认值,如下所示:
function do_something (some_value) {
some_value = some_value || "hello world";
console.log ("saying: " + some_value);
}
...
do_something ("how ya doin'?");
do_something ();
saying: how ya doin'?
saying: hello world
这尤其是javascript与许多其他流行编程语言相比的差异之一。
运算符||
不会隐式产生布尔值,但它会保留操作数类型并产生第一个在布尔表达式中求值为true的值。
许多程序员来自不是这种情况的语言(C,C ++,PHP,Python等等),起初发现这一点相当令人困惑,当然总有相反的情况;来自 javascript ( perl 等)的人想知道为什么此功能未在其他地方实施。
答案 2 :(得分:10)
是。样本等同于:
if (options) {
options = options;
} else {
options = {};
}
OR运算符(||
)将短路并返回第一个真值。
答案 3 :(得分:6)
是的,这正是它的作用。
答案 4 :(得分:4)
发现了另一种变体:
options || (options = {});
似乎也在做同样的伎俩。