在 JavaScript 中,函数默认值是非常实用的一个特性。在以前的 JavaScript 版本中,我们必须手动检查函数参数是否存在并赋予默认值,这样很容易出错。而在 ES6 中,我们可以通过函数默认值的方式来更加简单地处理函数参数。
函数默认值的基本语法
在 ES6 中,我们可以使用等号(=)来为函数参数设置默认值。例如:
function greet(name = 'world') { console.log(`Hello, ${name}!`); }
上面的函数 greet 中为参数 name 设置了默认值为 'world'。这意味着如果调用 greet 函数时不提供任何参数,name 的值将是 'world'。
greet(); // 输出 Hello, world! greet('Alice'); // 输出 Hello, Alice!
默认值表达式和默认对象
除了基本值之外,我们也可以使用表达式或默认对象作为参数的默认值。例如:
-- -------------------- ---- ------- -------- ------ - - -- - ------ - - -- - -------------------- -- -- - ------------------ ---- -- -- - -------- ----------- - --- - --------------------- - ------ -- -- -- ----- ---- ----- --- -- -- - ---- ----- -
在上面的例子中,我们分别使用了表达式 b = a
和对象 {}
作为参数的默认值。
函数默认值的使用技巧
使用函数默认值可以让我们的代码变得更加简洁和易读。下面是一些函数默认值的使用技巧:
1. 覆盖 undefined 和 null 值
当参数的值为 undefined 或 null 时,使用默认值可以避免在函数内部的判断。例如:
function greet(name = 'world') { console.log(`Hello, ${name}!`); } greet(undefined); // 输出 Hello, world! greet(null); // 输出 Hello, null!
2. 避免出现参数个数不匹配的问题
在以前的 JavaScript 中,我们必须手动检查函数参数是否存在并赋予默认值。而在 ES6 中,我们可以通过函数默认值的方式来更加简单地处理函数参数。这样就可以避免出现参数个数不匹配的问题。例如:
function swap(a, b = a) { return [b, a] } console.log(swap(1)); // 输出 [1, 1] console.log(swap(1, 2)); // 输出 [2, 1]
在上面的例子中,由于 b 的默认值为 a,因此当只传递一个参数时,b 的值将与 a 相等。
3. 函数参数可以是函数调用的返回值
在函数默认值中,我们可以使用函数调用的返回值作为参数的默认值。例如:
function randomNumber() { return Math.random() * 100; } function foo(num = randomNumber()) { console.log(num); } foo(); // 输出随机数 foo(); // 再次输出随机数
在上面的例子中,我们使用函数 randomNumber() 的返回值作为参数 num 的默认值。每次调用函数 foo() 时,num 都会得到不同的随机数值。
4. 实现函数参数的可选性
在 JavaScript 中,函数参数是默认为 undefined。使用函数默认值可以实现函数参数的可选性。例如:
function greet(name = 'world', message) { console.log(`${message}, ${name}!`); } greet('Alice', 'Good morning'); // 输出 Good morning, Alice! greet('Bob'); // 输出 undefined, Bob!
在上面的例子中,我们使用了默认值来实现第二个参数 message 的可选性。
总结
本文介绍了 ES6 中函数默认值的基本语法、默认值表达式和默认对象,并提供了函数默认值的使用技巧。使用好函数默认值能够让我们的代码更加简洁和易读,避免出现参数个数不匹配的问题,实现函数参数的可选性和提升代码的可维护性。
示例代码:https://codepen.io/pen/?editors=0012
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6469d568968c7c53b09a3550