什么是“选项=选项||” {}“在JavaScript中的意思?
我前几天有一段代码让我好奇,但是我不太确定它到底在做什么。
options = options || {};
我到目前为止的想法; 将variablesoptions
设置为值options
,如果不存在,则将其设置为空对象。
是/否?
这对于将默认值设置为函数参数非常有用,例如:
function test (options) { options = options || {}; }
如果您在没有参数的情况下调用test
, options
将被初始化为一个空对象。
逻辑OR ||
如果第一个操作数是假的,操作符将返回第二个操作数。
Falsy的值是: 0
, null
, undefined
,空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等),起初觉得这样比较混乱,当然总是相反的。 来自javascript ( perl等)的人想知道为什么这个function没有在其他地方实现。
是的,这正是它所做的。
发现了另一个变化:
options || (options = {});
似乎也是这样做的。