函数参数-undefined-默认值-可选参数

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;
}
posted @ 2019-12-18 14:32  雨夜稻草  阅读(1071)  评论(0编辑  收藏  举报