企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 对象扩展 1.对象简写 ```javascript /* 1.对象内key value相同时,可以 直接简写为 key, 等同于 key:'key' 2.对象内方法简写 , 去除function关键字, 去除冒号, 如下示例 3.key, 属性名以表达式书写 */ let obj = { a:'a', b:function(){ console.log('it\'s es5~!') }, } let a = 'memeda', b = 'clouds' let obj = { a, b(){ console.log(`it's es6~!`) }, [b+a]: 'handsome!' } console.log(obj[b+a]) /* key is cloudsmemeda res:handsome! */ ``` 2.Object方法扩展 ```javascript /* 1.Object.is() 判断两个值是否严格相等 2.Object.assign() 实现对某个对象的浅拷贝 */ /* Object.is() 解决es5无法正确判断的问题,需要两个参数 */ +0 === -0; // true NaN === NaN; // false Object.is(+0, -0); // false Object.is(NaN, NaN); // true /* Object.assign() 1. 将源对象的所有可枚举属性复制到目标对象上(target)。 2. 第一个参数是目标对象 3. 后面可以跟无限个对象作为拷贝源 4.( > 如果是非对象会先被转成对象, > 如果是 null 或 undefined 则会报错。 > 如果存在对象key同名的情况参数排列中靠后的对象会覆盖前面的 ) */ let target = { x: 1}; let s1 = { y: 2 }; let s2 = { z: 3 }; Object.assign(target, s1, s2) /* {x: 1, y: 2, z: 3} */ /* 使用场景: 1).给对象添加属性 2).给对象添加方法 3).克隆对象 4).合并对象 5).为属性指定默认值 */ class Foo { constructor(x, y) { Object.assign(this, x, y); } } Object.assig(SomeClass.prototype, { someMethod(arg1, arg2) { ... }, anotherMethod() { ... } }) function clone(originObj) { return Object.assign({}, originObj); // 将原始对象复制给空对象 } const mergeObjs = { (target, ...sources) => Object.assign(target, ...sources); } const DEFAULTS = { id: 'clouds', }; let newobject = Object.assign({}, DEFAULTS); ``` 3.对象遍历 > (1)首先遍历所有属性名为数值的属性,按数字排序; (2)其次遍历所有属性名为字符串的属性,按照生成时间排序; (3)最后遍历所有属性名为 Symbol 的属性,按照生成时间排序。 ```javascript /* 1.Object.getOwnPropertySymbols(obj) 返回该对象的所有symbol属性(非常用) 2.Object.ownKeys(obj) 返回该对象所有自身属性的数组(不包含继承来的) 3.Object.keys(),Object.values(),Object.entries() 遍历某个对象并以数组的形式 分别返回 对象的key, 对象的值, 以及包含对象键值的二维数组 */ ```