可选参数
下面的代码可以正常执行:
function square(x) { return x * x; }
console.log(square(4, true, "hedgehog"));
// → 16
我们定义了square
,只带有一个参数。 然而,当我们使用三个参数调用它时,语言并不会报错。 它会忽略额外的参数并计算第一个参数的平方。
JavaScript 对传入函数的参数数量几乎不做任何限制。如果你传递了过多参数,多余的参数就会被忽略掉,而如果你传递的参数过少,遗漏的参数将会被赋值成undefined
。
该特性的缺点是你可能恰好向函数传递了错误数量的参数,但没有人会告诉你这个错误。
优点是这种行为可以用于使用不同数量的参数调用一个函数。 例如,这个minus
函数试图通过作用于一个或两个参数,来模仿-
运算符:
function minus(a, b) {
if (b === undefined) return -a;
else return a - b;
}
console.log(minus(10));
// → -10
console.log(minus(10, 5));
// → 5
如果你在一个参数后面写了一个=
运算符,然后是一个表达式,那么当没有提供它时,该表达式的值将会替换该参数。
例如,这个版本的power
使其第二个参数是可选的。 如果你没有提供或传递undefined
,它将默认为 2,函数的行为就像square
。
function power(base, exponent = 2) {
let result = 1;
for (let count = 0; count < exponent; count++) {
result *= base;
}
return result;
}
console.log(power(4));
// → 16
console.log(power(2, 6));
// → 64
在下一章当中,我们将会了解如何获取传递给函数的整个参数列表。我们可以借助于这种特性来实现函数接收任意数量的参数。比如console.log
就利用了这种特性,它可以用来输出所有传递给它的值。
console.log("C", "O", 2);
// → C O 2