检索符号属性
Object.keys()
与 Object.getOwnPropertyNames()
方法可以检索对象的所有属性名称,前者返回所有的可枚举属性名称,而后者则返回所有属性名称而无视其是否可枚举。然而两者都不能返回符号类型的属性,以保持它们在 ES5
中的功能不发生变化。 而 ES6
新增了 Object.getOwnPropertySymbols()
方法,以便让你可以检索对象的符号类型属性。
Object.getOwnPropertySymbols()
方法会返回一个数组,包含了对象自有属性名中的符号值,例如:
let uid = Symbol.for("uid");
let object = {
[uid]: "12345"
};
let symbols = Object.getOwnPropertySymbols(object);
console.log(symbols.length); // 1
console.log(symbols[0]); // "Symbol(uid)"
console.log(object[symbols[0]]); // "12345"
这段代码中,object
对象只拥有一个名为 uid
的符号类型属性,Object.getOwnPropertySymbols()
方法返回的数组包含了这个符号值。
所有对象初始情况下都不包含任何自有符号类型属性,但对象可以从它们的原型上继承符号类型属性。ES6
预定义了一些此类属性,它们被称为 “知名符号”。