Javascript 在现代浏览器中覆盖全局变量

Javascript 在现代浏览器中覆盖全局变量,javascript,json,security,Javascript,Json,Security,我刚刚读了关于在浏览器中覆盖全局变量(例如数组)的文章,但当我在浏览器中尝试该示例时,什么都没有发生 代码如下: var sec = {}; function Array() { alert(1); sec = this; }; 当我在浏览器的控制台中运行[“zdxc”,“sd”,1111,11.1]时,什么都没有发生。已声明数组,但未显示警报 这是一个在现代浏览器中已修复的bug,还是在某些版本的浏览器中仍然有效?这是因为您重写了数组构造函数,从而调用了new Arr

我刚刚读了关于在浏览器中覆盖全局变量(例如数组)的文章,但当我在浏览器中尝试该示例时,什么都没有发生

代码如下:

var sec = {};
function Array() { 
    alert(1); 
    sec = this; 
}; 
当我在浏览器的控制台中运行
[“zdxc”,“sd”,1111,11.1]
时,什么都没有发生。已声明数组,但未显示警报


这是一个在现代浏览器中已修复的bug,还是在某些版本的浏览器中仍然有效?

这是因为您重写了数组构造函数,从而调用了
new Array()返回自定义对象,而不是实际的
数组

这么叫

var arr = ["zdxc", "sd", 1111, 11.1];
使
arr
成为本机
数组

召唤

var arr_override = new Array();
使
arr\u override
成为您之前声明的类型的
对象
,从而执行
警报
-语句。重写构造函数会“擦除”标识符中的数组初始化,并用构造函数函数替换它。它不是实际的
数组

根据数组,自2008年以来,所有浏览器中的文字(
[]
)都没有受到这种行为的影响

编辑:

在尝试了一点之后,似乎不可能修改
[]
-符号的行为,顺便说一句,也不建议修改本机对象(尤其是它们的构造函数)

扩展原型和修改现有属性/方法的可能性有多大,如下面的示例所示

var arr = [];
arr.push('2323');
alert(arr);

Array.prototype.push = function() { alert('trololololo'); }
arr.push(123);

希望这有帮助。干杯

它只在
var a=new Array()上工作感谢您的回复,这是否意味着我们不能再修改数组文字(
[]
)了?