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()上工作代码>感谢您的回复,这是否意味着我们不能再修改数组文字([]
)了?