JavaScriptでは、なぜ[]がnew Array();よりも優先されるのですか?
-
05-07-2019 - |
質問
[]
配列リテラルを使用する方が new Array();
表記を使用するよりも優れていることをどこかで読んだことを覚えています(Crockfordの論文の1つだったと思います) 。
しかし、一方の利点をもう一方に思い出すことはできません。
誰が前者が後者よりも好まれているのかを説明してもらえますか?
ここに、 []
が new Array();
よりも優れている理由について考えることができる1つの理由があります:
var Array = function () { };
Array
オブジェクトをオーバーライドすると、コードが壊れます...!
その他の理由
解決
簡潔さ
ネットワーク経由で転送するバイト数、解釈するバイト数、解析する精神的リソースが少ない。
より少ない。
一貫性
これら2行のコードの違いは何ですか?
var arr = [5];
var arr = new Array(5);
こちら new Array(5);
は、5を含む配列を返しません。代わりに、すべての要素が undefined
である5要素の配列を返します。これらの2行は同一の配列を返します。
var arr = [5,6];
var arr = new Array(5,6);
他のヒント
1つの正当な理由は、配列コンストラクターが完全に非直感的な動作をするためです。例:
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"
エレガンス
簡単に言うと、見た目が良く 、特に複雑なデータ構造の場合、プログラマにとって解析が簡単です。
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);
[1、2、3]
の代わりに new Array(1、2、3)
は new String(" cow")と同じです
" cow"の代わりに