1、函数参数为undefined时,触发参数默认值
2、实参数量 < 形参数量,多余的形参值为 underfined
3、设置可选参数
1)JS中:
检测 undefined :
function addNum(num) { if(num === undefined ) { num = 3 } return num } console.log(addNum(1)) // 1 console.log(addNum()) // 3
使用 运算符|| : function addNum(num) { option = option || {}; option.start = option.start || 0; option.end = option.end || 10; option.step = option.step || 1; return option } console.log(move({start:4,end:5,step:2})); //{start: 4, end: 5, step: 2} console.log(move({start:4,step:2})); // {start: 4, step: 2, end: 10}
使用 arguments.length : function addNum(num) { if(arguments.length<1){ return 3; } return num } console.log(addNum()) // 1 console.log(addNum()) // 3
2)ES6中:
a、默认声明的参数,不能在函数体中再次用声明
b、参数默认值是惰性求值的
c、默认值参数位置应该是函数的尾参数
d、指定默认值以后,函数的length属性将返回没有执行默认值的参数个数
function addr(x,y=1,z=3){ }
实现原理: function addr(x) { var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3; }
解构赋值默认值: function add({x = 0 , y = 0} = { } ){ } add({x:1,y:2}) // x=1 , y =2 add({x:1}) // x=1,y=0 add() // x=0,y=0 区分: function add({x , y } = { x:0 , y:0 } ){ } add({x:1,y:2}) // x=1 , y =2 add({x:1}) // x=1,y=undefined add() // x=undefined,y=undefined 内部实现原理: function addr() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$x = _ref.x, x = _ref$x === void 0 ? 0 : _ref$x, _ref$y = _ref.y, y = _ref$y === void 0 ? 0 : _ref$y; }