Array.prototype[2] = "hoge";としたらどうなるか
var a = [1,2,,4]; console.log(2 in a); // false Array.prototype[2] = "hoge"; console.log(2 in a); // true for(var i = 0;i < a.length;i++) console.log(a[i]); // [1,2,"hoge",4] a.forEach(console.log); // [1,2,"hoge",4] for(var [key,value] in Iterator(a)) console.log(key,value); // 0 1 // 1 2 // 3 4 var b = [1,2,3,4]; for(var i = 0;i < b.length;i++) console.log(b[i]); // 1,2,3,4
どうするか。
var a = [1,2,,4]; Array.prototype[2] = "hoge"; for(var i = 0;i < a.length;i++)if(a.hasOwnProperty(i)) console.log(i);
とか、
var a = [1,2,,4]; console.log(2 in a); // false Array.prototype[2] = "hoge"; for(var i = 0;i < a.length;i++){ if(!a.hasOwnProperty(i)) a[i] = undefined; console.log(a[i]); }
とか。
forEachがprototypeを辿ってるとは意外だった。