我有一个从第 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/