Javascript 从对象符号获取变量
我有一个对象,当由开发人员工具控制台检查时,它如下所示:Javascript 从对象符号获取变量,javascript,typescript,Javascript,Typescript,我有一个对象,当由开发人员工具控制台检查时,它如下所示: console.log("clicked: ", clickedMarker); 如何获取地址内容表单符号(VAR) 但这一切都是未定义的 编辑:这是一个Typescript应用程序,但Javascript解决方案运行良好。问题可能是您正在寻找一个字符串键而不是符号 要了解符号是什么(无论如何,它是javascript中的原语),请检查以下内容: 要解决此问题,请使用舒适的toString原型找到正确的符号,并使用泛型对象的getOw
console.log("clicked: ", clickedMarker);
如何获取地址
内容表单符号(VAR)
但这一切都是未定义的
编辑:这是一个Typescript应用程序,但Javascript解决方案运行良好。问题可能是您正在寻找一个字符串键而不是符号 要了解符号是什么(无论如何,它是javascript中的原语),请检查以下内容: 要解决此问题,请使用舒适的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
(因此不是未定义的,或者通常不是错误的)。这些是符号,因此您需要正确地查找它们。如果您不知道符号是什么,请查看官方MDN:。也就是说,这里有一个针对您的案例的解决方案,您可以随意回顾或以您喜欢的方式实施它。简而言之,您不能按字符串搜索,您需要(最终)通过toString转换找到正确的符号;请把输出结果出来。@briosheje Yep,就是这样-它成功了!谢谢大家!@TadijaBagarić:为了清楚起见,我在下面添加了一个答案,请随意查看,不要记得安全地检查您的“Live”中是否未定义mFound防止意外异常的代码:)。关于未定义的警告-如果我显式设置该符号是否可能为假?@TadijaBagarić:如果不存在该符号的键,它将返回未定义。因此,您应该(始终)处理未定义的情况,不管它是否会发生。我个人不会特别在那个对象上强制使用符号,我只会处理找不到“vars”符号的情况。简而言之,我只需添加:if(mFound){//address stuff}
// 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;