function getValue(value = []) {
console.log(value);
}
getValue(null); // null
getValue(undefined); // []
特点
-
默认值仅在
undefined时生效:- 如果传递的参数是
null或其他值(包括0、false、''等),默认值不会生效。 - 只有传递
undefined或不传递参数时,默认值才会生效。
- 如果传递的参数是
-
默认值可以是任意表达式:
- 默认值可以是简单的值(如
1、'hello'),也可以是复杂的表达式(如函数调用、计算表达式等)。 - 默认值甚至可以是前面参数的函数。
- 默认值可以是简单的值(如
-
默认参数是按顺序计算的:
- 默认参数的值是按从左到右的顺序计算的,因此后面的参数可以引用前面的参数
-
默认值引用前面的参数
function createUser(name, role = name === "Admin" ? "Administrator" : "User") { console.log(`Name: ${name}, Role: ${role}`); } createUser("Alice"); // 输出: Name: Alice, Role: User createUser("Admin"); // 输出: Name: Admin, Role: Administrator
注意事项
-
null不会触发默认值:null是一个明确的值,不会被替换为默认值。
function test(value = "Default") { console.log(value); } test(null); // 输出: null -
默认参数的作用域:
- 默认参数的作用域是独立的,不会受到函数体内变量的影响。
let x = 1; function test(y = x) { let x = 2; console.log(y); } test(); // 输出: 1 -
默认参数是惰性求值的:
- 默认值只在需要时计算,而不是在函数定义时计算。
let count = 0; function getValue() { return count++; } function test(value = getValue()) { console.log(value); } test(); // 输出: 0 test(); // 输出: 1