ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript forEach ユニバーサル ループ トラバーサル メソッド_JavaScript スキル

JavaScript forEach ユニバーサル ループ トラバーサル メソッド_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:18:48954ブラウズ
コードをコピー コードは次のとおりです。

var forEach = (function(){
/ /Array および擬似配列トラバーサル
var _Array_forEach = function (array, block, context) {
if (array == null) return;
//String の特別な処理
if(typeof array = = 'string'){
array = array.split('');
}
var i = 0,length = array.length;
for (;i }//オブジェクトの走査
var _Function_forEach = function (object, block, context ) {
for (var key in object) {
//ローカル プロパティのみをスキャンします
if (object.hasOwnProperty(key)&&block.call(context, object[key], key, object)= = =false){
break;
}
}
};
return function(object, block, context){
if (object == null) return; > if (typeof object.length == "number") {
_Array_forEach(object, block, context);
}else{
_Function_forEach(object, block, context);
};
})()


関数自体は複雑ではありませんが、非常に繊細です。簡単なコメントを追加しましたが、皆様にご理解いただけると幸いです。
いくつかの例を見てみましょう



コードをコピーします コードは次のとおりです: / /1:1 n 2:2
forEach([1,2,3,4,5],function(el,index){
if(index>2){
return false;
}
alert(index ":" el);
function print(el,index){
alert(index ":" el); //a: a n b:b n c:c
forEach({a:'a',b:'b',c:'c'},print); //1: 愚かな n 2: 卵 n 3: n 4: 席 n 5: 右 n 6: 碑文
forEach("バカの座右の銘",print);
function person(name, age) {
this.name = name || ;
this.age = 年齢
};
var fred = new person("jxl", 22); = " chinese";//非常に遅いバインディング
//name:jxl n age:22 n language:chinese
forEach(fred,print);


注: コールバック内関数 インデックス パラメーターの添字は 1 から始まります。
組み込みの forEach を使用しないのはなぜですか
getElementsByClassName と同様、組み込みの forEach は非常に効率的ですが、機能に制限があります。ループの途中で終了することはできません。 。 forEach では、処理関数内で false を返すことでループを終了でき、より柔軟です。
特殊な長さ属性
長さ属性は非常に特殊な属性です。配列を見ると、長さ属性を持つオブジェクトについて考えることになるでしょう。そうすると、誰もが疑似配列(配列のようなもの)を考える必要があります。では、擬似配列とは何でしょうか?簡単に理解すると、Array.prototype.slice を通じて実配列の長さ属性を持つオブジェクトに変換できるということです。 JavaScript で最も有名な疑似配列は、arguments オブジェクトです。疑似配列についてはたくさんのことがあり、これについては将来ブログ記事を書くつもりです。誰もが覚えておく必要があるのは、オブジェクトを疑似配列として使用することが明確にわかっている場合を除き、オブジェクトに長さ属性をむやみに割り当てないことです。
この関数は、単純な JavaScript ツール ライブラリに必要な関数だと思います。これをベースに、再カプセル化することでライブラリをより強力で美しくすることができます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。