2012-07-30 12 views
5

可能性の重複: Javascriptで配列を宣言するときに従うべきベストプラクティスはどれですか?

私はこの表記法を使用して新しい配列を宣言したい
Create an empty object in JavaScript with {} or new Object()?

var arr = new Array(); 

しかしjsbinに例えば、オンラインテストするとき、警告は私に "配列リテラル記法[]を使用してください。"

コンストラクタの使用を避ける理由が見つかりませんでした。 []を使用するより効率的ではありませんか?それとも悪い習慣ですか?

var arr = new Array();の代わりにvar arr = [];を使用する理由はありますか?

答えて

5

ほとんどの人は、Douglas Crockfordと言っているので、ほとんどの人が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 

注:

彼の理由は、新しいアレイ()の非直感的で一貫性のない行動を含めます!

実際に[]を使用する方が効率的で安全です。 Arrayコンストラクタを上書きして奇妙なことをさせることはできますが、[]の動作を上書きすることはできません。

個人的には、私は常に[]構文を使用し、同様に常に新しいObject()の代わりに{}構文を使用します。

+0

あらかじめ指定された番号の要素が1つだけある配列を作成するにはどうしたらいいですか? – KooiInc

+1

彼は、指定されたサイズの事前定義された配列を作成するので、新しい配列(123)を使って配列[123]を作成できないことを意味します。 –

0

お勧めです

var arr = []; 

が既にhere

+2

男はなぜそれが良いか説明を求めました。 –

7

[]に答え使用することです:短い

  • 明確
  • 対象ではないnew Array(3)と0123へ全く異なることをしています
  • オーバーライドできません。

例コード:

var a = new Array(3); 
var b = new Array(3,3); 
Array = function() { return { length: "!" }; }; 
var c = new Array(); 
var d = []; 
alert(a.length); // 3 
alert(b.length); // 2 
alert(c.length); // ! 
alert(d.length);​ // (still) 0​​​​​​​​ 

このコードliveは - 4つのアラートを作成しようとします!

+0

良い答えです。ところで、なぜ新しいArray(3)と新しいArray(3,3)が矛盾していると思いますか?完全に異なる初期化を実行します。 –

+0

'[]'はまた、多くのブラウザでは[高速](http://jsperf.com/literal-vs-constructor-array/4)です。 –

+0

@AshwinPrabhu - 彼らは完全に異なる初期化を行うということが私の主張です。メンテナは、第2引数を追加すると第1引数の意味が変わることを知る必要があります。 – Quentin

0

JavaScriptでは、可能な限りリテラルを使用する必要があります。代わり同様var o = new Object();

var a = [];代わりにvar o = new Array();

var o = {};、そうでnew String("abc");new Number(1);を行い、そしてありません。

0

JavaScriptはプロトタイプ言語であり、C#のような古典的な言語ではありません。 JavaScriptにはC#とよく似た新しい演算子がありますが、新しいオブジェクトや配列の作成には使用しないでください。

//Bad way to declare objects and arrays 
var person = new Object(), 
    keys = new Array(); 

新しいキーワードが古典語をなだめるために、部分的に言語に追加しましたが、現実には、彼らを助けるよりも、より多くの開発者を混乱する傾向ました。その代わりに、オブジェクトと配列を宣言するためのJavaScriptのネイティブな方法があります。代わりにそれらを使用する必要があります。

代わりに、以前の構文を使用する代わりに、オブジェクトと配列をリテラル表記で宣言する必要があります。

//Preferred way to declare objects and arrays 
var person = {}, 
    keys = []; 

このパターンを使用すると、実際にはオブジェクトリテラルと配列初期化子構文を使用して多くの表現力が得られます。

//Preferred way to declare complex objects and arrays 
var person = { 
     firstName: "Elijah", 
     lastName: "Manor", 
     sayFullName: function() { 
      console.log(this.firstName + " " + 
       this.lastName); 
     } 
    }, 
    keys = ["123", "676", "242", "4e3"]; 

ベストプラクティス

あなたはそれらのリテラル表記を使用しての代わりに、新しい操作を使用して、すべての変数を宣言する必要があります。同様の方法で、Boolean、Number、String、またはFunctionにnewキーワードを使用しないでください。彼らがしているのは、さらに肥大したものや遅いものを加えることだけです。

新しいキーワードを使用する唯一の本当の理由は、新しいオブジェクトを作成していて、定義したコンストラクタを使用したい場合です。このトピックの詳細については、Douglas Crockfordの投稿、JavaScript、We Hardly new Yaを参照してください。

関連する問題