ES6默认参数还是比较简单的,不过这也是必知必会的一个知识点,它的作用就是当一个函数需要传递参数才能执行,但是恰好执行函数时没有给函数传递参数,这就需要一个默认参数才代替执行,这种场景也很常用到,假如这个函数需要一个后端的数据,但是因为某种原因服务器没有给传给我们,那这个函数就会报错或者出现一些奇怪的值,就像下面这样:
const testFunc = num => num ** (1 / 2);
console.log(testFunc(4));
// 2
// 这是正常的,但是如果没有给函数传递参数呢?
const testFunc = num => num ** (1 / 2);
console.log(testFunc());
// NaN
为什么是NaN??
好了,不卖关子了,我们使用 默认参数 来解决或者问题:
const testFunc = (num = 4) => num ** (1 / 2);
console.log(testFunc());
// 2
其实我们在 ECMAScript2015 之前也是有解决办法的:
const testFunc = num => {
let new_num = num || 4;
return new_num ** (1 / 2);
};
console.log(testFunc());
// 2
不知道大家有没有发现问题,如果我们传递了参数,但是传递了一个零呢?
const testFunc = num => {
let new_num = num || 4;
return new_num ** (1 / 2);
};
console.log(testFunc(0));
// 2
依旧是2,这就很容易出现问题,我们明明传递了参数,却还是使用默认值
当然,解决这个问题当然也有,那就是 ES6 的 逻辑空赋值(??),好吧,扯远了,本来是要说默认参数的,不过我们既然说到了,就举一个例子吧:
const testFunc = num => {
let new_num = num ?? 4;
return new_num ** (1 / 2);
};
console.log(testFunc(0));
// 0
它的规定是只在undefined或者null情况之下进行类似逻辑或操作,0当然会被当做一个正确的值了
当然方法还有,只要你可以想到,我们还可以使用三元运算符不是吗?
const testFunc = num => {
let new_num = num !== undefined ? num : 4;
return new_num ** (1 / 2);
};
console.log(testFunc(0));
// 0