Was ist der Unterschied zwischen Objektschlüsseln mit und ohne Anführungszeichen?

Lesezeit: 4 Minuten

Was ist der Unterschied zwischen Objektschlusseln mit und ohne Anfuhrungszeichen
meo

Gibt es einen Unterschied zw

obj = {'foo': 'bar'} 

und

obj = {foo: 'bar'}

Ich habe festgestellt, dass Sie nicht verwenden können - im Schlüssel, wenn ich die Anführungszeichen nicht verwende. Aber macht es wirklich einen Unterschied? Wenn ja, welche?

Was ist der Unterschied zwischen Objektschlusseln mit und ohne Anfuhrungszeichen
bdukes

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

Als Randbemerkung, die JSON-Datenaustauschformat tut erfordern doppelte Anführungszeichen um Bezeichner (und tut es nicht einfache Anführungszeichen zulassen).

  • Eigentlich die Anführungszeichen kann einen Unterschied machen, wenn Sie ein numerisches Literal als Eigenschaftsnamen verwenden. Zum Beispiel, obj = { 12e34: true }; ist nicht dasselbe wie obj = { '12e34': true };. Ersteres würde erfordern, dass Sie auf das Grundstück zugreifen obj['1.2e+35']während Sie für letzteres verwenden würden obj['12e34']. Siehe meine Antwort für weitere Details.

    – Mathias Bynens

    6. März 2012 um 12:18 Uhr

  • Stimmt, aber es wäre genial, wenn doppelte Anführungszeichen optional mit einem z ersten Zeichen + alphanumerischen Zeichen versehen würden, und können einige Whitespace-Fans auch als unsichtbare Leerzeichen oder Tabulatoren bezeichnet werden? ideal für Daten, die nicht tief verschachtelt sind.

    – Königsfreitag

    23. Januar 2016 um 2:01 Uhr


1646633111 342 Was ist der Unterschied zwischen Objektschlusseln mit und ohne Anfuhrungszeichen
Mathias Bynens

Von Nicht in Anführungszeichen gesetzte Eigenschaftsnamen / Objektschlüssel in JavaScriptmein Beitrag zum Thema:

Anführungszeichen können nur weggelassen werden, wenn der Eigenschaftsname ein numerisches Literal oder ist ein gültiger Bezeichnername.

[…]

Die Klammernotation kann sicher für alle Eigenschaftsnamen verwendet werden.

[…]

Punktnotation kann nur verwendet werden, wenn der Eigenschaftsname ein gültiger Bezeichnername ist.

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

Ich habe auch ein Tool erstellt, das Ihnen mitteilt, ob ein bestimmter Eigenschaftsname ohne Anführungszeichen und/oder mit Punktnotation verwendet werden kann. Probieren Sie es aus mothereff.in/js-properties.

Bildschirmfoto

  • Dieses Tool war ein Lebensretter. Danke, dass du das gepostet hast.

    – Chris Christensen

    1. November 2019 um 17:17 Uhr

  • Ich war auf dem Weg von einer Klippe, kurz davor, einen sehr steilen Abhang hinabzustürzen und einem sicheren, vollkommenen, blutigen Tod entgegenzuschlagen; Aber leider habe ich in Ihrer Antwort auf einen Link geklickt, der ein sehr einfaches JS-Tool enthielt, das mich daran gehindert hat, von dieser Klippe zu stürzen. Dieses Tool war ein Lebensretter.

    – Andreas

    19. Dezember 2019 um 18:15 Uhr

Hier gibt es keinen Unterschied. Nur eine Frage des Stils. Einer der Gründe dafür ist die Möglichkeit, „super“ oder „class“ als Schlüssel zu verwenden, da dies reservierte Schlüsselwörter sind.

Einige Leute könnten versucht sein, einen String mit Leerzeichen zu übergeben und dann o aufzurufen[‘I can have whitespace’] Aber ich würde das schlechte Praxis nennen.

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

Es gibt einige Situationen, in denen sie anders sind. Wenn Sie beispielsweise jQuery verwenden und eine Liste von Parametern erstellen, die beim Aufrufen des jQuery-Befehls $() übergeben werden sollen, um ein Element zu erstellen, werden Wörter in Anführungszeichen in Parameter und Wörter ohne Anführungszeichen in Funktionen umgewandelt. Zum Beispiel setzt “size” das Größenattribut des Objekts und size (ohne Anführungszeichen) ruft die Funktion size() für das Objekt auf. Sehen jQuery()ganz unten:

Während das zweite Argument praktisch ist, kann seine Flexibilität zu unbeabsichtigten Konsequenzen führen (z. B. $( “<input>“, {size: “4”} ) Aufruf der Methode .size() anstatt das Attribut size zu setzen). Der vorherige Codeblock könnte also stattdessen wie folgt geschrieben werden:

  • Ich glaube nicht, dass dieses Beispiel sagt, was Sie denken, dass es sagt. Das von Ihnen zitierte Problem besteht darin, dass jQuery über eine Methode namens Größe verfügt und der Konflikt zwischen der Methodengröße und der Attributgröße durch Auswählen der Methode gelöst wird. Es gibt Fälle in jQuery, in denen das Übergeben von a Wert B. eine Zeichenfolge oder ein anderer Typ, bewirkt eine Verhaltensänderung, aber niemals durch die Definition einer Eigenschaft mit einem gültigen Eigenschaftsnamen in Anführungszeichen oder nicht in Anführungszeichen.

    – Alex Weitzer

    18. Mai 2015 um 22:53 Uhr


  • Ich glaube nicht, dass dieses Beispiel sagt, was Sie denken, dass es sagt. Das von Ihnen zitierte Problem besteht darin, dass jQuery über eine Methode namens Größe verfügt und der Konflikt zwischen der Methodengröße und der Attributgröße durch Auswählen der Methode gelöst wird. Es gibt Fälle in jQuery, in denen das Übergeben von a Wert B. eine Zeichenfolge oder ein anderer Typ, bewirkt eine Verhaltensänderung, aber niemals durch die Definition einer Eigenschaft mit einem gültigen Eigenschaftsnamen in Anführungszeichen oder nicht in Anführungszeichen.

    – Alex Weitzer

    18. Mai 2015 um 22:53 Uhr


963420cookie-checkWas ist der Unterschied zwischen Objektschlüsseln mit und ohne Anführungszeichen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy