Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止javascript原型设计以终止for循环_Javascript_Prototypejs - Fatal编程技术网

停止javascript原型设计以终止for循环

停止javascript原型设计以终止for循环,javascript,prototypejs,Javascript,Prototypejs,与我共事的一些人在他们的网站上加入了一些我编写和托管的javascript。但其中一些网站使用prototype.js或其他框架,这导致了一些大问题 例如: var test = {"one":[{"a":"b"}]}; for (var i in test.one) { console.log(i); } 此操作的预期结果是控制台中的“0”(i是该数组的键) 但是如果我去prototypejs.org这样的网站,在firebug的控制台中运行相同的代码,我会得到一个所有原型垃圾的列表(每个,

与我共事的一些人在他们的网站上加入了一些我编写和托管的javascript。但其中一些网站使用prototype.js或其他框架,这导致了一些大问题

例如:

var test = {"one":[{"a":"b"}]};
for (var i in test.one) { console.log(i); }
此操作的预期结果是控制台中的“0”(i是该数组的键)

但是如果我去prototypejs.org这样的网站,在firebug的控制台中运行相同的代码,我会得到一个所有原型垃圾的列表(每个,每个,等等)

尝试在stackoverflow上的控制台中运行它,它会按预期返回“0”


我如何防止这种情况?有什么好的解决方法吗?

测试您枚举的每个属性是否不在原型中

for (var i in test.one) { 
   if (test.one.hasOwnProperty(i)) {
      console.log(i); 
   }
}
或者不枚举数组

for (var i = 0, ii = test.one.length; i < ii; i++) {
     console.log(i);
}
for(变量i=0,ii=test.one.length;i

任何扩展对象.原型的代码都不是你的问题。您不必对此加以防范。

或者测试您枚举的每个属性是否不在原型中

for (var i in test.one) { 
   if (test.one.hasOwnProperty(i)) {
      console.log(i); 
   }
}
或者不枚举数组

for (var i = 0, ii = test.one.length; i < ii; i++) {
     console.log(i);
}
for(变量i=0,ii=test.one.length;i

任何扩展对象.原型的代码都不是你的问题。您不必对此加以防范。

您可以通过不在每次迭代中检查hasOwnProperty而不使用for-in循环来学会与其他人友好合作,或者您可以在开始时分解他们的所有代码:

for(var p in Array.prototype)delete Array.prototype[p];
它只会破坏非本机属性


对对象和其他任何您希望中性化的对象也执行相同的操作。

您可以通过不在每次迭代中检查hasOwnProperty而不使用for-in循环来学会与其他人很好地协作,或者您可以在开始时分解他们的所有代码:

for(var p in Array.prototype)delete Array.prototype[p];
它只会破坏非本机属性


对对象和任何其他需要绝育的对象执行相同的操作。

Prototype.js stuffs
Array.Prototype
以及其他方法

下面是
prototype.js
的摘录:

  Object.extend(arrayProto, {
    _each:     _each,
    clear:     clear,
    first:     first,
    last:      last,
    compact:   compact,
    flatten:   flatten,
    without:   without,
    reverse:   reverse,
    uniq:      uniq,
    intersect: intersect,
    clone:     clone,
    toArray:   clone,
    size:      size,
    inspect:   inspect
  });
您可以在
循环中的..的第一个
输出中找到所有这些属性


可以通过不使用
for..in
迭代数组,而是使用
var i;对于(i=0;i
Prototype.js stuff
Array.Prototype
,使用其他方法

下面是
prototype.js
的摘录:

  Object.extend(arrayProto, {
    _each:     _each,
    clear:     clear,
    first:     first,
    last:      last,
    compact:   compact,
    flatten:   flatten,
    without:   without,
    reverse:   reverse,
    uniq:      uniq,
    intersect: intersect,
    clone:     clone,
    toArray:   clone,
    size:      size,
    inspect:   inspect
  });
您可以在
循环中的..的第一个
输出中找到所有这些属性


可以通过不使用
for..in
迭代数组,而是使用
var i;对于(i=0;i

可能重复的您必须使用
对于(i=0;i
中的
是不安全的,因为这一点。对于重复,我发誓我首先进行了广泛的搜索:)可能重复的您必须使用
对于(i=0;i
,因为这个原因,
中的
是不安全的。很抱歉被愚弄了,我发誓我首先搜索了:)+1来清理原型!教他们正确地腐蚀本机原型。+1用于清理原型!教他们正确地腐蚀原生原型。谢谢!我想我必须使用hasOwnProperty()而不是(I…I++),因为我处理的是字符串键(又名对象属性,又名关联数组键),其中没有这样的属性“length”。谢谢!我想我必须使用hasOwnProperty()而不是for(I…I++),因为我处理的是字符串键(又名对象属性,又名关联数组键),其中没有这样的属性“length”。