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属性。
网友评论