什么是“选项=选项||” {}“在JavaScript中的意思?

我前几天有一段代码让我好奇,但是我不太确定它到底在做什么。

options = options || {}; 

我到目前为止的想法; 将variablesoptions设置为值options ,如果不存在,则将其设置为空对象。

是/否?

这对于将默认值设置为函数参数非常有用,例如:

 function test (options) { options = options || {}; } 

如果您在没有参数的情况下调用testoptions将被初始化为一个空对象。

逻辑OR || 如果第一个操作数是假的,操作符将返回第二个操作数。

Falsy的值是: 0nullundefined ,空string( "" ), NaN ,当然是false

是。 该示例等同于:

 if (options) { options = options; } else { options = {}; } 

OR运算符( || )将短路并返回第一个真值。

这是默认模式

你的代码片段是实现默认模式的最常见的方式,它将返回第一个操作数的值,当转换为布尔值时,该值产生一个值。

 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} */ 

以上基本相当于做了以下更详细的select

 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。


什么时候这有用?

有几种情况,尽pipe最stream行的是设置函数参数的默认值,如下所示:

 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与其他stream行编程语言相比的区别之一。

运营商|| 不隐式地产生一个布尔值,但是它保留操作数types,并产生第一个将在布尔expression式中计算为真的值。

许多程序员来自不是这种情况的语言(C,C ++,PHP,Python等),起初觉得这样比较混乱,当然总是相反的。 来自javascriptperl等)的人想知道为什么这个function没有在其他地方实现。

是的,这正是它所做的。

发现了另一个变化:

 options || (options = {}); 

似乎也是这样做的。