web-dev-qa-db-ja.com

{}またはnew Object()を使用してJavaScriptで空のオブジェクトを作成しますか?

JavaScriptで空のオブジェクトを作成するには、 2つの異なる 方法があります。

var objectA = {}
var objectB = new Object()

スクリプトエンジンによる処理方法に違いはありますか?一方を他方に使用する理由はありますか?

同様に、異なる構文を使って空の配列を作成することも可能です。

var arrayA = []
var arrayB = new Array()
341
Jonas Pegerfalk

オブジェクト

new Object();を使用しても利点はありません - {};を使用するとコードがさらにコンパクトになり、読みやすくなります。

空のオブジェクトを定義するためのそれらは技術的に同じです。 {}構文はより短く、よりきれい(Javaらしくない)で、すぐにインラインでオブジェクトを生成することを可能にします。

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

配列

配列についても、[];よりnew Array();を使用することに利点がほとんどありません。

var emptyArray = new Array(100);

すべてのスロットにundefinedを含む100項目の長さの配列を作成します - これは、特定の状況((new Array(9)).join('Na-Na ') + 'Batman!'など)でNice /便利な場合があります。

私のおすすめ

  1. 決してnew Object();を使わないでください - それは '{}'よりもぎこちなくて愚かに見えます。
  2. あらかじめ定義された長さで "空の"配列をすばやく作成する必要がある場合を除き、常に[];を使用してください。
431
Már Örlygsson

はい、違いがあります、それらは同じではありません。それはあなたが同じ結果を得るだろうがエンジンはそれらの両方に対して異なる方法で動作することは事実です。そのうちの1つはオブジェクトリテラルです。もう1つはコンストラクタです。2つの異なる方法でJavaScriptでオブジェクトを作成します。

var objectA = {} //This is an object literal

var objectB = new Object() //This is the object constructor

JSではすべてがオブジェクトですが、new Object()では次のことに注意する必要があります。パラメータを受け取ることができ、そのパラメータに応じて、文字列、数値、または単に空のオブジェクトが作成されます。

例えば、new Object(1)はNumberを返します。 new Object("hello")は文字列を返します。つまり、オブジェクトコンストラクタはパラメータに依存してオブジェクトの作成をstring、numberなどの他のコンストラクタに委譲することができます。オブジェクトを作成する.

多くの作者は、代わりに特定のリテラル表記を使用できる場合はオブジェクトコンストラクタを使用しないことをお勧めします。そこでは、作成しているものがコードに含まれることを期待していることが確実です。

私はあなたがより多くの詳細を見つけるためにあなたがjavascript上の文字表記とコンストラクタの違いについてさらに読むことをすることを勧めます。

85
Guillermo Snipe

これらは同じ結果になりますが、リテラル構文を使用するとJSONの構文(JavaScriptのリテラルオブジェクト構文の文字列で定義されたサブセット)に慣れるのに役立ちます。 。

もう1つのこと:new演算子の使用を忘れた場合、微妙なエラーが発生する可能性があります。そのため、リテラルを使用すると、その問題を回避するのに役立ちます。

最終的には、状況と好みによって異なります。

11
Jason Bunting

アレイのインスタンス化パフォーマンス

長さのない配列を作りたい場合は、

var arr = [];var arr = new Array();より速い

特定の長さの空の配列を作成したい場合は、

var arr = new Array(x);var arr = []; arr[x-1] = undefinedより速いです。

ベンチマークについては、次をクリックしてください。 https://jsfiddle.net/basickarl/ktbbry5b/

私は両方のメモリ使用量を知りませんが、new Array()がより多くのスペースを占有することを想像できます。

7
Karl Morrison

私は{}here のJavascriptのVIDの中で良いコーディング規約として推奨されていると思います。 newは擬似古典的継承に必要です。 var obj = {};の方法は、これは古典的なオブジェクト指向言語ではなく、プロトタイプの言語であることを思い出させるのに役立ちます。したがって、newが本当に必要になるのは、コンストラクタ関数を使用しているときだけです。例えば:

var Mammal = function (name) {
  this.name = name;
};

Mammal.prototype.get_name = function () {
  return this.name;
}

Mammal.prototype.says = function() {
  return this.saying || '';
}

それからそれはこんな感じで使われます:

var aMammal = new Mammal('Me warm-blooded');
var name = aMammal.get_name();

{}とは対照的にnew Objectを使用するもう1つの利点は、JSONスタイルのオブジェクトリテラルを実行するために使用できることです。

7
Thedric Walker
var objectA = {}

私の経験ではもっと速くて、そしてもっと一般的に使われているので、おそらく 'standard'を採用してタイプを少し節約することが最善です。

7
Bobby Jack

オブジェクトと配列のリテラル構文{}/[]はJavaScript 1.2で導入されたので、4.0より前のバージョンのNetscape Navigatorでは利用できません(そして構文エラーを生成します)。

私の指はまだnew Array()と言うことをデフォルトとしていますが、私は非常に年配の男性です。ありがたいことに、Netscape 3は今日では多くの人が考慮しなければならないブラウザではありません...

7
bobince

これは本質的に同じことです。もっと便利なものは何でも使ってください。

2
Tomalak

_ ok _ 、同じことをするには2つの方法しかありません。一つはobject literal、もう一つはconstructorという関数です。

しかし、読んで、私が共有したいことがいくつかあります。

{}を使用するとコードが読みやすくなりますが、Objectまたはその他の推奨されていない組み込み関数のインスタンスを作成します。

また、Object関数はObject(params)...のように関数であるためパラメータを取得しますが、{}はJavaScriptでオブジェクトを起動する純粋な方法です...

オブジェクトリテラルを使用すると、他の開発者にとってコードがはるかにクリーンで読みやすくなり、JavaScriptのベストプラクティスと一致します。

JavascriptのObjectはほとんど何でもかまいませんが、{}はjavascriptオブジェクトを指すだけです。それがどのように機能するかをテストするには、以下にJavaScriptコードまたはコンソールで行います。

var n = new Object(1); //Number {[[PrimitiveValue]]: 1}

驚いたことに、それは数を作成しています!

var a = new Object([1,2,3]); //[1, 2, 3]

これで配列が作成されました。

var s = new Object('alireza'); //String {0: "a", 1: "l", 2: "i", 3: "r", 4: "e", 5: "z", 6: "a", length: 7, [[PrimitiveValue]]: "alireza"}

そしてStringのこの奇妙な結果!

したがって、オブジェクトを作成する場合は、オブジェクトリテラルを使用し、標準コードを使用し、上記のようなコードの不慮の事故を回避することをお勧めします。{}を使用したパフォーマンスの点でもパフォーマンスは優れています。

1
Alireza