Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象与映射-如何处理特殊键?_Javascript_Node.js_Object_Map - Fatal编程技术网

JavaScript对象与映射-如何处理特殊键?

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

在Java中,我发现直接获取字符串并将其用作
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
怪癖:-)我发布了一个问题报告,以及。