Vad händer med en deklarerad, oinitialiserad variabel i Javascript? Har den ett värde?
I Javascript kan jag göra
> var foo;
< undefined
> foo;
< undefined
Detta föreslår att i Javascript är deklarerade oinitialiserade variabler alltid undefined. Men är de det? Eller skulle de, som i C, kunna ta ett slumpmässigt skräpvärde?
MDNs var-dokumentation var inte till någon hjälp.
Svar #1
De kommer inte att ta ett slumpmässigt skräpvärde, om inget värde tilldelas kommer det att förbli "undefined".
Det ger möjligheten att kontrollera om ett objekt redan har tilldelats: Från MDN:
function test(t) {
if (t === undefined) {
return 'Undefined value!';
}
return t;
}
var x;
console.log(test(x));
// expected output: "Undefined value!
En variabel som inte har tilldelats ett värde är av typen undefined. En metod eller sats returnerar också undefined om variabeln som utvärderas inte har ett tilldelat värde. En funktion returnerar undefined om inget värde returnerades.
Svar #2
I JavaScript tilldelas alla egenskaper som inte har fått ett värde undefined. Det finns två saker du behöver skilja åt för att förstå det, det finns två Undefined "saker" från ECMA-262-standarden:
- 4.3.9 odefinierat värde
- 4.3.10 Odefinierad typ
Odefinierad typ => typ vars enda värde är det odefinierade värdet
undefined value=> primitivt värde som används när en variabel inte har tilldelats något värde
Så i ditt fall är variabeln initialiserad och den har blivit tilldelad värdet undefined.
Även ett primitivt värde i JavaScript definieras som:
4.3.2 primitiv värde
medlem av en av typerna Undefined, Null, Boolean, Number eller String enligt definitionen i Klausul 8
OBS: Ett primitivt värde är ett datum som representeras direkt på den lägsta nivån av språkets implementation.
