配列のようなオブジェクト

これは何ですか
JavaScriptにはArray-like Objectのようなエンティティがあることを知っている人はほとんどいません。

つまり、document.images、document.getElementsByTageName、関数呼び出しのコンテキスト内の引数などが存在することを誰もが知っています。

しかし、誰もがこのエンティティの使用方法を知っているわけではありません。たとえば、そのようなエンティティを(コピーを介して)本格的なアレイに持ち込むことができ、すべての可能性があります。

通常、配列のようなオブジェクトは、コンストラクタの形式で「オブジェクト」と、プロトタイプから継承された長さを区別します(どこから来たのかは明確ではありません-私にとってこれは謎のままです)。

具体的には
 //変換を伴うコピー関数
 var cloneAsArray = function(arrayLikeObject){
     var isArrayLikeObject =(
         typeof arrayLikeObject === 'オブジェクト' &&
         typeof arrayLikeObject.length === 'number'
     );
    
     if(isArrayLikeObject){
         Array.prototype.slice.call(arrayLikeObject)を返します
     }
 };

 //使用例
 var testFuction = function(){
     //配列を持つ最初の引数を除いて、内部関数に渡されるすべての引数を取得する必要があります
     var _args = cloneAsArray(arguments).slice(1);
    
     return _args;
 }

 console.log(testFuction(7,1,2,3,4)) 

短所:
はい、これはオブジェクトのコピーであり、もちろんメモリ消費に影響します。

長所:
Array-Like Objectに対して何らかの変換が必要な場合、この方法で大きなループを回避できます。
CPUの節約の種類

要約:
思慮深く適用:)

Source: https://habr.com/ru/post/J44601/


All Articles