JavaScript对象与映射-如何处理特殊键?
在Java中,我发现直接获取字符串并将其用作JavaScript对象与映射-如何处理特殊键?,javascript,node.js,object,map,Javascript,Node.js,Object,Map,在Java中,我发现直接获取字符串并将其用作LinkedHashMap中的键。我甚至可以将它翻译成JSON并返回,没有任何问题 我现在正在使用Node.JS/JavaScript,有一个特殊情况没有处理 var makesSense = '{"__proto__":"foo","toString":"bar"}' var noSense = JSON.stringify(JSON.parse('{"__proto__":"foo","toString":"bar"}')) console.log
LinkedHashMap
中的键。我甚至可以将它翻译成JSON并返回,没有任何问题
我现在正在使用Node.JS/JavaScript,有一个特殊情况没有处理
var makesSense = '{"__proto__":"foo","toString":"bar"}'
var noSense = JSON.stringify(JSON.parse('{"__proto__":"foo","toString":"bar"}'))
console.log(noSense) // outputs {"toString":"bar"}
处理\uuuu proto\uuuu
和其他类似内容的推荐方法是什么。似乎toString
并没有造成任何问题,但假设我需要一致地处理不受信任的数据。推荐的解决方案是什么
- 在每一个关键点前加一个字符?如果是的话,哪个角色最有意义?我知道它不能是下划线,那么空格呢
- 使用一个模块来为我处理这个问题?我希望有一个将处理这个方便,没有过多的功能。(不过有些功能还是不错的)
- 还有别的吗?是否有与
JSON.parse兼容的解决方案
\uuuuuuuuuuuuuuuuu
。但如果他们是故意这么做的呢。他们知道我在使用JavaScript,那又怎样除以下情况外,无任何问题:
- 软件有一个字符串数组。碰巧这些字符串中有一个说
,因为有人试图破坏我的软件\uuuuu proto\uuuu
- 软件使用这些字符串作为键创建一个映射,并用一些漂亮的数据填充映射
- 软件随后会遍历字符串数组,并从地图中收集信息。映射返回null,然后boom:null指针异常
- 软件现在不工作了。这有点像拒绝服务
我使用
x
,但它是任意的。只要你使用一些不太可能形成特殊属性名称的东西,比如(在某些引擎上)\uu proto\uu
,或者toString
,或者valueOf
(我不知道有任何以x
开头的特殊属性名称),你就没事了。你试图解决的实际问题是什么?在我看来,在现实世界中,您不太可能使用诸如\uuuu proto\uuu
和toString
之类的键获取JSON。顺便说一句,上面的代码片段在Opera中有正确的输出。@T.J.Crowder,请参阅我的编辑。您可以尝试修补Node.js安装,只需禁用\uuu proto\uu
怪癖:-)我发布了一个问题报告,以及。