ES5设置默认参数
function makeDefault (name, age) {
name = name || "default name";
age = age || 18;
}
当参数为0
、''
、null
、false
等时,即使这个值合法,也会被视为一个假值,从而取默认值。这种情况下,使用typeof
检查参数类型。
function makeDefault (name, age) {
name = (typeof name !== "undefined") ? name : "default name";
age = (typeof age !== "undefined") ? age : 18;
}
ES6设置默认参数
如果没有参数传入,则提供一个初始值
function makeDefault (name, age = 18) {
}
当第二个值不传,或者传入undefined
时,age
则使用默认值
makeDefault ('lee')
makeDefault ('lee', undefined)
因此,可以为任意参数指定默认值,且已指定默认值的参数后,可以继续声明无默认值参数
function makeDefault (name, age = 18, gerder) {
}
makeDefault ('lee', undefined, 'male')
默认参数对arguments对象的影响
ES5非严格模式
命名参数的变化会同步更新到arguments对象
function es5 (name) {
console.log(name === arguments[0]); // true
name = "lee";
console.log(name === arguments[0]); // true
}
es5("xiaoming");
ES5严格模式和ES6使用默认值时
命名参数与arguments对象分离
function es6 (name) {
console.log(name === arguments[0]); // true
name = "lee";
console.log(name === arguments[0]); // false
}
es6("xiaoming");