关于 js的 __proto__

JSON.parse('{"__proto__":{"a":1}}')

{__proto__:{a:1}}

第一句 != 第二句

JSON.parse('{"__proto__":{"a":1}}').a == undefined

{__proto__:{a:1}}.a == 1

这是为什么,JSON.parse 做了什么操作,谢谢!

阅读 2.1k
3 个回答

参考楼上的标准,根据24.3.1.1 推测出来

var b = {}
Object.defineProperty(b, '__proto__', {
    get: function(){return {a:1}}
})

这就是你想要的

具体JSON.parse在底层做了什么可以看标准
https://www.ecma-internationa...
另外1703的edge不知道有什么奇怪的缓存机制,一会打印不出来,一会能打印出来
图片描述

图片描述

分别log了 JSON.parse('{"__proto__":{"a":1}}') 和 {__proto__:{a:1}} ,结果如上,看上去 JSON.parse 会忽略 ‘__proto__’ 属性;

然后试了 ‘_proto__’ ‘__proto_’ 都能成功 log 出来,不明所以

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题