从Object Symbol获取变量

时间:2017-11-14 12:05:59

标签: javascript typescript

我有一个对象,当Developer Tools Console检查时看起来像这样:

console.log("clicked: ", clickedMarker);

enter image description here

如何获取address内容形式Symbol(vars)

console.log("vars: ", clickedMarker["Symbol(vars)"]);
console.log("address: ", clickedMarker.address);
console.log("address2: ", clickedMarker["address"]);
console.log("vars2: ", clickedMarker["vars"]);
console.log("vars3: ", clickedMarker.vars);
console.log("Symbol(vars): ", clickedMarker._objectInstance["Symbol(vars)"]);

但这一切都出来undefined

编辑:这是一个Typescript应用程序,但Javascript解决方案运行正常。

1 个答案:

答案 0 :(得分:3)

问题很可能是您正在寻找字符串键而不是符号

要详细了解符号是什么(无论如何都是javascript中的原语),请查看:https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Symbol

要解决此问题,请使用舒适的 toString 原型找到正确的符号,并使用通用对象的getOwnPropertySymbols方法:

// look for the symbol having key "vars" in the object's symbols list.
var mFound = Object.getOwnPropertySymbols(clickedMarker._objectInstance)
                   .find(e => e.toString() === "Symbol(vars)");
// Use the above symbol as the object's key.
var address = clickedMarker._objectInstance[mFound].address;

请记住,为了进一步安全起见,您应该检查mFound是否有效找到(因此未定义,或一般不会出现错误)。