停止javascript原型设计以终止for循环
与我共事的一些人在他们的网站上加入了一些我编写和托管的javascript。但其中一些网站使用prototype.js或其他框架,这导致了一些大问题 例如:停止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的控制台中运行相同的代码,我会得到一个所有原型垃圾的列表(每个,
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 stuffArray.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”。