我有一个对象,当Developer Tools Console检查时看起来像这样:
console.log("clicked: ", clickedMarker);
如何获取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解决方案运行正常。
答案 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
是否有效找到(因此未定义,或一般不会出现错误)。