Frage

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

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

Gibt es einen Unterschied, wie die Script-Engine sie behandelt? Gibt es irgendeinen Grund einen über den anderen zu benutzen?

Ebenso ist es auch möglich, ein leeres Array mit unterschiedlicher Syntax zu erstellen:

var arrayA = []
var arrayB = new Array()
War es hilfreich?

Lösung

Objekte

Es gibt keinen Nutzen für new Object(); mit -. Während {}; Code kompakter machen und besser lesbar

leere Objekte Zur Definition sind sie technisch gleich. Die {} Syntax ist kürzer, sauberere (weniger Java-ish) und ermöglicht es Ihnen, sofort das Objekt Inline bevölkern - etwa so:

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

Arrays

Für Arrays, gibt es in ähnlicher Weise fast keinen Nutzen für die jemals new Array(); über []; mit - mit einer kleinen Ausnahme:

var emptyArray = new Array(100);

erzeugt ein 100 Artikel lang Array mit allen Slots enthalten undefined -., Die in bestimmten Situationen schön / nützlich sein können (wie (new Array(9)).join('Na-Na ') + 'Batman!')

Meine Empfehlung

  1. Nie new Object(); verwenden - es ist clunkier als '{}' und sieht albern
  2. .
  3. Immer []; verwenden - es sei denn, Sie benötigen, um schnell ein „leeres“ Array mit einer vordefinierten Länge erstellen
  4. .

Andere Tipps

Ja, es gibt einen Unterschied, sie sind nicht das gleiche. Es ist wahr, dass Sie die gleichen Ergebnisse erhalten werden, aber der Motor arbeitet auf eine andere Art und Weise für beide. Einer von ihnen ist ein Objektliteral, und der andere ist ein Konstruktor, zwei verschiedene Arten von einem Objekt in Javascript zu schaffen.

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

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

In JS alles ist ein Objekt, aber man sollte über die folgende Sache mit neuen Object () bewusst sein: Es kann einen Parameter erhalten, und in Abhängigkeit von diesem Parameter, wird es eine Zeichenfolge, eine Zahl zu erstellen, oder einfach nur ein leere Objekt.

Zum Beispiel: new Object(1) wird eine Nummer zurück. new Object("hello") einen String zurück, bedeutet dies, dass das Objekt Konstruktor delegieren kann auf der parameter- -je die Objekterstellung zu anderen Konstrukteuren wie String, eine Zahl, etc ... Es ist sehr wichtig, dies im Auge zu behalten, wenn Sie dynamische Daten sind die Verwaltung zum erstellen von Objekten ..

Viele Autoren empfehlen nicht den Objektkonstruktor zu verwenden, wenn Sie eine bestimmte wörtliche Notation stattdessen verwenden können, wo Sie sicher sein, dass das, was Sie erstellen ist, was Sie in Ihrem Code haben, sind zu erwarten.

Ich schlage vor, Sie auf den Unterschieden zwischen wörtlicher Notation und Konstrukteure auf Javascript eine weitere Lesung zu tun, um weitere Details zu finden.

Diese haben das gleiche Endergebnis, aber ich würde einfach hinzufügen, dass die wörtliche Syntax kann man auf die Syntax von JSON (eine String-ified Teilmenge von JavaScript wörtlicher Objektsyntax) gewöhnt helfen, so könnte es eine gute Praxis um in.

Eine andere Sache: Sie können subtile Fehler, wenn Sie vergessen, den new Operator zu verwenden. Also, Literale verwendet, werden Ihnen helfen, dieses Problem zu vermeiden.

Am Ende wird es von der Situation abhängen sowie Präferenz.

Das Objekt und Arrayliteral Syntax {} / [] in JavaScript 1.2 eingeführt wurde, so nicht verfügbar ist (und wird einen Syntaxfehler erzeugen) in Versionen von Netscape Navigator vor 4.0.

Meine Finger standardmäßig immer noch neuen Array zu sagen (), aber ich bin ein sehr alter Mann. Zum Glück Netscape 3 ist kein Browser viele Menschen jemals heute zu betrachten haben ...

var objectA = {}

ist viel schneller und nach meiner Erfahrung, häufiger verwendet, so ist es wahrscheinlich am besten den ‚Standard‘ zu übernehmen und eine Eingabe speichern.

Ich glaube, {} wurde in einer der Javascript vids auf hier als eine gute Codierung empfohlen Konvention. new ist für pseudo Vererbung notwendig. die var obj = {}; Art und Weise hilft, Sie daran zu erinnern, dass dies nicht eine klassische objektorientierte Sprache ist, sondern eine prototypische ein. So ist die einzige Zeit, die Sie wirklich new brauchen würde, ist, wenn Sie Konstrukteuren Funktionen 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 verwendet, etwa so:

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

Ein weiterer Vorteil der Verwendung von {} als entgegenstellen wird new Object Sie es verwenden können JSON-Stil Objektliterale zu tun.

Array Instanziierung Leistung

Wenn Sie ein Array ohne Länge erstellen:

var arr = []; ist schneller als var arr = new Array();

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

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

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

Ich jedoch nicht den Speicherbedarf von beiden weiß, ich, dass new Array() mehr Platz in Anspruch nimmt sich vorstellen kann.

Dies ist im Wesentlichen das Gleiche. Verwenden Sie, was Sie bequemer finden.

OK , gibt es nur zwei verschiedene Möglichkeiten, die gleiche Sache zu tun! Man nannte object literal und das andere ist eine Funktion constructor!

Aber lesen Sie weiter, es gibt einige Dinge, die ich teilen möchte:

Mit {} macht Ihr Code besser lesbar, während Instanzen Object oder andere integrierte Funktionen nicht zu empfehlen ...

Erstellen

Auch Object-Funktion erhält Parameter, da es eine Funktion ist, wie Object(params) ... aber {} ist reine Art und Weise ein Objekt in JavaScript zu starten ...

Mit Objektliteral macht Ihr Code sieht viel sauberer und einfacher für andere Entwickler zu lesen und es ist inline mit Best Practices in JavaScript ...

Während Objekt in Javascript kann fast alles sein, {} verweist nur auf JavaScript-Objekte, für die Prüfung, wie es funktioniert, tut unten in Ihrem JavaScript-Code oder Konsole:

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

Überraschenderweise es die Schaffung einer Zahl!

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

Und das ein Array schafft!

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!

Also, wenn Sie ein Objekt erstellen, es wird empfohlen, Objektliteral zu verwenden, den Standardcode zu haben, und vermeiden Sie Code Unfall wie oben, auch weise Leistung durch {} ist besser in meiner Erfahrung!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top