在ES6之前,不能直接为函数的参数指定默认值,只能采取变通的方法。
function log(x,y){
y = y||'world';
console.log(x,y);
}
log('kkk');//kkk world
这种写法的缺点在于:
如果参数y赋值了,但是对应的布尔值为false,则该赋值不起作用。如果在调用函数的时候,传入的y参数是一个空字符串,那么y就会被修改为默认值。
避免这个问题,需要先判断一下:1.通过判断值是否等于undefined,2.判断arguments.length是否为1.
但是ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。
function log(x,y='world'){
console.log(x,y);
}
log('hello'); //hello world
ES6语法的好处:
1.简洁
2.阅读代码的人可以看出哪些参数是可以省略的,不用查看函数体或文档
3.有利于将来的代码优化,即使未来的版本即使拿掉这个参数,以前的代码也可以运行
还有参数变量是默认声明的,不能在函数体内部再进行声明。
与解构赋值默认值结合使用
这里有两种写法需要区分一下:
function m1({x=0,y=0} = {}){
return [x,y];
}
function m2({x,y} = {x:0,y:0}){
return [x,y];
}
m1({x:3});//[3,0]
m2({x:3});//[3,undefined]
m1({});//[0,0]
m2({});//[undefined,undefined]