素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

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を辿ってるとは意外だった。