检索符号属性

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 预定义了一些此类属性,它们被称为 “知名符号”。