@ user1689607的评论似乎是我的答案。当您选择no lib (pure JS)
时,您的代码不会记录任何undefined
值。事情是:libs经常摆弄本地类型的原型。最臭名昭着的图解是prototype.js
(线索在名称中)。 “魔术属性”的一个常规的,未改变的Array
对象,例如不是可枚举的(即:不显示在数组的一个for...in
循环中)。然而,当你开始添加自己的属性和方法时,他们可能会将会出现。由于Array
源自Object
原型,所以对该原型的任何更改也可能显示出来。
长期和短期的是:从未,曾经阵列上使用for...in
。如果你使用for...in
(在对象上),经常检查,如果一切财产你直接设定对象处理,而不是从原型来:
for (var prop in someObject)
{
if (someObject.hasOwnProperty(prop))
{
//do stuff
}
}
至于阵列而言: for(var i=0;i<theArray.length;i++)
应该帮助你避开大多数问题(记住,阵列,JS是稀疏的):
var normalArray = [1,2];
var sparseArray = [1,2,3,4];
delete sparseArray[2];//will log [1,2,undefined,4]
for (var i=0;i<sparseArray.length;i++)
{
if (i < normalArray.length)
{
console.log(normalArray[i]);
}
console.log(sparseArray[i]);//will log 1 - 2 - undefined - 4
if (sparseArray.hasOwnProperty(i))
{
console.log(sparseArray[i]);//logs 1 - 2 - 4
}
}
我测试了一下,它的工作完美 – Welling
是,工作原理:http://jsfiddle.net/8ejhR/1/ – lrsjng
您有MooTools加载和其他人显示,您不正确迭代阵列。当你使用jsFiddle时,最好先在左边设置正确的设置,比如从菜单中选择'No-Library(纯JS)'。 –