新しい配列を宣言する必要があるときは、この表記を使用します
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()。
[]は、が内部コンストラクターを呼び出すのではなくArray.constructor、その時点で発生している値ではないことが仕様に記載されています。
Arrayコンストラクターを使用して新しい配列を作成するよりもはるかに高速です。jsperf.com
大きな違いの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' ];
ここに示すように、空のリテラルといくつかの既知の要素を使用することは、Arrayコンストラクターよりも困難です。
new Array(size)サイズがわかっている場合、Arrayコンストラクターを使用するとパフォーマンスが大幅に向上します。ただし、値がすべて「未定義」で満たされた配列を処理する必要があることも意味します。
ここに示すように
// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i < 100; i++ ) {
ns[i] = i;
}
いいえ、実際には、空の配列に対して他の表記よりも1つの表記を使用する理由はありません。
ただし、ほとんどのブラウザーx = [];は、コンストラクターを呼び出すよりも若干パフォーマンスが優れています。
特定のサイズの配列を作成する必要がある場合はx = new Array(10);、たとえば、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 arr = [];論理的にコンストラクタも使用しています。これは、現在名前で使用されている関数ではなく、常に組み込みの配列コンストラクターArrayです。
どちらも正しいだけです。しかし、ほとんどの人は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("-");
コンストラクターが引数として取ることができる制限があります。
ほとんどのシステムでは、制限は2 ^ 16(2バイト)でした。
var myFreshArr = new Array(0,1,2,3 ..... 65536);
エラーが発生します(引数が多すぎます...)。
リテラル[]を使用する場合、そのような問題はありません。
このような大きな配列を気にしない場合は、好きなように使用できると思います。