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épek | Mobil | szerver | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Króm. | Él. | Firefox. | Internet böngésző. | Opera. | Szafari. | Android webview. | Chrome az Android számára | Firefox az Android számára | Opera az Android számára | Szafari az iOS-on. | Samsung Internet | Csomó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 Igen | Szafari. Teljes támogatás Igen | Webview 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 Igen | Szafari ios. Teljes támogatás Igen | Samsung Internet Android Teljes támogatás 1.0 | nodejs. Teljes támogatás Igen |
Legenda
Teljes támogatás Teljes támogatásIE-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?