新しい配列を宣言する必要がある場合は、この表記を使用します
var arr = new Array();
しかし、たとえばjsbinでオンラインでテストすると、「配列リテラル表記[]を使用してください」という警告が表示されます。
コンストラクターの使用を避ける理由が見つかりませんでした。使用するよりも何らかの方法で効率が低下し[]
ますか?それとも悪い習慣ですか?
var arr = [];
代わりに使用する正当な理由はありvar arr = new Array();
ますか?
新しい配列を宣言する必要がある場合は、この表記を使用します
var arr = new Array();
しかし、たとえばjsbinでオンラインでテストすると、「配列リテラル表記[]を使用してください」という警告が表示されます。
コンストラクターの使用を避ける理由が見つかりませんでした。使用するよりも何らかの方法で効率が低下し[]
ますか?それとも悪い習慣ですか?
var arr = [];
代わりに使用する正当な理由はありvar arr = new Array();
ますか?
ほとんどの場合、ダグラス・クロックフォードがそう言っているのでvar a = []
、人々は使用します。
彼の理由には、次のような直感的で一貫性のない動作が含まれますnew Array()
。
var a = new Array(5); // an array pre-sized to 5 elements long
var b = new Array(5, 10); // an array with two elements in it
事前に指定された数値要素が1つnew Array()
だけある配列を作成する方法はないことに注意してください。
実際に使用する[]
方が効率的で安全です。コンストラクターを上書きしArray
て奇妙なことをさせることは可能ですが、の動作を上書きすることはできません[]
。
個人的には、私は常に[]
構文を使用し、同様に常に。{}
の代わりに構文を使用しますnew Object()
。
重要な違いの1つは、[]
常に新しい配列をインスタンス化するのに対し、ハイジャックされて別のオブジェクトを作成するnew Array
可能性があることです。
(function () {
"use strict";
var foo,
bar;
//don't do this, it's a bad idea
function Array() {
alert('foo');
}
foo = new Array();
bar = [];
}());
私のサンプルコードでは、Array
関数をドキュメントスコープの残りの部分から隠しておきましたが、この種の問題が発生した場合、コードが適切なクロージャに残されていない可能性が高くなります。見つけるのは難しいでしょう。
免責事項Array
:コンストラクターを乗っ取るのは良い考えではありません。
[]
ほとんどの開発者が使用するため、配列リテラルはより予測可能です。そこにあるほとんどの配列の使用法はリテラルを使用することであり、コードを他の開発者が使用するものと一致させることには価値があります。
[]
var ns = [];
var names = [ 'john', 'brian' ];
ここに示すように、空のリテラルといくつかの既知の要素を使用することは、配列コンストラクターよりも太くなります。
new Array(size)
サイズがわかっている場合は、配列コンストラクターを使用するとパフォーマンスが大幅に向上します。ただし、すべての値を埋める「未定義」の配列を処理する必要があることも意味します。
ここに示すように
// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i < 100; i++ ) {
ns[i] = i;
}
これは、非常に小さなアレイでも機能します。
いいえ、実際には、空の配列に対して一方の表記をもう一方の表記よりも使用する理由はありません。
ただし、ほとんどのブラウザは、コンストラクタx = [];
を呼び出すよりも使用するとわずかに優れたパフォーマンスを示します。
特定のサイズのアレイを作成する必要がある場合は、たとえば、10スロットのアレイを作成するために使用する必要があります。x = new Array(10);
undefined
コンストラクターを呼び出す必要がないため、配列またはオブジェクトを定義する最も高速な方法は文字通りの方法です。
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];
alert(arr1[0]); // 1
alert(arr2[0]); // 1
var arr3 = new Array(200);
var arr4 = [200];
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200
どちらも正しいだけです。しかし、ほとんどの人はvar a = []
JavaScriptで配列を宣言する3つの方法。
方法1:JavaScriptの「new」キーワードを使用して配列を明示的に宣言し、メモリ内の配列をインスタンス化できます(つまり、配列を作成して使用可能にします)。
// Declare an array (using the array constructor)
var arlene1 = new Array();
var arlene2 = new Array("First element", "Second", "Last");
方法2:配列を宣言するための代替方法を使用します。
// Declare an array (using literal notation)
var arlene1 = [];
var arlene2 = ["First element", "Second", "Last"];
メソッド3:JavaScriptでは、特定のメソッドを呼び出すことにより、間接的に配列を作成することもできます。
// Create an array from a method's return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");
var array = [ 1, 2, 3, 4];
砂糖です
var array = new Array(1, 2, 3, 4);
塩です
コンストラクターが引数として取ることができる制限があります。
ほとんどのシステムでは、制限は2 ^ 16(2バイト)です。
var myFreshArr = new Array(0,1,2,3 ..... 65536);
エラーが発生します(引数が多すぎます...)
リテラル[]を使用する場合、そのような問題はありません。
このような大きな配列を気にしない場合は、好きなものを使用できると思います。
new Array()
あいまいだからです。正しいコンストラクターは次のとおりです。
// Using brackets
[element0, element1, ..., elementN]
// Using new AND a list of elements
new Array(element0, element1, ..., elementN)
// Using new AND an integer specifying the array length
new Array(arrayLength)