JavaScript は魔法の言語であり、その配列も同様にユニークです。余分なものを取り除き、本質を抽出し、一般的に使用されるベスト プラクティスをまとめます。間違いがあればご指摘ください。
JavaScript 配列は、オブジェクトの特性を持つ配列のようなオブジェクトです。プロパティ名が小さい連続した整数の場合は、配列を使用する必要があります。それ以外の場合は、オブジェクトを使用する必要があります。
配列ソース
すべての配列は Array から構築されます。コンストラクター プロパティをテストしてみましょう。
var arr = []; arr.constructor === Array; // true arr.constructor === Array.prototype.constructor; // true
配列の作成
//数组字面量方式 var arr1 = [1, 2, 3]; // [1,2,3] //构造函数方式 var arr2 = new Array(); // [] 空数组 var arr3 = new Array('9'); // ["9"] 一个字符串元素 var arr4 = new Array(9); // [] 数组长度length为9 var arr5 = new Array([9]); // [[9]] 相当于二维数组 var arr6 = new Array(1, 2, 3); // [1, 2, 3] var arr7 = new Array(1, function f(){}, {o : 6}, null,undefined,true); // 数组可以存储任意混合数据类型
arr4 の動作方法により、数値パラメーターが 1 つだけ Array コンストラクターに渡されると、コンストラクターは長さ属性が設定された空の配列を返します。したがって、短くて簡潔な配列リテラル方式を使用することをお勧めします。
オブジェクトが配列であるかどうかを検出します
var arr1 = [1, 2, 3]; typeof(arr1); // object
typeof が型を正しく検出しないことはよく知られています。
arr1 instanceof Array; //true
Web ページ内では、instanceof メソッドは問題ありませんが、他の Web ページをネストすると、グローバル スコープが 2 つになり、相互に呼び出す際の検出に問題が発生します。
Array.isArray(arr1); // true
Array.isArray() は ECMAScript5 の新しいメソッドであり、欠陥はありません。唯一の問題は、IE8 ブラウザーがこれをサポートしておらず、IE9 ブラウザーが厳密モードでサポートしていないことです。
Object.prototype.toString.apply(arr1).slice(8, -1); // Array
最後の方法は、タイプを検出する最良の方法です。
配列の長さ
配列の長さもその属性です。長さを増やしても範囲外エラーは発生しません。
長さの値は、配列の最大の整数の属性名に 1 を加えたものと等しくなります。
var arr1 = []; arr1[9] = 1; // 长度为10,只包含一个元素的数组
名前が長さ以上の属性を削除するには、小さな値を設定します。
長さの値が 0 に設定されている場合、それは配列をクリアすることと同じです。
var arr2 = [1, 2, 3, 4, 5]; arr2.length = 3; // [1, 2, 3] arr2.length = 0; // []
配列トラバーサル
配列を走査する場合、配列を走査するために for in ループを使用しないでください。for in はプロトタイプ チェーン上のすべてのプロパティを走査しますが、それほど多くのプロパティは必要ありません。 for ループを使用することをお勧めします。
var arr1 = [1, 2, 3]; arr1.test = 9; //for in 方式 for(var prop in arr1){ cosole.log(prop, arr1[prop]); } // 输出如下 // 0 1 // 1 2 // 2 3 // test 9 //for循环方式 for(var i = 0, len = arr1.length; i < len; i++){ console.log(arr1[i]); } //输出如下 // 1 // 2 // 3
for in メソッドには余分なテスト値があり、hasOwnProperty 関数を使用して削除できることがわかりますが、これは for ループ メソッドよりもはるかに遅くなります。
配列の長さのキャッシュは必要な手順であり、アクセスごとにパフォーマンスのオーバーヘッドが発生します (最新のブラウザーはこの側面を最適化しています)。
概要
配列の基本知識を簡単に紹介します。この時点で、配列をより包括的に理解できます。次の記事では Array メソッドを紹介します。
JavaScript は理解するのが容易ではない側面がたくさんありますが、長い期間の学習を通じて、私は徐々に Javascript に夢中になってきました (今は愛する女の子がいないため)。