当前位置: 首页 > Web前端 > HTML

ES6新API:Object

时间:2023-03-28 00:36:37 HTML

1.Object.is函数类型:(v1:any,v2:any)=>boolean;//接收两个值比较是否相等,返回一个boolean结果Object.is(...)函数的比较规则与严格相等===基本相同,但是有两个特殊值——NaN和-0。注意:在进行严格相等比较时,NaN本身是不相等的,+0和-0是相等的:NaN===NaN;//false0===-0;//true但是在Object.is的判断规则中(...),NaN相等,+0和-0不相等(因为+,-可以表示方向,-在代码中一般是有意义的):Object.is(NaN,NaN);//trueObject.is(0,-0);//false就是为什么,当我们需要严格判断NaN和-0时,可以使用Object.is(...),这个函数不能代替===。2.Object.getOwnPropertySymbols函数类型:(obj:any)=>Symbol[];//接受一个对象,返回一个由该对象中所有Symbol类型的键组成的数组。当没有Symbol属性时,返回空数组ES6New新增了Symbol的基本类型。由于Symbol值的独特性,将Symbol作为一个对象的属性是非常有吸引力的。Object.getOwnPropertySymbols(...)该方法是获取对象上的所有Symbol属性。constobj={[Symbol('prop')]:'我是符号属性的值',[Symbol.iterator](){returnthis;},};console.log(Object.getOwnPropertySymbols(obj));//[Symbol(prop),Symbol(Symbol.iterator)]3.Object.setPrototypeOffunctiontype:(obj:T,prototype:Object|null)=>T;//这个函数将原型设置为obj原型对象,返回值是obj本身与通过__proto__属性修改原型对象obj.__proto__=prototype相比,使用Object.setPrototypeOf(obj,protorype)更加合规,所以当我们有修改原型的需求时object,最好使用Object.setPrototypeOf(...)。但需要注意的是,修改一个对象的原型对象的操作是非常缓慢的,而且这种行为也会让代码更难理解。我们最好避免修改对象的原型对象,我们可以通过Object.create(...)来创建一个带有我们想要的原型对象的对象。constobj={};constobj2={name:'obj2',};//尽量避免Object.setPrototypeOf(obj,obj2);//略微推荐constobj3=Object.create(obj2);console.log(obj.name,obj3.name);//obj2obj24.Object.assignfunctiontype:(target:T,...objs:U[])=>T&U;//赋值所有可枚举属性Assign将一个或多个源对象的值赋给目标对象,并返回目标对象。targetObject.assgin(...)第一个参数是目标对象,其他参数是要复制属性的数据源对象。该函数会将数据源对象中的可枚举和自有(不在原型链上)属性按照数据源对象传入的顺序浅拷贝到目标对象中。constobj={self:'self',};constobj2={name:'obj2',};Object.setPrototypeOf(obj,obj2);Object.defineProperty(obj,'notEnumerable',{enumerable:false,});consttarget={};Object.assign(target,null,undefined,obj);//name属性是obj的原型对象obj2上的一个属性,obj的notEnumerable不可枚举,所以最后只复制一个self属性控制台.log(target);//{self:'self'}需要注意的是,当传入数据源对象为null或undefined时,该函数不会抛出错误。