Már több mint negyed éve interjúztatok JavaScript fejlesztői állásra, és észrevettem, hogy a mi kérdéssorunkból mire tudják a legkevesebben a választ, illetve mire adnak rendszeresen hibás választ. Ezeket a kérdéseket és válaszokat próbáltam összegyűjteni, hátha mások tanulni fognak belőle.
JavaScriptben prototípusos (prototypal) öröklődés van, ami azt jelenti, hogy egy osztály a prototípusától örökli a tulajdonságait. A prototípusa pedig szintén örökölhet tulajdonságokat a saját prototípusától, így jön létre a prototípus lánc (prototype chain). A prototípus lánc azt jelenti, hogy amikor a objektum egy tulajdonságát kérdezzük le, akkor a JavaScript motor előbb megnézi, hogy az definiálva van-e magán az objektumon, majd annak prototípusán, majd a prototípus prototípusán stb. Ha megtalálja, akkor visszadja, ha nem, akkor undefined
értéket ad vissza vagy ReferenceError
hibát dob.
undefined
Az undefined
azt jelenti hogy a változó még nem kapott értéket, vagy nem is lett definiálva. A null
azt jelenti, hogy a változó létezik, és a fejlesztő szándékosan jelezni akarja, hogy a változónak nincsen értéke.
A primitív típusok (number
, string
, boolean
, undefined
, null
) érték szerint, az objektumok (azaz minden más) pedig referencia szerint.
Az események terjesztésének két fázisa van (egyes elméletek szerint 3), lefutási sorrendben: az elfogási fázis (capture phase)[, célpont fázis (target phase)], és a buborékolás fázis (bubbling phase). A capture phase-ben az esemény a dokumentum tetejéről, külsejéről indul és jut el végül a célponthoz. A bubbling phase esetében pedig az esemény a célponttól elindul és fölfele végigfut az összes szülő elemen.
static
: Az elem része a dokumentum folyamnak, nem számít pozicionáltnak.relative
: Az elem része a dokumentum folyamnak, helyzete relatív az eredetileg elfoglalt pozíciójához képest.absolute
: Az elem nem része a dokumentum folyamnak, helyzete relatív a legközelebbi pozicionált elem elem pozíciójához képest.fixed
: Az elem nem része a dokumentum folyamnak, helyzete relatív a nézetablakhoz (viewport) képest, nyomtatás esetén minden egyes lapon.