function x(a) {
var a = a || []; // valor por defecto de a, las declaraciones se unen.
// hacer algo con a
}
x(); // sin argumentos, a se establecerá como []
x({}); // a se establecerá como {}
var我个人认为,当您已经将变量定义为参数时,不太建议使用它。最好不说它var。
function x(a) {
a = a || [];
// hacer algo con a
}
这样做的目的是保留变量的值,如果它之前已经定义过。
在这种特殊情况下 (
var a = a || [];
) 所做的是,如果a
之前已经在代码中定义了变量,则保持原样 (a
)。但如果尚未定义,则将其初始化为空数组 ([]
)。请注意,当您复制变量声明时,javascript 不会发出任何警告。它只是将两个声明简化为函数开头的单个声明。
在函数开始时减少
var a = undefined;
。现在,在将
a
其声明为参数的函数中,会发生同样的事情,您将复制声明,而 javascript 会将重复项减少为单个声明。对答案
这是 ECMAScript 5 中用于声明参数默认值的一种技术。
示例:(ECMAScript 5)
var
我个人认为,当您已经将变量定义为参数时,不太建议使用它。最好不说它var
。这是最不容易出错的方法。一个不是 javascript 专家的程序员可以根据常识相信 的第二个声明
a
隐藏了第一个声明,这对他来说是一个错误。考虑这个例子:
正如我已经说过的,声明移到了开头,并
var a
没有声明一个只在 if 中有效的新变量。它是a
整个函数的同一个变量。不同于其他语言。最后,在 ECMAScript 2015 中,不再需要该技术,因为您可以像这样在函数声明中声明默认值:
到目前为止所有的答案都是正确的,但没有一个解释为什么,所以我要添加它。
||
与许多其他语言一样,运算符是逻辑析取运算符,即OR操作。现在,在 JavaScript 中,这个操作符不会像你期望的那样返回true
,false
而是返回字符串中第一个计算结果为 true 的值。如果不存在这样的值,即所有参数均为false,则将返回字符串中的最后一个值。因此,
var a = a || []
它的工作原理如下:a
:a
包含一个真值,则返回它的值。a
包含一个错误值(例如undefined
,如果参数未通过),则继续评估。[]
:因此,在最高级别,我们有: 1
a
已定义,则返回其值。a
未定义,则返回[]
.如前所述,这通常用于声明函数参数的默认值。如果函数接受以下任何值作为有效值,则必须特别注意此模式:
null
false
0
''
(一个string
空的)所有这些值都评估为假,因此我们可能会得到误报。当然,如果这些值是默认值,什么都不会改变:它会
a || 0
返回0
是否定义a
。0
如果其中任何一个值有效,请改用以下模式:
当然,请使用所需的默认值而不是
[]
.它变成了这样的东西:
如果变量存在
a
且已定义,则将变量保留a
原样,如果未定义,则将引用分配给新的array
void。它用于定义一个默认值,以防它
a
不存在也是在函数参数中定义默认值的方式。