可选参数

下面的代码可以正常执行:

  1. function square(x) { return x * x; }
  2. console.log(square(4, true, "hedgehog"));
  3. // → 16

我们定义了square,只带有一个参数。 然而,当我们使用三个参数调用它时,语言并不会报错。 它会忽略额外的参数并计算第一个参数的平方。

JavaScript 对传入函数的参数数量几乎不做任何限制。如果你传递了过多参数,多余的参数就会被忽略掉,而如果你传递的参数过少,遗漏的参数将会被赋值成undefined

该特性的缺点是你可能恰好向函数传递了错误数量的参数,但没有人会告诉你这个错误。

优点是这种行为可以用于使用不同数量的参数调用一个函数。 例如,这个minus函数试图通过作用于一个或两个参数,来模仿-运算符:

  1. function minus(a, b) {
  2. if (b === undefined) return -a;
  3. else return a - b;
  4. }
  5. console.log(minus(10));
  6. // → -10
  7. console.log(minus(10, 5));
  8. // → 5

如果你在一个参数后面写了一个=运算符,然后是一个表达式,那么当没有提供它时,该表达式的值将会替换该参数。

例如,这个版本的power使其第二个参数是可选的。 如果你没有提供或传递undefined,它将默认为 2,函数的行为就像square

  1. function power(base, exponent = 2) {
  2. let result = 1;
  3. for (let count = 0; count < exponent; count++) {
  4. result *= base;
  5. }
  6. return result;
  7. }
  8. console.log(power(4));
  9. // → 16
  10. console.log(power(2, 6));
  11. // → 64

在下一章当中,我们将会了解如何获取传递给函数的整个参数列表。我们可以借助于这种特性来实现函数接收任意数量的参数。比如console.log就利用了这种特性,它可以用来输出所有传递给它的值。

  1. console.log("C", "O", 2);
  2. // → C O 2