我刚读过这篇文章:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
如果你在创建/ 时选择使用构造函数,我的印象是覆盖Object
或Array
只有效果,但是,根据那篇文章,它也对文字创建有影响(和)......arrays
objects
{}
[]
我的逻辑:
Array = function(){ alert('Hi'); }; [1,2,3,4,5]; ([1,2,3,4,5]); var a = [1,2,3,4,5]; // ... // ... Nothing is alerted
那么,我是疯了还是有一些我不知道的特定于实现的怪癖?
据我所知,这是ECMAScript规范的一个问题,并在一年多前在所有主流浏览器中得到修复.这是一个链接,链接到最相关的链接;)
但实际上回答你的问题,是的Object
,Array
构造函数也被用于文字创作.实现的修复浏览器只是使这些(和其他)不变,因此它们不能被自定义脚本覆盖.
EcmaScript 5草案标准化了Josef提到的这个修复.它根据11.1.4节中描述的创建上下文时Array全局值的值来指定数组构造函数的行为.
语义
生产
ArrayLiteral : [ Elisionopt ]
评估如下:
令数组是创建一个新对象的结果,就好像表达式
new Array()
whereArray
是具有该名称的标准内置构造函数一样.
而不是允许替换Array构造函数的旧ES 262行为:
语义
生产
ArrayLiteral : [ Elisionopt ]
评估如下:
像表达式一样创建一个新数组
new Array()
.
也就是说,不要依赖[]
老年口译员的合理工作.