for in
以任意顺序迭代一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Object.prototype.fun ()=>{} var obj = { a:1, b:2, c:3 } for (const item in obj){ console.log("属性名:"+item+"/属性值:"+obj[item]); }
for (const item in obj){ if (obj.hasOwnProperty(item)){ console.log("属性名:"+item+"/属性值:"+obj[item]); } }
|
如果我们不希望搜索到原型上的,我们就可以使用hasOwnProperty
Object.key
返回一个给定对象的自身可枚举属性名组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。
1 2 3 4 5 6 7 8 9
| const anobj={100:'a',2:'b',7:'c'}; console.log(Object.keys(anobj)); const str = 'hello'; console.log(Object.keys(str)); const arr = ['a','b','c']; console.log(Object.keys(arr)); var obj = {a:1,b:2,c:3}; console.log(Object.keys(obj));
|
Object.values
1 2 3 4 5 6 7 8 9 10
|
const obj1={100:1,d:2,a:9,1:3,5:99,b:8}; console.log(Object.values(obj1)); const str='hello'; console.log(Object.values(str)); const arr=['a','b','c']; console.log(Object.values(arr)); var obj2={a:1,b:2,c:3}; console.log(Object.values(obj2));
|
Object.entries
返回一个给定对象自身可枚举属性的键值对数组,其排列与使用for.循环遍历该对象时返回的顺序一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const obj1={100:1,d:2,a:9,1:3,5:99,b:8}; console.log(Object.entries(obj1)); const str='hello'; console.log(Object.entries(str)); const obj2={a:1,b:2,c:3}; console.log(Object.entries(obj2)); const obj3={a:1,b:2,c:3}; for (const [key,value] of Object.entries(obj3)){ console.log(`${key}:${value}`); }
|
object.getownPropertyNames
返回一个由指定对象的所有自身属性的属性名组成的数组。(包括不可枚举属性但不包括Symbol值作为名称的
属性)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const arobj={100:1,d:2,a:9,1:3,5:99,b:8}; console.log(Object.getOwnPropertyNames(arobj)); const str='hello'; console.log(Object.getOwnPropertyNames(str)); const arr=['a','b','c']; console.log(Object.getOwnPropertyNames(arr)); const obj={a:1,b:2,c:3}; console.log(Object.getOwnPropertyNames(obj)); const syobj ={a:1,b:2 } const symbol1=Symbol('symbol1') const symbol2=Symbol('symbol2') syobj[symbol1]='hello' syobj[symbol2]='world' console.log(Object.getOwnPropertyNames(syobj));
|
Object.getownPropertySymbols()
方法返回一个给定对象自身的所有Symbol属性的数组
1 2 3 4 5 6
| const obj={a:1,b:2,c:3}; const symbol1=Symbol('symbol1') const symbol2=Symbol('symbo12') obj[symbol1]='hello' obj[symbol2]='world' console.log(Object.getOwnPropertySymbols(obj));
|
报错:TypeError: Cannot convert a Symbol value to a string
Reflect.ownKeys()
静态方法Reflect..ownKeys(()返回一个由目标对象自身的属性名组成的数组
1 2 3 4 5 6
| const obj={a:1,b:2,c:3}; const symbol1=Symbol('symbol1') const symbol2=Symbol('symbol2') obj[symbol1]='hello' obj[symbol2]='world' console.log(Reflect.ownKeys(obj));
|
报错:TypeError: Cannot convert a Symbol value to a string
注意
- 在ES6之前Object的键值对是无序的;
- 在ES6之后Object的键值对按照自然数、非自然数和Symbol进行排序,自然数是按照大小升序进行排
序,其他两种都是按照插入的时间顺序进行排序。