3 回答
TA贡献1877条经验 获得超6个赞
function test (options) { options = options || {};}
test
options
||
法尔西0
, null
, undefined
""
), NaN
false
.
TA贡献1829条经验 获得超13个赞
是因为默认模式..
代码段中的内容是实现默认模式,它将返回第一个操作数的值,该操作数将生成千真万确值转换为布尔值时。
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 -> "!!"
如您所见,如果未找到匹配项,则最后一个操作数的值为产生值。
这什么时候有用?
有几种情况,但最流行的情况是设置函数参数的默认值,如下所示:
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不知道为什么这个特性没有在其他地方实现。
TA贡献1776条经验 获得超12个赞
if (options) { options = options;} else { options = {};}
||
添加回答
举报