默认值仅在 undefined 时生效

152 阅读1分钟
function getValue(value = []) {
  console.log(value);
}

getValue(null); // null
getValue(undefined); // []

特点

  1. 默认值仅在 undefined 时生效

    • 如果传递的参数是 null 或其他值(包括 0false'' 等),默认值不会生效。
    • 只有传递 undefined 或不传递参数时,默认值才会生效。
  2. 默认值可以是任意表达式

    • 默认值可以是简单的值(如 1'hello'),也可以是复杂的表达式(如函数调用、计算表达式等)。
    • 默认值甚至可以是前面参数的函数。
  3. 默认参数是按顺序计算的

    • 默认参数的值是按从左到右的顺序计算的,因此后面的参数可以引用前面的参数
  4. 默认值引用前面的参数

    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
    

注意事项

  1. null 不会触发默认值

    • null 是一个明确的值,不会被替换为默认值。
    function test(value = "Default") {
      console.log(value);
    }
    test(null); // 输出: null
    
  2. 默认参数的作用域

    • 默认参数的作用域是独立的,不会受到函数体内变量的影响。
    let x = 1;
    function test(y = x) {
      let x = 2;
      console.log(y);
    }
    test(); // 输出: 1
    
  3. 默认参数是惰性求值的

    • 默认值只在需要时计算,而不是在函数定义时计算。
    let count = 0;
    function getValue() {
      return count++;
    }
    function test(value = getValue()) {
      console.log(value);
    }
    test(); // 输出: 0
    test(); // 输出: 1