2012-12-27 17 views
6

Mi sono sempre chiesto come JavaScript memorizza internamente i valori null. null è diverso da qualsiasi valore. Immagino che le variabili dell'oscilloscopio siano memorizzate in una sorta di matrice di strutture, ogni struttura corrispondente a una variabile. Questa struttura ha qualche tipo di proprietà booleana chiamata "null"?In che modo JavaScript memorizza valori null internamente?

vorrei cercare io stesso nel codice sorgente V8, ma sto sto abbastanza perso nel codice C++ :(

non ho trovato nulla su Google. La maggior parte dei risultati sono stati correlate a domande del tipo "Come determinare se la variabile è indefinita o nulla? "o simile

+3

Probabilmente dipende dall'interprete, anche se sarei sorpreso di apprendere che si trattava di qualcosa di molto diverso dal semplice zero. Non è davvero un dettaglio importante. – Pointy

+1

Ricorda che ci sono diversi valori "falsy": null, undefined, false, 0, ecc. Più probabile, c'è un campo "type" su ogni variabile che indica se il valore è nullo, indefinito, un numero, un booleano, un oggetto, ecc. – cdhowie

+0

@Pointy Certo, dipende dall'interprete. Se memorizzasse valori nulli come zero, allora perché '(null === 0)' restituisce 'false'? –

risposta

3

JavaScript, essendo un linguaggio di scripting debolmente tipizzato, ha probabilmente un tipo di variante che supporta valori di tutti i tipi di tipi.Penso che PHP usi lo stesso tipo di variabili, anche se sono conosciuti anche in altre lingue e svolgono un ruolo importante nell'automazione COM

Sono di base strutture alleate che contengono un tipo e un valore. Il valore può essere un valore semplice o un puntatore a un valore più grande o più complesso. null è solo uno dei tipi supportati, nel qual caso il valore stesso non ha alcun ruolo.

Ma dal momento che JavaScript conosce molti interpreti, non esiste una regola su come è implementato, ed è qualcosa di cui non dovresti preoccuparti. Normalmente è necessario conoscere solo tecniche sottostanti come questa per applicazioni time-critical, che non dovrebbero comunque essere scritte in JavaScript.

+2

'null' non è un tipo separato, davvero; è il valore vuoto per i valori di riferimento 'Object'. – Pointy

+0

Stavo parlando dell'implementazione nei record di varianti comunemente noti. Javascript può descrivere 'null' come un tipo speciale di oggetto, ma dubito fortemente che internamente ci sia effettivamente un oggetto. – GolezTrol

+1

@Pointy (Anche se sono rimasto un po 'sorpreso dal fatto che 'typeof (null)' restituisce '" oggetto "'.) –

Problemi correlati