可选参数
下面的代码可以正常执行:
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));// → -10console.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));// → 16console.log(power(2, 6));// → 64
在下一章当中,我们将会了解如何获取传递给函数的整个参数列表。我们可以借助于这种特性来实现函数接收任意数量的参数。比如console.log就利用了这种特性,它可以用来输出所有传递给它的值。
console.log("C", "O", 2);// → C O 2
