Javascript 对象中的符号';s属性

Javascript 对象中的符号';s属性,javascript,arrays,object,Javascript,Arrays,Object,我正在编写一个JS脚本,它的一些属性中有一个带有&’s的对象,例如 var topicObj={ “客户端和外围设备”:[“USB”、“打印机”、“复制/粘贴”], “安装和升级”:[“租户升级”、“代理升级”] } 问题是,当我尝试迭代它的一个值时,例如 selMTopic=“客户端和外围设备” 对于(t在topicObj[selMTopic]){ addTopic(topicsDD,topicObj[selMTopic][t]); } 它失败了,它无法计算t,我想它不喜欢在属性中有&’s

我正在编写一个JS脚本,它的一些属性中有一个带有&’s的对象,例如

var topicObj={
“客户端和外围设备”:[“USB”、“打印机”、“复制/粘贴”],
“安装和升级”:[“租户升级”、“代理升级”]
}
问题是,当我尝试迭代它的一个值时,例如

selMTopic=“客户端和外围设备”
对于(t在topicObj[selMTopic]){
addTopic(topicsDD,topicObj[selMTopic][t]);
}
它失败了,它无法计算t,我想它不喜欢在属性中有&’s和类似的字符

我一直在试图找到如何在没有运气的情况下在属性中拥有和使用&;我尝试过用encodeURIComponent对字符串进行编码,但也没有成功

如果可能的话,你知道我该怎么做吗?我需要那些&’在那里。我认为它使用两个数组而不是对象,一个是对象的属性,另一个是每个对象的值数组;但是我真的更愿意坚持使用对象,因为我将来可能需要添加更多的“深度级别”。

使用(用于数组)而不是中的(用于属性)

var topicObj=
{“客户端和外围设备”:[“USB”、“打印机”、“复制/粘贴”]
,“安装和升级”:[“租户升级”,“代理升级”]
}
用于(让selMTopic在topicObj中)
{
对于(topicObj[selMTopic]的let t)
{
console.log(selMTopic,'->',t)
//addTopic(topicsDD,t);
}

}
避免阵列中的。尝试使用
forEach
。在对象的键中使用
&
没有问题。如果不知道添加主题是什么,就无法重现该问题。您是否以这样的方式为
selMTopic
获取字符串,即对与进行编码?正如Mark Meyer所说,..in不会由于对象属性名称中的任何特殊字符而失败。您在代码中犯了一些导致此问题的其他错误。问题与属性名称中的字符无关。谢谢,@MarkMeyer和@ChrisRollings!这似乎与编码或其他方面有关,因为如果我使用Jojo先生的示例,但将一个值赋给selMTopic,
selMTopic=“HCS-Client&Peripherals”
工作正常,控制台得到了预期的结果,但
selMTopic=document.getElementById(“MainTBtn”).innerHTML返回“DropTest MultiDD.htm:239未捕获类型错误:topicObj[selMTopic]在resetTopics(DropTest MultiDD.htm:239)”中不可执行(Chr)或“未捕获类型错误:topicObj[selMTopic]未定义,resetTopics”file:///.../DropTest MultiDD.htm:239“(FF)我有
charset=“UTF-8“
在我的
谢谢!:)我猜这与编码有关,或者像上面提到的@Mark和@Chris一样,因为如果我在脚本中使用您的代码并运行
selMTopic=“Client&Peripherals”;对于(t of topicObj[selMTopic]){console.log(selMTopic,'->',t);}
我得到,客户机和外围设备->USB客户机和外围设备->打印机…但是如果我像我的代码一样运行,
selMTopic=document.getElementById(“MainTBtn”).innerHTML;对于(t of topicObj[selMTopic]){console.log(selMTopic,'->',t);}
(document.getElementById(“MainTBtn”)是一个从下拉内容中选择的topicObj的属性之一,其内部HTML被分配了一个)我得到“DropTest MultiDD.htm:239未捕获的类型错误:topicObj[selMTopic]在resetTopics处不可重设(DropTest MultiDD.htm:239)”(Chrome)或“未捕获类型错误:topicObj[selMTopic]未定义file:///.../DropTest MultiDD.htm:239