2010-12-03 9 views

Antwort

93

Nein, die Anführungszeichen machen keinen Unterschied (es sei denn, Sie möchten einen Schlüssel verwenden, der kein gültiger JavaScript-Bezeichner ist).

Als eine Randnotiz, benötigt die JSON data exchange format doppelte Anführungszeichen rund um Bezeichner.

+62

Eigentlich _can_ die Anführungszeichen einen Unterschied machen, wenn Sie ein numerisches Literal als Eigenschaftsnamen verwenden. Zum Beispiel ist 'obj = {12e34: true};' nicht dasselbe wie 'obj = {' 12e34 ': true}; '. Ersteres würde erfordern, dass Sie über 'obj ['1.2e + 35'] 'auf die Eigenschaft zugreifen, während Sie für letzteres' obj [' 12e34 '] 'verwenden würden. [Siehe meine Antwort für weitere Details.] (Http://StackOverflow.com/a/9568622/96656) –

+1

Wahr, aber es wäre brilliant, wenn doppelte Anführungszeichen optional sind, gegeben ein erstes Zeichen + alphanumerisch und kann einige Whitespace-Fans aka unsichtbare Leerzeichen oder Tabs? großartig für Daten, die nicht tief verschachtelt sind. –

4

Hier gibt es keinen Unterschied. Nur eine Frage des Stils. Einer der Gründe dafür ist die Verwendung von "Super" oder "Klasse" als Schlüssel, da dies reservierte Schlüsselwörter sind.

Einige Leute könnten versucht sein, eine Zeichenfolge mit Whitespace zu übergeben, dann rufen Sie o ['Ich kann Leerzeichen haben'] Aber ich würde diese schlechte Praxis nennen.

3

Nein, nicht zu Javascript. Einige JSON-Parser schlagen jedoch fehl, wenn die Anführungszeichen um die Schlüssel nicht vorhanden sind.

+26

Schlüssel ohne Anführungszeichen sind in JSON ungültig. –

103

Von Unquoted property names/object keys in JavaScript, meine Zuschreibung auf das Thema:

Zitate kann nur verzichtet werden, wenn der Name der Eigenschaft ein numerisches Literal oder a valid identifier name ist.

[...]

Bracket Notation kann sicher für alle Eigenschaftsnamen verwendet werden.

[...]

Dot-Notation kann nur verwendet werden, wenn der Eigenschaftsname ein gültiger Bezeichner Name ist.

Beachten Sie, dass reservierte Wörter in ES5 als nicht angeführte Eigenschaftsnamen verwendet werden dürfen. Aus Gründen der Rückwärtskompatibilität mit ES3 würde ich jedoch vorschlagen, sie trotzdem zu zitieren.

Ich habe auch ein Tool erstellt, das Ihnen sagen wird, ob ein bestimmter Eigenschaftenname ohne Anführungszeichen und/oder Punktnotation verwendet werden kann. Versuchen Sie es bei mothereff.in/js-properties.

Screenshot

1

Es gibt einige Situationen, in denen sie sich unterscheiden. Wenn Sie beispielsweise jQuery verwenden und eine Liste von Parametern erstellen, die übergeben werden sollen, wenn der Befehl jQuery $() zum Erstellen eines Elements aufgerufen wird, werden zitierte Wörter in Parameter umgewandelt und nicht zitierte Wörter in Funktionen umgewandelt. Zum Beispiel wird "size" das size-Attribut des Objekts und "size" (keine Anführungszeichen) die size() -Funktion für das Objekt aufrufen. Siehe jQuery(), in der Nähe der Unterseite:

Während das zweite Argument bequem ist, kann seine Flexibilität zu unbeabsichtigten Folgen führt (zum Beispiel $ ("<input>", {size: "4"}) rief die.size() - Methode anstelle des Größenattributs).

+0

Ich glaube nicht, dass dieses Beispiel sagt, was du denkst, was es sagt. Das Problem, das Sie angegeben haben, ist, weil jQuery eine Methode namens size hat und der Konflikt zwischen der Methodengröße und der Attributgröße durch Auswahl der Methode gelöst wird. In jQuery gibt es Fälle, in denen die Übergabe eines _Value_ als Zeichenfolge oder eines anderen Typs zu einer Änderung des Verhaltens führt, jedoch niemals zum Definieren einer Eigenschaft mit einem gültigen Eigenschaftennamen in Anführungszeichen und nicht in Anführungszeichen. –

-8

Unterschiede: Der bisherige Codeblock könnte also stattdessen geschrieben werden

  1. Kein Zitat: Es ist eine Aufgabe, wenn es kein Zitat ist.

Zugang des Mitglieds Objekt: object.member

  1. Hat Zitat: Es ist eine Karte, wenn es Zitat ist.

Zugang des Mitglieds Karte: object [Mitglied]

Verwandte Themen