0

我正在解决网站上我的 WP 插件中的 JS 冲突。当我使用创建一个空数组时

var myArray = [];

或者

var myArray = new Array();

console.log(myArray);

[randomize: function]

代替

[]

数组的长度保持为 0。可以在这里看到随机化函数的位置:http: //postimage.org/image/j67yqby5t/在 chrome 中,我单击了“显示函数定义”,它是由一个名为 LayerSlider 的 WP 插件添加的。

    Array.prototype.randomize = function () {
    var e = this.length,
        t, n, r;
    if (e == 0) return false;
    while (--e) {
        t = Math.floor(Math.random() * (e + 1));
        n = this[e];
        r = this[t];
        this[e] = r;
        this[t] = n
    }
    return this
};

我应该怎么做(也许是暂时的)将其恢复为正常的空数组?或者只是从数组中删除所有非本地元素?

顺便说一句,当我迭代它时出现了问题

for(var i in myArray ){ ... }

并将函数视为额外元素。当时我已经添加了数字索引元素。

4

2 回答 2

3

第一条规则是,如果您只想遍历数组的数字属性(即索引),请使用带有计数器的 for、do 或 while 循环。

如果您使用 for..in,那么您应该包含一个hasOwnProperty测试以避免迭代通过[[Prototype]]链继承的命名属性。

for (var p in obj) {
  if (obj.hasOwnProperty(p)) {
    // p isn't inherited, do stuff with obj[p]
  }
}

最后,您可能可以使用delete运算符从 Array.prototype 中删除该方法,但您加载的库可能正在使用它。

于 2013-03-21T00:53:22.567 回答
0

如果 wordpress 插件覆盖了原生的 javascript 数组,你什么也做不了。他们可以通过将函数绑定到数组的原型来做到这一点:

Array.prototype.randomise = function(){
    //some code...
};

如果它是索引数组,您可以制作 for(var i=0.. 循环,如果它是 hashmap,您可以使用 typeof 询问 item 是否是函数:

for(var val in arr){
    if(typeof(arr[val]) != 'function'){
        //do something
    }
}
于 2013-03-21T00:54:04.810 回答