美文网首页
es6:关于展开运算符、不定参

es6:关于展开运算符、不定参

作者: 天幕下悠悠 | 来源:发表于2019-01-15 15:24 被阅读0次

不定参数,三个点(...)
含义:
①用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数.
语法格式: 在形参面前加三个点( ... )
②用在数组前面,可以把数组的值全部打散,展开,叫展开运算符.
语法格式: 在数组面前加三个点( ... )

在形参中:

//es5求和
function add(){
    var res=0;
    for(var i=0;i<arguments.length;i++){
        res+=arguments[i]
    }
    return res
}
console.log(add(10,20,30))
 
//不定参数
function add(...val){
    console.log(val); //[10, 20, 30]
    console.log(typeof val); //object
}
add(10,20,30)
 
 
//es6的不定参数 修改求和
function add(...val){
    var res=0;
    for(var i=0;i<val.length;i++){
        res+=val[i]
    }
    return res
}
console.log(add(10,20,30))
 
---------------------------------------------
 
//注意
function(...val,res){} //报错,不定参数要放形参后面
function(...v,...v){} //报错,不能出现多个不定参数
 
function add(res,...val){
    console.log(res); //10
    console.log(val); //[20, 30, 40, Array[2]]
}
add(10,20,30,40,[100,200])
 
---------------------------------------------
 
//有选择性拷贝对象 ,只要其中两个
var oUser={
    name:'aaa',
    age:22,
    sex:'man'
}
/*
function copyObj(src){//src原对象
    var target=Object.create(null);//创建一个目标对象
    for(var i=1;i<arguments.length;i++){//从1开始才是拷贝属性
        target[arguments[i]]=src[arguments[i]]
    }
    return target
}
*/
//es6修改
function copyObj(src,...attr){//src原对象
    var target=Object.create(null);//创建一个目标对象
    for(var i=0;i<attr.length;i++){//从1开始才是拷贝属性
        target[attr[i]]=src[attr[i]]
    }
    return target
}
 
var oUser2 = copyObj(oUser,'name','sex');
console.log(oUser2); //Object {name: "aaa", sex: "man"}

//不定参不会影响grguments
function show(...val){
    console.log(val.length); //3
    console.log(arguments.length); //3
    val[0]=100;
    console.log(val[0],val[1],val[2]); //[100 10 30]
    console.log(arguments[0],arguments[1],arguments[2]); //[4 10 30]
}
show(4,10,30)

在数组中(展开运算符):

//求变量和数组的最大值
let a=10,b=20;
console.log(Math.max(a,b))
let arr=[10,200,300,3]
//console.log(Math.max(arr)); //Math.max()不能求数组
//es5做法
console.log(Math.max.apply(Math,arr)); //300
//es6的数组的三个点  ,展开运算符
console.log(Math.max(...arr,4,30,40)); 

相关文章

网友评论

      本文标题:es6:关于展开运算符、不定参

      本文链接:https://www.haomeiwen.com/subject/osjydqtx.html