JS对象属性遍历工具对比

2019-12-13  本文已影响0人  多米帕帕
const proto = {
    p1 : "a"
}

const subObj = Object.create(proto);
subObj.sp1 = "b";

const sp2 = Symbol.for("c");
subObj[sp2] = "c";

Object.defineProperty(subObj,"sp3",{
    enumerable:false,
    value:"d"
})

subObj[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log(Object.keys(subObj));
console.log("--------------")
for(const keys in subObj){
    console.log(keys);
}
console.log("--------------")
for(const keys of subObj){
    console.log(keys);
}
console.log("--------------")
console.log(Object.getOwnPropertyNames(subObj));
console.log("--------------")
console.log(Object.getOwnPropertySymbols(subObj));

输出结果:

["sp1"]
--------------
sp1
p1
--------------
1
2
3
--------------
 ["sp1", "sp3"]
--------------
[Symbol(c), Symbol(Symbol.iterator)]

分析如下:

Object.keys

返回对象可枚举自身的属性。

for in

返回对象可枚举自身以及原型上的属性。

for of

只能用于可迭代对象,调用迭代钩子上的属性。

getOwnPropertyNames

返回对象自身所有属性,包括不可枚举属性。

getOwnPropertySymbols

返回对象自身Symbol属性。

上一篇下一篇

猜你喜欢

热点阅读