javascript学習記録-行列(3)2014/02/21

1172 ワード

前回に続き,データが巡回した.
*for/inを使ったデータの遍歴は推奨されません.引き継ぎの属性に列挙されます.
実験してみます
Array.prototype.test = function(){

    console.log('I`m Function');

}

var a = new Array(1, 2, 3);

a[-1] = 4;

for (var index in a) {

    console.log(a[index]);

}
システム出力:
1
2
3
function(){consolie.logn('I`m Function];
本当にいけないですね.
手動コード検出
for (var i in a) {

    if(!a.hasOwnProperty(i)) continue;

    console.log(a[i]);

}
今回の出力は:
1
2
3
もう一つのポイントは、インデックスがマイナスの場合もフィルタリングされます.例えば、
a[-1] = 4

for (var i in a) { if(!a.hasOwnProperty(i)) continue; console.log(a[i]); }
出力は
1
2
3
4
フィルタをもう一つ入れます.
for (var i in a) { 

    if(!a.hasOwnProperty(i)) continue; 

    if(String(Math.floor(Math.abs(Number(i)))) !== i) continue; 

console.log(a[i]); 

}
今回の出力にはインデックスが含まれていません.-1の場合です.
最後の言葉、データ遍歴はfor/inを使わないほうがいいです.
ECMAScript 5で定義された新しいエルゴード配列方法forEach
暦をあげる
var data = [1, 2, 3, 4, 5];

var sumOfSquares =0;

data.forEach(function(x){    //       

    sumOfSquares += x * x;

});

sumOfSquares;    //55