我们知道函数的默认返回值是undefined,之前如果想更改默认返回值的话需要这样做
function fn(n){
return n==undefined?10:n;
};
console.log(fn());//10
console.log(fn(10));//10
console.log(fn(20));//20
但ES6增强默认参数后我们可以直接给形参赋值设置默认返回值,它可以是任意类型。
function fn(n=10){
return n;
};
console.log(fn());//10
console.log(fn(10));//10
console.log(fn(20));//20
ES6给对象增加了一个is()方法和assign()方法
但需要注意已下几种情况
console.log(-0 == +0);//true
console.log(NaN == NaN)//false
console.log(Object.is(-0, +0)); //false
console.log(Object.is(NaN, NaN));//true
先来看看它怎么使用
let obj1 = { name: "Orange" };
let obj2 = { age: 20 };
let obj3 = { name: "Ann", num: 1234 };
console.log(Object.assign(obj1,obj2,obj3));
//{name:"Ann",age:20,num:1234}
console.log(obj1);//{name:"Ann",age:20,num:1234}
console.log(obj2);//{ age: 20 }
console.log(obj3);//{ name: "Ann", num: 1234 }
可以发现遇到相同属性时,后边的会覆盖前边的。再看obj1打印的值可以发现,只有obj1的发生了改变,并且obj1就等于Object.assign()返回的值。别感到奇怪,看看它如何实现的就明白为什么会是这种情况了。
function assign(){
let target=arguments[0];
for(let i=1;i<arguments.length;i++){
for(let k in arguments[i]){
target[k]=arguments[i][k];
}
}
return target;
}
console.log(assign(obj1,obj2,obj3));
//{name: "Ann", age: 20, num: 1234}
如果想不改变第一个对象,可以这样做
let obj1 = { name: "Orange" };
let obj2 = { age: 20 };
let obj3 = { name: "Ann", num: 1234 };
console.log(Object.assign({},obj1,obj2,obj3));
这样就实现拷贝功能啦
原文:https://www.cnblogs.com/blogs-form-Ann/p/14789291.html