Hirdetés

Új hozzászólás Aktív témák

  • nevemfel
    senior tag

    Egy kicsit körbejártam ezt, és elismerem, igazad van. :R

    Ezek szerint JS-ben elméletileg NINCS is tömb, a tömb is objektum, DE az objektumok a gyakorlatban tömb ÉS objektum SZINTAXISSAL is kezelhetők. Viszont akkor félrevezető, hogy tömb szintaxissal létrehozott objektumokat tömbnek "hazudja" a Console ...

    Megerősítésképpen:

    Tanulságos ..., nyilván van gyakorlati előnye, de szigorúan nézve számomra ez inkább zavaró. Az ember azt hiszi, hogy tömbje van, pedig nem is ...

    I. Objektumok.

    Javascriptben egy objektum mezőit kétféle szintaxissal lehet elérni.

    1. dot notation:
    obj.property

    2. bracket notation:
    obj["property"]

    A bracket notation akkor szükséges, ha olyan propertyt akarsz kezelni, ami
    1. változóban van eltárolva,
    2. javascriptben nem minősül megengedett azonosítónak (identifier). Például számjeggyel kezdődik, mint tömbelemek esetében, vagy space-t tartalmaz.

    Erre találták ki a bracket notationt, ami stringet vár, nem azonosítót. Ha nem stringet kap, akkor a kapott értéket stringgé konvertálja.

    II. Tömbök.

    Javascriptben létezik egy ún. array literal:

    var cars = ["BMW", "Toyota", "Mazda"];

    Az ezzel a szintaxissal létrehozott érték egy olyan objektum, aminek a prototype linkje a beépített Array objektumra mutat.
    Ebből örököl egy csomó tömbspecifikus metódust (push, pop, slice, splice stb...) és a length propertyt. Tehát a tömb is objektum, de speciális objektum.

    III. typeof

    A typeof egy legacy nyelvelem. Minden objektumra, függetlenül, hogy miből származik, a type operátor "object"-et ad vissza, kivéve function esetében. Tömb esetén tehát szintén "object"-et fog visszaadni.

    Ha azt akarod tesztelni, hogy egy érték tömb vagy sem:
    1. cars instaceof Array true-t ad vissza, ezzel jelezve, hogy a cars proto linkje az Array-re mutat (ami egyébként az Objectre linkel tovább). Cross framek (iframe) esetében az instanceof bugosan viselkedik, mindig false-t ad vissza.
    2. Array.isArray(cars); szintén true-val tér vissza tömb esetén. Ez cross-frame kompatibilis.

Új hozzászólás Aktív témák