it-swarm.com.de

Mit {} oder new Object () ein leeres Objekt in JavaScript erstellen?

Es gibt zwei verschiedene Möglichkeiten, ein leeres Objekt in JavaScript zu erstellen:

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

Gibt es einen Unterschied, wie die Skript-Engine damit umgeht? Gibt es einen Grund, eins übereinander zu verwenden?

In ähnlicher Weise ist es auch möglich, ein leeres Array mit einer anderen Syntax zu erstellen:

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

Objekte

Die Verwendung von new Object(); hat keinen Vorteil - wohingegen {}; Ihren Code kompakter und lesbarer machen kann.

Zum Definieren leerer Objekte sind sie technisch identisch. Die {} -Syntax ist kürzer, übersichtlicher (weniger Java-ish) und ermöglicht es Ihnen, das Objekt sofort inline zu füllen - wie folgt:

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

Arrays

Bei Arrays hat die Verwendung von new Array(); fast keinen Vorteil gegenüber []; - mit einer kleinen Ausnahme:

var emptyArray = new Array(100);

erstellt ein Array mit 100 Elementen und allen Slots, die undefined enthalten. Dies kann in bestimmten Situationen hilfreich sein (z. B. (new Array(9)).join('Na-Na ') + 'Batman!').

Meine Empfehlung

  1. Verwenden Sie niemals new Object(); - es ist klobiger als '{}' und sieht albern aus.
  2. Verwenden Sie immer []; - außer wenn Sie schnell ein "leeres" Array mit einer vordefinierten Länge erstellen müssen.
443
Már Örlygsson

Ja, es gibt einen Unterschied, sie sind nicht gleich. Es ist wahr, dass Sie die gleichen Ergebnisse erhalten, aber der Motor arbeitet für beide auf unterschiedliche Weise. Einer von ihnen ist ein Objektliteral und der andere ist ein Konstruktor. Dabei handelt es sich um zwei verschiedene Möglichkeiten, ein Objekt in Javascript zu erstellen.

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

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

In JS ist alles ein Objekt, aber Sie sollten Folgendes bei new Object () beachten: Es kann einen Parameter empfangen, und abhängig von diesem Parameter wird eine Zeichenfolge, eine Zahl oder nur ein leeres Objekt erstellt.

Zum Beispiel: new Object(1) gibt eine Zahl zurück. new Object("hello") gibt einen String zurück. Dies bedeutet, dass der Objektkonstruktor - abhängig vom Parameter - die Objekterstellung an andere Konstruktoren wie String, Zahl usw. delegieren kann. Um dynamische Daten zu verwalten, um Objekte zu erstellen.

Viele Autoren empfehlen, den Objektkonstruktor nicht zu verwenden, wenn Sie stattdessen eine bestimmte Literalnotation verwenden können, bei der Sie sicher sind, dass das, was Sie erstellen, das ist, was Sie in Ihrem Code erwarten.

Ich empfehle Ihnen, die Unterschiede zwischen der Literalnotation und den Konstruktoren in Javascript weiter zu lesen, um weitere Einzelheiten zu erfahren.

87
Guillermo Snipe

Diese haben das gleiche Endergebnis, aber ich möchte einfach hinzufügen, dass die Verwendung der Literal-Syntax dabei helfen kann, sich an die Syntax von JSON (eine von Zeichenfolgen abhängige Teilmenge der JavaScript-Literal-Objektsyntax) zu gewöhnen .

Eine andere Sache: Sie könnten subtile Fehler haben, wenn Sie vergessen, den Operator new zu verwenden. Die Verwendung von Literalen hilft Ihnen also, dieses Problem zu vermeiden.

Letztendlich wird es sowohl von der Situation als auch von den Vorlieben abhängen.

12
Jason Bunting

Ich glaube, {} wurde in einem der Javascript-Videos auf hier als gute Codierungskonvention empfohlen. new ist für die pseudoklassische Vererbung erforderlich. Die Methode var obj = {}; erinnert Sie daran, dass es sich nicht um eine klassische objektorientierte Sprache handelt, sondern um eine prototypische. Das einzige Mal, dass Sie new wirklich benötigen würden, ist, wenn Sie Konstruktorfunktionen verwenden. Zum Beispiel:

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

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

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

Dann wird es so verwendet:

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

Ein weiterer Vorteil der Verwendung von {} im Gegensatz zu new Object besteht darin, dass Sie damit Objektliterale im JSON-Stil erstellen können.

8
Thedric Walker
var objectA = {}

ist viel schneller und wird meiner Erfahrung nach häufiger verwendet. Daher ist es wahrscheinlich am besten, den 'Standard' zu übernehmen und etwas Tipparbeit zu sparen.

8
Bobby Jack

Die Objekt- und Array-Literal-Syntax {}/[] wurde in JavaScript 1.2 eingeführt. Sie ist daher in Versionen von Netscape Navigator vor 4.0 nicht verfügbar (und führt zu einem Syntaxfehler).

Meine Finger sagen immer noch standardmäßig new Array (), aber ich bin ein sehr alter Mann. Zum Glück ist Netscape 3 kein Browser, den viele Menschen heutzutage in Betracht ziehen müssen ...

8
bobince

Array-Instantiierungsleistung

Wenn Sie ein Array ohne Länge erstellen möchten:

var arr = [];_ IST SCHNELLER ALS var arr = new Array();

Wenn Sie ein leeres Array mit einer bestimmten Länge erstellen möchten:

var arr = new Array(x); ist schneller als _var arr = []; arr[x-1] = undefined_;

Für Benchmarks klicken Sie auf: https://jsfiddle.net/basickarl/ktbbry5b/

Ich kenne jedoch nicht den Speicherbedarf von beiden, ich kann mir vorstellen, dass new Array() mehr Platz einnimmt.

7
Karl Morrison

Das ist im Wesentlichen dasselbe. Verwenden Sie, was Sie bequemer finden.

2
Tomalak

OK, es gibt nur 2 verschiedene Möglichkeiten, dasselbe zu tun! Einer heißt object literal und der andere ist eine Funktion constructor!

Aber lesen Sie weiter, ich möchte einige Dinge mitteilen:

Durch die Verwendung von {} wird der Code besser lesbar, während Instanzen von Object oder anderen integrierten Funktionen erstellt werden, die nicht empfohlen werden ...

Die Object-Funktion ruft Parameter ab, da es sich um eine Funktion handelt, z. B. Object(params)..., aber {} ist eine einfache Methode, um ein Objekt in JavaScript zu starten.

Durch die Verwendung von Objektliteralen sieht Ihr Code für andere Entwickler viel sauberer und einfacher zu lesen aus und entspricht den Best Practices in JavaScript ...

Während Object in Javascript fast alles sein kann, zeigt {} nur auf Javascript-Objekte. Um zu testen, wie es funktioniert, führen Sie die folgenden Schritte in Ihrem Javascript-Code oder in Ihrer Konsole aus:

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

Überraschenderweise schafft es eine Zahl!

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

Und das schafft ein Array!

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

und dieses seltsame Ergebnis für String!

Wenn Sie also ein Objekt erstellen, wird empfohlen, Objektliteral zu verwenden, einen Standardcode zu haben und jeden Codeunfall wie oben zu vermeiden. Auch die Leistung bei der Verwendung von {} ist meiner Erfahrung nach besser!

1
Alireza