2010-04-18 15 views
12

Wenn ich diese scheinbar harmlose Code-Snippet getippt:Was ist das `name` Schlüsselwort in JavaScript?

values.name 

gedit hervorgehoben Name als Schlüsselwort. Name ist jedoch nicht auf den Seiten aufgeführt, die mit an answer to a question about reserved keywords verknüpft sind. Ich habe auch ein paar triviale Tests in SpiderMonkey gemacht, aber Name schien wie eine gewöhnliche Kennung zu handeln.

Eine Google-Suche hat mir auch nicht viel erzählt. Ich habe jedoch gefunden a page listing name in "Other JavaScript Keywords". Meine Vermutung ist, dass Name ist eine Funktion oder ein Mitglied von einigen DOM-Element und nicht in den Namespace eindringen.

Ist Name wirklich ein Schlüsselwort in JavaScript? Wenn ja, was macht es?

+0

'name' ist (wurde) als Attribut des' a'-Elements verwendet, daher könnte es im DOM-Code vorkommen. Vielleicht ist dies der Grund, warum Ihr Redakteur es hervorhebt. – Thomas

+0

Gedit hebt tatsächlich 'name' als Eigenschaft hervor. Im klassischen Farbschema verwenden Eigenschaften und Schlüsselwörter die gleiche Stildefinition. Weil die Parsingfähigkeiten von gedit ziemlich begrenzt sind, obwohl nur ein kleiner Satz wichtiger Eigenschaftsnamen mit diesem Stil hervorgehoben wird, zum Beispiel regexp Eigenschaften wie 'global',' source', 'lastIndex' und Funktionseigenschaften wie' prototype', 'length 'und' name'. – Robert

+1

In Chrome verhält sich der Name merkwürdig wie ein globales Objekt von localhost. d. h. Innerhalb einer Funktion ändert var name = '...' den ursprünglichen window.name und daher 'name; ist außerhalb des Fn-Bereichs verfügbar. Allerdings, wenn ich es separat in der Konsole und Plunkr es zeigt undefined/oder Original-Fenster-Objekt. In IE sein Verhalten normal (d. H. Undefined/leer in localhost) – Amitesh

Antwort

16

Es ist kein Javascript reserviertes Wort, es ist ein HTML-Attribut. Jedes DOM-Element kann einen Namen haben. Sieht aus wie Ihr Syntax-Editor es immer noch hervorhebt.

3

(Ich weiß, das wurde vor 2 Jahren gefragt, aber, ...) Das ist mir auch passiert, zum Beispiel würde dies unten nicht funktionieren.

name = document.getElementById('nombre'); 
//something else 
name.className = 'thinking'; 

Stattdessen habe ich es zu

username = document.getElementById('nombre'); 
//something else 
username.className = 'thinking'; 

und es funktionierte! Ja, in Ordnung, das ist alles, aber es ist etwas, das ich vielleicht ziemlich interessant finde, auch wegen des "name" -Attributs des "a" -Tags. Etwas, auf das man achten sollte.

+0

Die Frage ist nicht wirklich über Probleme mit der Wiederverwendung der globalen 'name' Variable. Im Gegensatz zur Verwendung eines einfachen 'name' im globalen Gültigkeitsbereich funktioniert die Verwendung von' values.name' * * nur im Text-Editor. – Robert

+2

'window.name' hat einen Setter, der den Wert vor dem Speichern stringiert. Erklären Sie es einfach mit 'var' in einem nicht-globalen Bereich. – Oriol

1

Es ist kein reserviertes Wort, es ist eine Variable (es ist window.name) Ich bin mir nicht sicher, was es definiert ist.

+1

Der erwähnte Texteditor hebt zwar 'name' nicht hervor. Es wird nur hervorgehoben, wenn es als Eigenschaftsname wie in 'window.name' verwendet wird. Dann wird nur der '.name' Teil hervorgehoben. – Robert