404

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

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

スクリプト エンジンがそれらを処理する方法に違いはありますか? どちらか一方を使用する理由はありますか?

同様に、別の構文を使用して空の配列を作成することもできます。

var arrayA = []
var arrayB = new Array()
4

10 に答える 10

494

オブジェクト

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

空のオブジェクトを定義する場合、技術的には同じです。構文はより短く、{}より簡潔になり (Java 風ではなくなります)、次のようにオブジェクトをインラインで即座に設定できます。

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

配列

new Array();配列の場合も同様に、 overを使用する利点はほとんどありません[];- 1 つの小さな例外があります:

var emptyArray = new Array(100);

undefinedすべてのスロットに- を含む 100 アイテムの長い配列を作成します(new Array(9)).join('Na-Na ') + 'Batman!'

私のおすすめ

  1. 絶対に使用new Object();しないでください{};
  2. [];事前定義された長さの「空の」配列をすばやく作成する必要がある場合を除いて、常に - を使用してください。
于 2008-10-30T23:14:25.500 に答える
101

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

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

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

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

例:new Object(1)は数値を返します。new Object("hello")これは、オブジェクト コンストラクターが、パラメーターに応じて、オブジェクトの作成を文字列、数値などの他のコンストラクターに委任できることを意味します。オブジェクトを作成します..

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

詳細については、javascript のリテラル表記とコンストラクターの違いをさらにお読みになることをお勧めします。

于 2011-04-14T14:59:17.530 に答える
13

これらは同じ最終結果をもたらしますが、リテラル構文を使用すると、JSON (JavaScript リテラル オブジェクト構文の文字列化されたサブセット) の構文に慣れるのに役立つことを簡単に付け加えておきます。 .

newもう 1 つ:演算子の使用を忘れると、微妙なエラーが発生する可能性があります。したがって、リテラルを使用すると、その問題を回避できます。

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

于 2008-10-30T19:32:26.697 に答える
8

オブジェクトと配列のリテラル構文{}/[]はJavaScript1.2で導入されたため、4.0より前のバージョンのNetscape Navigatorでは使用できません(構文エラーが発生します)。

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

于 2008-10-30T20:08:00.493 に答える
8
var objectA = {}

ははるかに高速で、私の経験では、より一般的に使用されているため、「標準」を採用して入力を節約するのがおそらく最善です。

于 2008-10-30T19:45:35.530 に答える
8

ここ{}の Javascript vids の 1 つで、優れたコーディング規約として推奨されたと思います。疑似古典継承に必要です。この方法は、これが古典的なオブジェクト指向言語ではなく、プロトタイプの言語であることを思い出させるのに役立ちます。したがって、本当に必要なのは、コンストラクター関数を使用しているときだけです。例えば:newvar 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();

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

于 2008-10-30T20:55:53.050 に答える
2

これは本質的に同じことです。より便利だと思うものを使用してください。

于 2008-10-30T19:23:30.707 に答える