javascript - 访问对象上 Symbol(id) 属性的值

标签 javascript ecmascript-6 ecmascript-5

我有一个从第 3 方 API 获取的对象,如下所示:

{
    name:"Luke Skywalker",
    __typename:"People",
    Symbol(id):"ROOT_QUERY.people."
}

虽然“Luke Skywalker”可以通过简单的object.name访问, 如何获取此对象的 Symbol(id) 属性的值?

最佳答案

那个对象初始化器是无效的,所以很难回答。

如果这确实是一个以符号命名的属性,则答案取决于该符号是否已全局注册。

如果不是,您只能通过 getOwnPropertySymbols 发现符号。如果它是唯一的,很好,你的状态很好:

const data = {
    name:"Luke Skywalker",
    __typename:"People",
    [Symbol("id")]:"ROOT_QUERY.people."
};
console.log(data[Object.getOwnPropertySymbols(data)[0]]);

假设只有一个以符号命名的属性,我们可能不应该这样做。相反,让我们寻找具有描述性字符串 "Symbol(id)" 的 Symbol:

const data = {
    name:"Luke Skywalker",
    __typename:"People",
    [Symbol("id")]:"ROOT_QUERY.people."
};
const sym = Object.getOwnPropertySymbols(data).find(function(s) {
    return String(s) === "Symbol(id)";
});
console.log(sym ? data[sym] : "Symbol(id) not found");


但是如果它是全局注册的并且你知道它注册在哪个字符串下,你可以使用 Symbol.for 来获取它:

const data = {
    name:"Luke Skywalker",
    __typename:"People",
    [Symbol.for("id")]:"ROOT_QUERY.people."
};
console.log(data[Symbol.for("id")]);

关于javascript - 访问对象上 Symbol(id) 属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44734124/

相关文章:

javascript - 函数表达式是否有自己的作用域/词法环境

javascript - 使用Javascript动态改变div的宽度

javascript - 制作响应式导航栏,内容在左中右

javascript - 如何扩散到导出

JavaScript 条件数组重构

javascript - React 组件应该写成纯函数

javascript - 编写 ECMAScript5 兼容代码

javascript - 警告点击按钮的内部 HTML

javascript - 我如何理解返回函数的函数?

javascript - 在 dojotoolkit 中拖放