ES6 函数的扩展1---参数,属性,rest, 扩展运算符

2019-06-20  本文已影响0人  萘小蒽

1 . 函数参数的默认值

function log(x,y){
   y=y||'你好';
  console.log(x,y)
}
log('妹子')  //妹子你好

严格上来说有还需要判断参数的类型,如果比如上面函数,y传入的为false,那么参数就不起作用了。

function log(x,y='你好'){
  console.log(x,y)
}
log('妹子')  //妹子,你好
function log({x,y=5}){
  console.log(x,y)
}
log2({x:1,y:2})  // 1,2

2 . 函数length属性

function log1(x,y){
}
console.log(log1.length)  //2
function log2(x,y='你好'){
}
console.log(log2.length)  //1

之所以会失真,我们要了解函数的length存在含义,它的数值表示函数预期传入的参数个数,当参数指定默认值的时候,函数的length将失真。

2 . 作用域

var x = 2;
function log(x,y = x){
 console.log(x,y)
}
log(1) //1 1

上面调用log函数时,由于函数作用域的变量x已经生成,且赋值为1,所以y等于函数内部x=1,而不是全局作用域的x变量。

3 . 应用

function ThrowIfMissing(){
   throw new Error('Missing parameter');
}
function foo(mustBeProvided = ThrowIfMissing()){
  return mustBeProvided 
}
foo()   //Uncaught Error: Missing parameter

上面的函数,如果运行foo不传参,会直接触发ThrowIfMissing(),抛出异常。

function foo(mustBeProvided = undefine){...}

4. rest参数

function add(...values){
  let sum = 0;
  for( var val of values){
    sum+ = val;
   }
   return sum 
}
add(1,2,3)  //6
function foo (...values){ console.log(values) }
foo(1,2,3) //  [1, 2, 3]

rest解决了arguments对象的局限性,因为rest就是数组的实例,某些需求下各种方便。

5. 扩展运算符

console.log(...[ 1, 2, 3 ])  //1, 2, 3
console.log(0,...[ 1, 2, 3 ], 4, 5)  //0, 1,  2, 3, 4, 5
//ES5
function add(x, y, z){
  return x+y+z;
}
var arr = [1,2,3]
add.apply(null,arr)
//ES6
add(...arr)
  1. 合并数组
//ES5
[1,2].concat(arr);
[1,2].concat( arr1, arr2, arr3 )
//ES6
[1, 2, ...arr]
[1,2, ...arr1, ...arr2, ...arr3 ]
  1. 与解构赋值结合
//ES5
a = arr[0],rest = arr.slice(1);
//ES6
[a,...rest] = arr;

...运算符只能放在参数的最后一位,放在其他地方会报错。

[...'hello'] // ["h", "e", "l", "l", "o"]
上一篇 下一篇

猜你喜欢

热点阅读