新增方法:
1、object.is()类来解决"==="恒等的缺点
console.log(Object.is(100,'100'));//false console.log(Object.is({},{}));//false console.log(+0===-0);//true console.log(Object.is(+0,-0));//false console.log(NaN===NaN);//false console.log(Object.is(NaN,NaN));//true
2、object.assign()方法合并指定对象至目标对象内部
(1).如果属性有相同,后面的源对象内容会覆盖之前的属性值;
(2).如果直接传非对象内容,会转换为对象;
(3).如果传入的是 undefined 和 null 会报错;
let obj1={ name:"苏玮一", age:21 } let obj2={ name:"刘路", age:23 } let obj3={ set:"男" } //...传参,合并所有对象,返回给参数的目标对象 console.log(Object.assign(obj1,obj2,obj3));//{ name: '刘路', age: 23, set: '男' } //第一个对象得到合并后的结果 console.log(obj1);
3、Object.getPrototypeOf()和 Object.setPrototypeof()方法
let obj={ fn(){ return 'fn'; } } let obj2={ fn(){ return 'fn2'; } } //以obj对象为原型 let f=Object.create(obj); console.log(f.fn()); //检测obj是否是f的原型对象 console.log(Object.getPrototypeOf(f)===obj);//true //输出原型对象的 fn console.log(f.fn()); //设置f的原型为obj2 Object.setPrototypeOf(f,obj2); console.log(Object.getPrototypeOf(f)===obj2);//true console.log(f.fn());
4、super关键字,用于原型中方法的继承功能
let obj={ fn(){ return 'fn' } } let f={ fn(){ return super.fn()+" ex"; } } //设置obj为f原型 Object.setPrototypeOf(f,obj); console.log(f.fn());//fn ex //可以设置f为原型 let h=Object.create(f); console.log(h.fn());//fn ex
Symbol类型:
//创建 Symobl 通过函数 Symbol()完整,可以传递参数,也可以为空 //注意,不支持new Symbol let obj=Symbol(); console.log(obj);//Symbol() console.log(typeof obj);//symbol类型 //在 Symbol()函数中参数,是对变量的描述,程序无法访问,只能日志打印 //为了输出测试时,便于区分 Symbol("s!"); //创建两个 Symobel 类型的变量,来验证他们独一无二的特性 //有没有参数,或参数是否相同都不恒等 //因为 Symbol 是唯一存在的 let s1=Symbol(),s2=Symbol(); console.log(s1===s2);//false //Symobol 类型变量无法进行隐式转换,需要提前显示转换匹配的类型 //Symbol 类型无法隐式转换,可显式 let s=Symbol('s'); console.log(s.toString()+"变量");//Symbol(s)变量 console.log(String(s)+"变量");//Symbol(s)变量 console.log(!s);//false
Symbol属性:
//重名的属性名不报错,被覆盖 let obj = { name : '苏玮一', name : '刘路' }; console.log(obj);//{ name: '刘路' } //拼装的属性名,也被覆盖 let x = 'name',y = 'name'; let obj = { ['user' + x] : '苏玮一', ['user' + y] : '刘路' }; console.log(obj);//{ username: '刘路' } //Symbol 作为对象属性名 let x=Symbol(),y=Symbol(); let obj={ [x]:"苏玮一", [y]:"刘路" } console.log(obj);//{ [Symbol()]: '苏玮一', [Symbol()]: '刘路' } console.log(obj[x]);//苏玮一 console.log(obj[y]);//刘路 let fn=Symbol(); let obj={ [fn](){ return 'fn' } } console.log(obj[fn]());