一、属性的简洁表示法:在对象之中,直接写变量
{ let a = "zhangsan"; let obj = { a } console.info(obj.a);//zhangsan }
二、属性名表达式
使用字面量方式定义对象(使用大括号),在 ES5 中只能使用(标识符)定义属性
var obj = { foo:true, abc:123 }
es6允许在字面量中用变量作key,即用[key]
{ let foo = "max-vlan" let obj = { [foo]:22,//允许在字面量中用变量作key,即用[key] abc:123 } console.info(obj["max-vlan"]);//22 console.info(obj[foo]);//22 }
三、获取方法名
{ let obj = { run(){ return "我是run" } } console.log(obj.run.name);//run }四、Object.is():比较(与严格比较运算符(===)的行为基本一致)
不同之处只有两个:一是+0不等于-0,二是NaN等于自身
{ console.info(34=="34")//true console.info(34==="34")//false console.info(Object.is(34,"34"))//false console.info(+0===-0)//true console.info(Object.is(+0,-0))//false console.info(NaN===NaN)//false console.info(Object.is(NaN,NaN))//true }五、assign
Object.assign方法用于对象的合并,
将源对象(source)的所有可枚举属性,复制到目标对象(target)
有点类似于$.extend
{ const target = { a: 1,b:1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; console.info(Object.assign(target, source1, source2));//{a: 1, b: 2, c: 3} console.log(target);//{a: 1, b: 2, c: 3} }
六、Object.getOwnPropertyDescriptor=>获取该属性的描述对象
{ let obj = { a:1, b:23 } console.info(Object.getOwnPropertyDescriptor(obj,'a')); //{value: 1, writable: true, enumerable: true, configurable: true} obj.enumerable = false;//反而会使得obj多个属性,所以通过这种方式设置不可枚举无效 for(let k in obj){ console.info(k);//a b enumerable } }
//让对象的某个属性不可枚举 { function Tabs(){ } Tabs.prototype = { constructor:Tabs, a:1, run(){ } } let tab = new Tabs(); console.info(tab.constructor);//用prototype导致constructor变成可枚举 ƒ Tabs() {} for( let k in tab){ console.log(k);//constructor a run } Object.defineProperty(tab,"constructor",{ enumerable:false }) for( let k in tab){ console.log(k);//a run } }
七、Object.setPrototypeOf
{ // let arr = [1,2,3]; // arr.__proto__.aabb = 23; // console.info(arr.aabb)//不推荐该方式 //正式推荐的设置原型对象的方法 let proto = {}; let obj2 = {a:2,b:4}; Object.setPrototypeOf(obj2,proto); proto.x = 43; proto.y =23; console.info(proto);//{x: 43, y: 23} console.info(obj2);//{a: 2, b: 4} x与y存储在__proto__中 console.info(obj2.x,obj2.y);//{x: 43, y: 23} }
八、对象的遍历:
Object.keys()
Object.values()
Object.entries()
{ let obj = { a:1, b:2, c:"23" } for(let key of Object.values(obj)){ console.info(key);//1 2 23 } //for in循环遍历对象的属性 //当"对象"为数组时,属性指的是数组的"索引"; //当"对象"为对象是,属性指的是对象的"属性"。 console.info(Object.keys(obj));//(3) ["a", "b", "c"] for(let value in Object.keys(obj)){ console.info(value)//数组索引=>0,1,2 } for(let value of Object.keys(obj)){ console.info(value);//a b c } for(let [key,val] of Object.entries(obj)){ console.info(key,val);//a 1,b 2,c 23 } }