2010-04-18 20 views
12

Quando ho digitato questo frammento apparentemente innocente di codice:Qual è la parola chiave `name` in JavaScript?

values.name 

gedit evidenziato nome come parola chiave. Tuttavia, il nome non è elencato dalle pagine collegate a an answer to a question about reserved keywords. Ho anche fatto un paio di test banali in SpiderMonkey, ma il nome sembrava comportarsi come un identificatore ordinario.

Una ricerca Google non mi ha detto molto. Tuttavia, ho trovato a page listing name in "Other JavaScript Keywords". La mia ipotesi è che il nome sia una funzione o un membro di qualche elemento DOM e non si intrometta nello spazio dei nomi.

nome davvero una parola chiave in JavaScript? Se sì, cosa fa?

+0

'name' è (era) utilizzato come attributo dell'elemento' a', quindi potrebbe verificarsi nel codice DOM. Forse questo è il motivo per cui il tuo editor lo sta mettendo in evidenza. – Thomas

+0

In realtà gedit mette in evidenza 'name' come proprietà. Ma nella classica combinazione di colori le proprietà e le parole chiave stanno usando la stessa definizione di stile. Poiché le funzionalità di analisi di gedit sono piuttosto limitate, anche se solo un piccolo insieme di importanti nomi di proprietà viene evidenziato con questo stile, ad esempio proprietà regexp come 'global',' source', 'lastIndex' e proprietà di funzione come' prototype', 'length 'e' nome'. – Robert

+1

In chrome, il nome si comporta in modo strano come oggetto globale da localhost. All'interno di una funzione var name = '...' sta modificando il nome window.name originale e quindi 'nome; è disponibile al di fuori dell'ambito fn. Tuttavia, quando lo eseguo separatamente in console e Plunkr la sua visualizzazione non definita/o oggetto finestra originale. In IE si comporta in modo normale (cioè non definito/vuoto in localhost) – Amitesh

risposta

16

Non è una parola riservata javascript, è un attributo html. Qualsiasi elemento DOM può avere un nome. Sembra che il tuo editor di sintassi lo evidenzierà ancora.

3

(So che questo è stato chiesto 2 anni fa, ma ...) Questo è successo anche a me, ad esempio questo sotto non funzionerebbe.

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

Invece ho cambiato in

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

e ha funzionato! Sì, va bene, ma è qualcosa che trovo forse piuttosto interessante, anche a causa dell'attributo 'name' del tag 'a'. Qualcosa a cui prestare attenzione.

+0

La domanda non riguarda in realtà i problemi con il riutilizzo della variabile globale 'name'. A differenza dell'uso di un semplice 'nome' in ambito globale, l'uso di' values.name' * fa * funziona, viene semplicemente visualizzato in modo anomalo nell'editor di testo. – Robert

+2

'window.name' ha un setter che stringa il valore prima di memorizzarlo. Basta dichiararlo con 'var' in un ambito non globale. – Oriol

1

Non è una parola riservata è una variabile (è window.name) Non sono sicuro di cosa sia definita.

+1

L'editor di testo citato non evidenzia 'nome' però. Lo evidenzia solo quando è usato come un nome di proprietà come in 'window.name'. Quindi viene evidenziata solo la parte '.name'. – Robert

Problemi correlati