Hi,我是布兰妮甜 !在 ECMAScript 6 (ES6) 之前,JavaScript 函数参数的默认值一直是 undefined。这意味着如果你想为参数设置默认值,你必须在函数体内手动检查参数是否为 undefined,然后进行赋值。这种方式不仅繁琐,而且容易出错。ES6 引入了
默认参数
这一新特性,它允许你直接在函数定义时为参数指定默认值。这使得函数定义更加简洁、易读,同时也减少了出错的可能性。
一、基本语法
function functionName(param1 = defaultValue1, param2 = defaultValue2, ...) {
// 函数体
}
-
param1
,param2
, …: 函数参数。 -
defaultValue1
,defaultValue2
, …: 对应参数的默认值。
示例:
function greet(name = "World") {
console.log(`Hello, ${name}!`);
}
greet(); // 输出: Hello, World!
greet("Alice"); // 输出: Hello, Alice!
二、优势
-
代码简洁: 无需在函数体内手动检查参数是否为
undefined
并进行赋值,代码更加简洁易读。 -
减少错误: 避免了因忘记检查参数而导致错误的可能性。
-
提高可维护性: 默认参数直接体现在函数定义中,方便理解和维护。
三、注意事项
- 默认参数只有在对应参数为
undefined
时才会生效**。 传入 null或
false等其他
falsy` 值不会触发默认值。
function test(a = 1) {
console.log(a);
}
test(undefined); // 输出: 1
test(null); // 输出: null
test(false); // 输出: false
test(0); // 输出: 0
- 默认参数可以是任意表达式,甚至是函数调用。
function getDefaultValue() {
return 42;
}
function test(a = getDefaultValue()) {
console.log(a);
}
test(); // 输出: 42
- 默认参数是在函数调用时进行求值的。 这意味着每次调用函数时,默认参数都会被重新计算。
let count = 0;
function getDefaultValue() {
return count++;
}
function test(a = getDefaultValue()) {
console.log(a);
}
test(); // 输出: 0
test(); // 输出: 1
test(); // 输出: 2
四、进阶用法
- 与解构赋值结合使用: 你可以将默认参数与解构赋值结合使用,为对象的属性设置默认值。
function createUser({ name = "Anonymous", age = 18 } = {}) {
console.log(`Name: ${name}, Age: ${age}`);
}
createUser(); // 输出: Name: Anonymous, Age: 18
createUser({ name: "Alice" }); // 输出: Name: Alice, Age: 18
- 利用函数参数默认值实现惰性求值: 你可以利用函数参数默认值实现惰性求值,即只有在需要时才计算表达式的值。
function expensiveCalculation() {
console.log("Performing expensive calculation...");
return 42;
}
function doSomething(value = expensiveCalculation()) {
console.log(`Value: ${value}`);
}
doSomething(10); // 输出: Value: 10
doSomething(); // 输出: Performing expensive calculation... Value: 42
五、总结
默认参数是 ES6 中一个非常实用的新特性,它简化了函数定义,提高了代码的可读性和可维护性。掌握默认参数的使用技巧,可以让你编写出更加优雅、健壮的 JavaScript 代码。
一些额外的建议:
-
尽量使用默认参数来简化代码,但也要注意不要过度使用,以免影响代码的可读性。
-
在使用默认参数时,要注意其求值时机,避免出现意外的结果。
-
可以结合解构赋值和默认参数,为对象的属性设置默认值,使代码更加简洁。
希望这篇文章能够帮助你更好地理解和使用 ECMAScript 的默认参数特性。