ES6新特性之:函数默认值

83 阅读1分钟

1、具有默认值的参数,要放在列表最后

function add(x = 1, y) {  // 报错 Uncaught SyntaxError: Unexpected token ';'
    return x + y;
}

正确写法:

function add(x, y = 1) {
     return x + y;
}

2、跳过参数且保留默认值时,可以传undefind

function add(x, y = 2, z = 3) {
    return x + y + z;
}
add(1, undefined, 5);  // NaN还是8?结果是8
add(1, undefined);     // 6

3、跳过参数且不保留默认值时,可以传null(只针对数值型参数:因为null与数值进行计算时,通常隐式转换为0了)

function add(x, y = 2, z = 3) {
    return x + y + z;
}
add(1, null, 5);  // 6
add(1, null);     // 4

4、参数可以是表达式

function add(x, y = 2, z = x + y) {
    return x + y + z;
}
add(1, undefined);     // 6
add(1, 20, undefined); // 42

5、参数可以是函数表达式

function add(x = function() {return y + z}, y = 2, z = 3) {
    return x() + y + z;
}
add();              // 10
add(undefined, 20); // 46

6、函数的length属性值:等于非默认值参数的个数;

function add(x, y = 2, z = x + y) {
    return x + y + z;
}
add(1, undefined);
console.log(add.length) // 1
add(1, 20, undefined);
console.log(add.length) // 2

7、arguments的length属性值:等于传入参数的个数,包括undefined

function add(x, y = 2, z = x + y) {
    console.log(arguments.length)
}
add(1, undefined);     // 2
add(1, 20, undefined); // 3