17

どこかで読んだことを覚えています(Crockfordの論文の1つにあったと思います)。配列リテラルを使用する方が、表記[]を使用するよりも優れています。new Array();

しかし、私は一方が他方よりも優れていることを本当に思い出せません。

前者が後者よりも好まれる理由を誰かに説明してもらえますか?

これが私が考えることができる1つの理由です:なぜ[]より良いのかnew Array();

var Array = function () { };

オブジェクトをオーバーライドするArrayとコードが壊れます...!

他に理由はありますか?

4

4 に答える 4

36

簡潔

有線で転送するバイト数、解釈するバイト数、解析する精神的なリソースが少なくなります。

少ないほうがいいですね。

一貫性

これらの2行のコードの違いは何ですか?

var arr = [5];
var arr = new Array(5);

ここ によるnew Array(5);と、5が含まれる配列は返されません。代わりに、すべての要素がである5要素の配列が返されundefinedます。これらの2つの行は、同一の配列を返します。

var arr = [5,6];
var arr = new Array(5,6);
于 2009-11-25T23:14:21.600 に答える
24

理由の1つは、Arrayコンストラクターの動作が完全に直感的でないためです。例えば:

var a = new Array(5);
console.log(a.length); //prints "5"
console.log(a[0]); //prints "undefined"

var b = new Array(1,2);
console.log(b.length); //prints "2"
console.log(b[0]); //prints "1"

この場合、aはすべての要素が未定義のサイズ5の配列になり、bは値[1,2]のサイズ2の配列になります。

var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"

そして、ここでは、「5」を含む単一要素の配列になります。

一般に、 Javascriptの組み込み型でコンストラクターを使用することはおそらく絶対にしないでください。それらはすべて、このような奇妙なエッジケースを持っています。例えば:

var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"
于 2009-11-26T00:04:40.390 に答える
9

優雅

簡単に言えば、特により複雑なデータ構造の場合、見た目が良く、プログラマーが解析しやすくなります。

var a = [
    ['a list', 'of', 'strings'],
    [1, 2, 3, 4],
    { hello: "This is an object property." }
];

不器用なOOP指向の方法との比較:

var a = new Array();
var a2 = new Array();

a2.push('a list');
a2.push('of');
a2.push('strings');

var a3 = new Array();
a3.push(1);
a3.push(2);
a3.push(3);
a3.push(4);

var o = new Object();
o.hello = "This is an object property";
a.push(a2, a3, o);
于 2009-11-25T23:44:23.490 に答える
-1

new Array(1, 2, 3)の代わりにの代わりに[1, 2, 3]と同じnew String("cow")です"cow"

于 2009-11-25T23:55:26.727 に答える