Névjegyzék

JavaScript Ellenőrizze a változó típusát. A JavaScript változó típusának ellenőrzése. A fogadó üzemeltető típusa

JavaScript. vagy JS. (Rövidítve) Nem egyszerű nyelv és újvárosi fejlesztők nem fognak azonnal tudni róla. Először felismerik az alapokat, és minden színesnek és szépnek tűnik. Egy kicsit mélyebbre keres, a JavaScript tömbök, tárgyak, visszahívások és minden olyan, mint a gyakran teszi az agyat.

A JavaScript fontos, hogy helyesen ellenőrizze a változó típusát. Tegyük fel, hogy tudni szeretné, hogy egy változó egy tömb vagy tárgy? Hogyan ellenőrizheti igaza? Ebben az esetben vannak trükkök az ellenőrzés során, és ez lesz ez a bejegyzés. Azonnal folytassanak.

Változó típusellenőrzés

Például ellenőriznie kell egy objektumváltozó, egy tömb, karakterlánc vagy szám. Ehhez használhatja a Typefi-t, de nem mindig adja meg az igazságot, és az alábbi példában megmutatom, miért.

Ezt a példát az élénken megmutatom, hogy miért nem mindig a megfelelő választás.

Var _Comparison \u003d (string: "string", int: 99, úszó: 13.555, objektum: (Hello: "Hi"), tömb: új tömb (1, 2, 3)); // visszatér egy tömböt a var _objkeys object \u003d object.keys (_Comparison) gombokkal; mert (var i \u003d 0; i<= _objKeys.length - 1; i++) { // выведем в консоль тип каждой переменной console.log(typeof _comparson[_objKeys[i]]); }

Kódfeltétel Eredmény:

String szám száma objektum objektum

Jobb? - Természetesen nem. Két probléma van. Mindegyikük részletesen ismertetjük és javasoljuk.

Első probléma: úszási szám, kimenet a számként

Összehasonlítás.Float nem szám, és a szám helyett úszik (lebegőpontos szám). Ez rögzítve van, akkor létrehozhat egy ellenőrzési funkciót az alábbi kódban.

Var _floatnumber \u003d 9.22; var _notfloatumber \u003d 9; Konzol.log (ISFloat (_floatnumber)); Konzol.log (isfloat (_notfloatumber)); Konzol.log (isfloat (")); Funkció ISFloat (n) (visszaadási szám (n) \u003d\u003d\u003d n && n% 1! \u003d\u003d 0;)

Az ISFLOAT () funkció az összes érték ellenőrzését végzi a lebegőpontos számokhoz. Először ellenőrizzük, hogy a változó egyenlő-e n. szám (szám (n) \u003d\u003d\u003d n), és ha igen, akkor egy másik érvényesítési ellenőrzés a maradékkal, és ha van maradék, akkor a BuleVa visszatér ( igaz. vagy hamis) Eredmény (N% 1! \u003d\u003d 0).

A fenti példában visszatér igaz., hamis és hamis. Az első érték úszó.típus, a második nem - ez a szokásos szám és az utolsó, csak egy üres karakterlánc, amely nem felel meg a szabályoknak.

Második probléma: A tömböt objektumként határoztuk meg

Az első példában a tömb objektumként jelenik meg, és ez nem túl jó, mivel néha ezt a bizonyos típusú és semmi másra kell használnia.

Számos módja van annak, hogy ellenőrizze a változó a tömb típusát.

Első lehetőség (jó lehetőség). Ellenőrizze az adattovábbítást a tömbhöz a példányban ().

VAR DATA \u003d új tömb ("Hello", "Világ"); Var Isarr \u003d Adatszerzés tömb;

Második verzió (jó opció). A tömb.isaray () módszer visszaadja a logikai értéket, amely attól függ, hogy a változó tömb vagy sem ().

VAR DATA \u003d új tömb ("Hello", "Világ"); var Isarr \u003d Array.ISarray (adatok);

Harmadik lehetőség (a legjobb, de hosszú). A kényelem érdekében így működik. Az objektum használatával. Ha az eredmény object.prototype.tostring.call (adatok) nem egyenlő a változó nem tömb ().

VAR DATA \u003d új tömb ("Hello", "Világ"); var isarr \u003d object.prototype.tostring.call (adatok) \u003d\u003d ""; Konzol.log (ISARR);

Az utolsó eredmény egy kényelmes funkció formájában:

Funkció Isarray (adatok) (Visszatérési objektum.prototype.tostring.call (adatok) \u003d\u003d "")

Most hívhatod az Isarray () funkciókat és egy argumentumot, hogy egy tömböt vagy valami mást állítson be, és láthassa az eredményt.

Utólag

A felvétel meglehetősen nagy, mint eredetileg gondolta. De elégedett vagyok vele, mert röviden és egyértelműen leírja a nehézségeket, amikor ellenőrzi a változókat a JavaScriptben és hogyan juthat el körülöttük.

Ha bármilyen kérdése van - írja le az alábbiakat erre a rekordra. Örülök, hogy segítek.

Operátor Típusú. Visszaadja az operandum típusát jelző karakterláncot.

Szintaxis

Az operand az üzemeltető típusát követi:

Típusú. operand.

Paraméterek

operand. Ez egy objektumot vagy primitív kifejezést, amelynek típusát vissza kell adni.

Leírás

Az alábbi táblázat a lehetséges visszaadott típusú értékeket mutatja. A típusokról és a primitívekről szóló további információk az oldalon találhatók.

Példák

// számok 37 \u003d\u003d\u003d "szám"; Típus 3.14 \u003d\u003d\u003d "szám"; Típus (42) \u003d\u003d\u003d "szám"; Math.ln2 \u003d\u003d\u003d "szám"; Infinity típus \u003d\u003d\u003d "szám"; NAN típus \u003d\u003d\u003d "szám"; // annak ellenére, hogy "nem-a-szám" (nem szám) típusú szám (1) \u003d\u003d\u003d "szám"; // Soha ne használja ezt a bejegyzést! // String Typeof "\u003d\u003d\u003d" string "; "BLA" \u003d\u003d\u003d "string" typeof; "1" \u003d\u003d\u003d "string" típusú; // Kérjük, vegye figyelembe, hogy a karakterlánc belsejében lévő számnak még mindig van egy sztring típusa (1. típus) \u003d\u003d\u003d "string"; // A Typeof mindig visszatér ebben az esetben a String String ("ABC") \u003d\u003d\u003d "string"; // Soha ne használja ezt a bejegyzést! // booleans type ur \u003d\u003d\u003d "Boolean"; FALSEF \u003d\u003d\u003d "Boolean"; Boolean típus (TRUE) \u003d\u003d\u003d "Boolean"; // Soha ne használja ezt a bejegyzést! // Syms Symbols Symbol () \u003d\u003d\u003d "szimbólum" típusú szimbólum ("foo") \u003d\u003d\u003d "szimbólum" típusú szimbólum. A DECOREDBUTUNDEFINEFINEFINEVARILIBLE \u003d\u003d\u003d "nem definiált"; UndeclaredVariable \u003d\u003d\u003d "undefined" típus; // Tárgyak típusa (A: 1) \u003d\u003d\u003d "objektum"; // az array.isarray vagy object.prototype.tostring.call // a szokásos objektumok és típusok megkülönböztetése és a \u003d\u003d\u003d objektum "tömbök között; Új dátumot () \u003d\u003d\u003d "objektum"; //, hogy az alacsonyabb vezet hibákhoz és problémákhoz. Ne használja! Új logikai (true) \u003d\u003d\u003d "objektum" típusa; Új szám betartása (1) \u003d\u003d\u003d "objektum"; Új karakterlánc ("ABC") típusa \u003d\u003d\u003d "objektum"; // Funkciók Típus funkció () () \u003d\u003d\u003d "függvény"; C. osztály () \u003d\u003d\u003d "funkció"; Math.sin \u003d\u003d\u003d "funkció" típusa;

nULLA

// Meghatározták a NULL \u003d\u003d\u003d "objektum" JavaScript típusának születését;

A JavaScript első megvalósításában az értékeket páros címke típusával és értékével mutatták be. Az objektumok címke címke 0. NULL volt nulladerként (0x00 a legtöbb platformon). Következésképpen a címketípusának NULL nulla volt, így a visszatérési értéke typeof fiktív. ()

A korrekciót az Ecmascript (leállításon keresztül) megkérdezték, de elutasították. Ez arra a tényre vezetne, hogy a NULL \u003d\u003d\u003d "NULL" típus.

Az új üzemeltető használata

// Az "Új" használatával létrehozott összes funkciótervezõ lesz a "Object" var string \u003d új karakterlánc ("string"); var num \u003d új szám (100); Typeof str; // visszatérés "objektum" típusú szám; // vissza fog térni az "Object" //, de van egy kivétel a funkció VAR Func \u003d új funkció () konstruktor; Func típus; // visszatérés "Funkció"

Rendszeres kifejezések

A rendszeres kifejezések nem szabványos kiegészítések voltak néhány böngészőben.

Típus / s / \u003d\u003d\u003d "függvény"; // Chrome 1-12 nem egyezik az ecmascript 5.1 típusú / s / \u003d\u003d\u003d "objektum"; // A Firefox 5+ megfelel az Ecmascript 5.1-nek

Az ideiglenes halott zónákhoz kapcsolódó hibák

Az Ecascript 2015 előtt garantálták, hogy a típusú üzemeltető visszaad egy karakterláncot bármely olyan operandusra, amellyel hívták. Ez megváltoztatta a nem alázatos LET és CONST hirdetések hozzáadása után blokk a láthatóság területén. Most, ha a változókat deklarálni Let és Const, és számukra az úgynevezett typeof az osztályban nyilatkozat egységet, hanem a bejelentés előtt, referencerReError kilökődik. A viselkedés eltér a be nem jelentett változóktól, amelyek esetében a típusok "nem definiáltak". A láthatóságú blokkterületű változók az "ideiglenes halott zónában" vannak, amelyek a blokk elejétől a változók nyilatkozatáig tartanak. Ebben a zónában a változókhoz való hozzáférés kísérletét kivételt dobják ki.

UndeclaredVariable \u003d\u003d\u003d "undefined" típus; NewletVarable típusú; Legyen NewletVarable; // weboldalt újoncstervarable; CONST NewConstVarble \u003d "hello"; // ReferenceError

Kivételek

Minden aktuális böngészőben van egy nem szabványos dokumentum.all host objektum, amely meghatározatlan.

Dokumentum typeof.All \u003d\u003d\u003d "undefined";

Bár a specifikáció lehetővé teszi saját típusú típusát a nem szabványos egzotikus objektumok esetében, meg kell adni, hogy ezek a nevek eltérjenek az előre definiált. A dokumentum, amikor a dokumentumot meghatározta, a szabályok kivételes megsértése a szabályok.

Előírások

Leírás Állapot Hozzászólások
Ecmascript legújabb tervezet (ECMA-262)
Tervezet
ECMASSCRIPT 2015 (6. kiadás, ECMA-262)
Meghatározás "A típusú üzemeltető" ebben a specifikációban.
Alapértelmezett
Ecmascript 5.1 (ECMA-262)
Meghatározás "A típusú üzemeltető" ebben a specifikációban.
Alapértelmezett
Ecmascript 3. kiadás (ECMA-262)
Meghatározás "A típusú üzemeltető" ebben a specifikációban.
Alapértelmezett
Ecmascript 1. kiadás (ECMA-262)
Meghatározás "A típusú üzemeltető" ebben a specifikációban.
Alapértelmezett Kezdeti meghatározás. A JavaScript 1.1

Kompatibilitás a böngészőkkel

Frissítse a kompatibilitási adatokat a Githubon

SzámítógépekMobilszerver
Króm.Él.Firefox.Internet böngésző.Opera.Szafari.Android webview.Chrome az Android számáraFirefox az Android számáraOpera az Android számáraSzafari az iOS-on.Samsung InternetCsomópont.js.
Típusú.Króm. Teljes támogatás 1 Él. Teljes támogatás 12 Firefox. Teljes támogatás 1 AZAZ Teljes támogatás 3 Opera. Teljes támogatás IgenSzafari. Teljes támogatás IgenWebview Android Teljes támogatás 1 Chrome Android Teljes támogatás 18 Firefox Android Teljes támogatás 4 Opera Android Teljes támogatás IgenSzafari ios. Teljes támogatás IgenSamsung Internet Android Teljes támogatás 1.0 nodejs. Teljes támogatás Igen

Legenda

Teljes támogatás Teljes támogatás

IE-specifikus fogalmak

Az IE 6, 7 és 8, sok gazda objektum objektum, de nem jellemző. Például.

A típusok dinamikus azonosítása

Dinamikus típusazonosítás (RTTI) Lehetővé teszi, hogy meghatározza az objektum típusát a program végrehajtása során. Számos okból hasznos lehet. Különösen az alaposztályra való hivatkozással lehetséges, hogy pontosan meghatározzák az e linken elérhető objektum típusát. A típusok dinamikus azonosítása lehetővé teszi továbbá, hogy előzetesen ellenőrizzék, hogy a sikeres milyen sikeres lesz a típusok típusának eredménye, megakadályozza az exkluzív helyzetet a típusok helytelen megtekintésével kapcsolatban. Ezenkívül a típusok dinamikus azonosítása a visszaverődés fő összetevője.

A C # típusok dinamikus azonosításának támogatása érdekében három kulcsszó van megadva: az, mint a típusú. Ezen kulcsszavak mindegyike tovább fordul.

Az üzemeltető.

Az adott objektum típusát az üzemeltető segítségével lehet meghatározni. Az alábbiakban a következő formája:

a típus kifejezés

ahol az expresszió egy külön kifejezést jelent, amely leírja azokat az objektumot, amelynek típusát ellenőrizzük. Ha az expresszió kompatibilis vagy ugyanolyan típusú, mint az ellenőrzött típus, ennek a műveletnek az eredménye igaz, ellenkező esetben hamis. Így az eredmény igaz, ha az expresszió egy formában vagy más formában ellenőrizhető típusú. Az IS típusú nyilatkozatban mindkettőt kompatibilisnek kell tekinteni, ha azonos típusúak, vagy ha referencia-átalakítás, csomagolás vagy kicsomagolás biztosított.

Az alábbiakban egy példa a kezelő használatára:

Rendszer használata; Névtér ConsoleApplication1 (Class Add () osztály Összeg: Add () osztály Program (static void main () (Add a \u003d new Add (); SUM S \u003d new sum (), ha (a IS) felvétele Console.WriteLine ( "változó A Hozzáadás: "); ha (S jelentése) konzol.Writeline (" Az S változó típusa öröklődik az AD "osztályból"); konzol.readline ();)

Operátor

Néha a végrehajtás során a típusváltás szükséges, de ne hozzon létre kivételt, ha az átalakítás eredménye sikertelen lesz, ami a típusok megadásakor meglehetősen lehetséges. Ebből a célból az üzemeltetőnek a következő alakja van:

típus kifejezés

amennyiben az expresszió egy külön expressziót jelöl, amelyet a megadott típusra átalakítanak.

Ha az ilyen konverzió eredménye sikeres lesz, akkor a típushoz tartozó hivatkozás visszaküldik, és egyébként üres link. A Mint operátor csak a linkek, az identitás, a csomagolás, a kicsomagolás átalakítására használható. Bizonyos esetekben a mint operátor kényelmes alternatívát jelenthet az üzemeltetőnek. Példaként tekintse meg a következő programot:

Rendszer használata; Névtér ConsoleApplication1 (Class Add () osztály Összeg: Add () osztály Program (static void main (); SUM S \u003d new sum (); // végre az A \u003d S hirdetést, ha (A! \u003d NULL) Console.WriteLine ("A konverzió sikeres"); más konzol.writeline ("hiba konvertálás"); konzol.readline ();))))))

A program eredménye sikeres konverzió lesz.

a \u003d (b\u003e 0) && (c + 1! \u003d d); Flag \u003d! (Állapot \u003d 0);

14.5. Táblázat. Logikai üzemeltetők

Kezelő leírása

! Nem (logikai inverzió)

&& És (logikai szorzás)

|| Vagy (logikai kiegészítés)

14.6. Táblázat. Az üzemeltetők végrehajtásának eredményei és vagy

Operand 1.

Operand 2.

14.7. Táblázat. Az üzemeltető végrehajtásának eredményei nem

A fogadó üzemeltető típusa

Írja be az átvételi szolgáltatóta Typeof visszaadja az operandumok típusát leíró karakterláncot. Operand, amelynek típusát kell tudni, az üzemeltető után helyezkednek el, és zárójelekbe kerülnek:

s \u003d típus ("str");

Ennek a kifejezésnek a végrehajtása következtében az S változóban egy karakterlánc "karakterlánc" lesz, amely egy stringtípust jelöl.

Minden olyan érték, amelyet a TypeFer üzemeltető visszatérhet a táblázatban. 14.8.

14.8. Táblázat. A típusú üzemeltető által visszaküldött értékek

Adattípus

Visszatérő vonal

Húr

Számszerű

14.8. Táblázat (vége)

Adattípus

Visszatérő vonal

Logikus

Kompatibilitás és adattípus konverzió

Itt az ideje, hogy fontoljon két fontosabb kérdést: az adattípusok összeegyeztethetősége és az egyik típus konvertálása a másikra.

Mi történik, ha összecsukott két numerikus érték? Ez a helyes - egy másik numerikus érték. És ha a számot és a karakterláncot hajtja végre? Nehéz megmondani ... Itt a JavaScript szembesül az adattípusok összeegyeztethetetlenségének problémájával, és megpróbálja ezeket a típusokat kompatibilisvé tenni, átalakítja az egyiket a másikba. Először is megpróbálja átalakítani a számot a számra, és ha kezeli, elvégzi a kiegészítést. Hiba esetén a szám átalakul a karakterláncba, és a kapott két sor kombinálva lesz. Például a webes forgatókönyv végrehajtása következtében a 14.6-os felsorolásból a B változó értékét az A változó hozzáadásakor numerikus típusvá alakítják; Így a C változó 23 értéket tartalmaz.

14.6.

vAR A, B, C, D, E, F; A \u003d 11;

b \u003d "12"; c \u003d A + B;

d \u003d "JavaScript"; E \u003d 2;

De mivel a D változó értéke nem konvertálható számra, az E értéke átalakul a karakterláncba, és az eredmény - az F - értéke egyenlő lesz

A logikai értékeket numerikus vagy karakterláncra alakítják át, az adott esettől függően. Az igazi érték az 1. számra vagy az "1" karakterláncra és a FALSE értékre kerül, 0 vagy "0" értékre. Ezzel szemben az 1-es szám igazra lesz átalakításra, és a 0 szám hamis. Hamisban is átalakulnak

null és meghatározatlan értékek.

III. Rész. Viselkedés weboldalak. Webes forgatókönyvek

Látható, hogy a JavaScript küzd, hogy helyesen helyezze el a helytelenül írott kifejezéseket. Néha kiderül, de gyakrabban működik a tervek szerint, és végül a webes forgatókönyv végrehajtása megszakad a hibás hibás felderítésével kapcsolatban, teljesen helyes nyilatkozaton. Ezért jobb megakadályozni az ilyen eseményeket.

A piaci szereplők prioritása

Az utolsó kérdés, amit itt fogunk nézni, az operátorok elsőbbsége. Mint emlékszem, az elsőbbség befolyásolja az üzemeltetők kifejezést.

Legyen a következő kifejezés:

Ebben az esetben először a B változó értékét hozzáadjuk a C-hez, majd 10 lesz levonva az összegből. Ennek a kifejezésnek az üzemeltetői ugyanolyan prioritással rendelkeznek, és ezért szigorúan balra kell irányulni.

Most vegye figyelembe az ilyen kifejezést:

Itt először a C értékének szorzása 10, és csak akkor a B értéket hozzáadja az eredményhez. A szorzótermelőnek nagyobb prioritása van, mint az addíciós üzemeltető, így a "szigorúan balra" sorrend megszakad.

A megbízóüzemeltetők legalacsonyabb prioritása. Ezért kiszámítják a kifejezést, majd az eredmény egy változóhoz van hozzárendelve.

BAN BEN Általánosságban elmondható, hogy az összes üzemeltető teljesítésének alapelve a következő: az első üzemeltetők magasabb prioritásúak, és csak később alacsonyabbak. Az azonos prioritású operátorokat a sorrendben (balról jobbra) végezzük.

BAN BEN asztal. 14.9 Az általunk vizsgált üzemeltetők a prioritások sorrendjében szerepelnek.

14.9. Táblázat. Az üzemeltetők prioritása (csökkenő sorrendben)

Üzemeltetők

Leírás

++ - - ~! Típusú.

Növekmény, csökkenés, jelváltozás, logikai nem, definíció

Szorzás, divízió, egyensúly megteremtése

Kiegészítés és sor összeolvasztása, kivonás

Az üzemeltetők összehasonlítása

Logikai I.

14. fejezet. Bevezetés a webes programozásba. JavaScript nyelv

14.9. Táblázat (vége)

Üzemeltetők

Leírás

Logikus vagy

Feltételes operátor (lásd alább)

= <оператор>=

Hozzárendelés, egyszerű és összetett

FIGYELEM!

Emlékezzen erre a táblára. Az üzemeltetők hibás eljárása nehéz hibákat okozhat, amelyekben a külsőleg megfelelő kifejezés helytelen eredményt ad.

De mi van, ha meg kell szakítanunk az üzemeltetők végrehajtásának szokásos sorrendjét? Használunk zárójeleket. Egy ilyen zárójelben lévő bejegyzéssel az üzemeltetők először végzik:

a \u003d (B + C) * 10;

Itt először a B és C változók értékeinek hozzáadása befejeződik, majd a kapott mennyiséget megszorozzák 10-vel.

A zárójelben zárt üzemeltetők elsőbbséget élveznek. Ezért a többszörös zárójeleket gyakran használják:

a \u003d ((B + C) * 10 - D) / 2 + 9;

Itt az üzemeltetők ilyen sorrendben kerülnek végrehajtásra:

1. Addíció B és C.

2. A kapott összeg megszorozódása 10.

3. kivonja a D-t a munkából.

4. A 2. különbség megosztása.

5. 9-ben a magánszemélynek.

Ha eltávolítja a zárójeleket:

a \u003d B + C * 10 - D / 2 + 9;

az üzemeltetők végrehajtásának sorrendje:

1. C és 10 szorzás.

2. D-t 2.

3. Add hozzá B és C és 10.

4. Kivonás a kapott mennyiségű magánszedésbőld 2.

5. A kapott 9-et a kapott különbséghez igazították.

Teljesen eltérő eredményt kap, ugye?



Tetszett a cikket? Oszd meg