ES7 之 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() 方法详解

Javascript 是一门弱类型语言,并且其对象是非常灵活的。因此,我们经常需要使用一些工具来处理和操作对象。ES7中,新增了 Object.getOwnPropertyNames()Object.getOwnPropertySymbols() 方法来处理对象。这两个方法的主要作用是获取对象中的所有属性名称,包括普通属性和 symbol 属性。

Object.getOwnPropertyNames()

Object.getOwnPropertyNames() 方法可以获取对象中的所有属性名称,包括可枚举和不可枚举的属性,但不包含 symbol 属性。其语法如下:

Object.getOwnPropertyNames(obj)

其中,obj 是要获取属性名称的对象。

下面是一个简单的示例,说明如何使用 Object.getOwnPropertyNames() 方法:

let obj = {
    name: "John",
    age: 30,
};
let keys = Object.getOwnPropertyNames(obj);
console.log(keys);

执行结果为:

Object.getOwnPropertyNames() 方法返回一个数组,数组中包含所有属性名称。

Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols() 方法可以获取对象中的所有 symbol 属性。其语法如下:

Object.getOwnPropertySymbols(obj)

其中,obj 是要获取属性名称的对象。

下面是一个示例,说明如何使用 Object.getOwnPropertySymbols() 方法:

let id = Symbol("id");
let obj = {
    name: "John",
    age: 30,
    [id]: 1001,
};
let symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols);

执行结果为:

Object.getOwnPropertySymbols() 方法返回一个数组,数组中包含所有 symbol 属性的 key 值。

总结

Object.getOwnPropertyNames()Object.getOwnPropertySymbols() 方法可以帮助我们获取对象中特定类型的属性名称。它们对于操作对象非常有用,特别是在编写 React 组件时很有用。此外,我们还可以使用 Object.keys()Reflect.ownKeys() 方法来获取对象中的属性名称。

示例代码

下面是一个完整的示例代码,展示如何使用 Object.getOwnPropertyNames()Object.getOwnPropertySymbols() 方法:

let id1 = Symbol("id1");
let id2 = Symbol("id2");
let obj = {
    name: "John",
    age: 30,
    [id1]: 1001,
};

Object.defineProperty(obj, "gender", {
    value: "male",
    enumerable: false,
});

console.log("Properties:");
let keys = Object.getOwnPropertyNames(obj);
keys.forEach((key) => {
    console.log(`${key}: ${obj[key]}`);
});

console.log("Symbols:");
let symbols = Object.getOwnPropertySymbols(obj);
symbols.forEach((symbol) => {
    console.log(`${symbol.toString()}: ${obj[symbol]}`);
});

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659fa1adadd4f0e0ff82d81b


纠错反馈