Contacte

JavaScript Verificați tipul de variabilă. Cum se verifică tipul variabilei în JavaScript. Tipul operatorului de primire

JavaScript. sau Js. (Abreviat) Nu este un limbaj simplu și dezvoltatorii novici nu vor ști imediat despre asta. La început recunosc elementele de bază și totul pare colorat și frumos. Căutați un pic mai profund, JavaScript apare matrice, obiecte, apeluri și tot ce face adesea creierul.

JavaScript este important pentru a verifica corect tipul de variabilă. Să presupunem că doriți să știți dacă o variabilă cu o matrice sau obiect? Cum să verificați corect? În acest caz particular, există trucuri în timpul inspecției și aceasta va fi această intrare. Să continuăm imediat.

Verificarea tipului variabil

De exemplu, trebuie să verificați este o variabilă obiect, o matrice, un șir sau număr. Pentru a face acest lucru, puteți folosi tipul, dar nu va da întotdeauna adevărul și în exemplul de mai jos voi arăta de ce.

Am scris acest exemplu pentru a arăta în mod viu de ce tipul nu este întotdeauna alegerea potrivită.

Var _comprafie \u003d (string: "șir", int: 99, float: 13.555, obiect: (salut: "hi"), matrice: o nouă matrice (1, 2, 3)); // returnați o matrice cu cheile obiectului VAR _OBJKEYS \u003d obiect.keys (_Comprafie); pentru (var i \u003d 0; i<= _objKeys.length - 1; i++) { // выведем в консоль тип каждой переменной console.log(typeof _comparson[_objKeys[i]]); }

Rezultatul executării codului:

Număr de numere Număr Object Object

Dreapta? - Desigur că nu. Există două probleme. Fiecare dintre ele va fi descris în detaliu și sugerată.

Prima problemă: numărul float, ieșire ca număr

Comparație.float nu este un număr și în loc de număr trebuie să fie flotor (un număr de punct plutitor). Acest lucru este fix, puteți crea o funcție de verificare ca în codul de mai jos.

VAR _FLOATNumber \u003d 9.22; var _notfloanumber \u003d 9; Consola.log (izfloat (_floatnumber)); Consola.log (isfloat (_notfloatnumber)); Consola.log (izfloat (")); FUNCȚIA ISFLOAT (N) (numărul de retur (N) \u003d\u003d\u003d N && N% 1! \u003d\u003d 0;)

Funcția ISFLOAT () efectuează verificarea tuturor valorilor numerelor de puncte plutitoare. Este mai întâi verificată dacă variabila este egală n. Numărul (numărul (N) \u003d\u003d\u003d n) și dacă da, atunci se efectuează o altă verificare de validare cu reziduul și dacă există un reziduu, atunci Buleva se întoarce ( adevărat. sau fals) Rezultat (N% 1! \u003d\u003d 0).

În exemplul de mai sus se întoarce adevărat., fals și fals. Prima valoare este pluti.tipul, al doilea nu este - acesta este numărul obișnuit și ultimul șir gol care nu corespunde regulilor.

A doua problemă: matricea a fost determinată ca obiect

În primul exemplu, matricea a fost afișată ca obiect și nu este foarte bun, deoarece uneori trebuie să utilizați acest tip particular și nimic mai mult.

Există mai multe modalități de a verifica variabila pe tipul de matrice.

Prima opțiune (o opțiune bună). Verificați accesoriul de date la matrice utilizând instanța ().

VAR DATA \u003d Array nou ("Bună ziua", "Lumea"); VaS ISARR \u003d instanta de date;

A doua versiune (opțiune bună). Metoda Array.isarray () returnează valoarea booleană, care va depinde de faptul dacă variabila este o matrice sau nu ().

VAR DATA \u003d Array nou ("Bună ziua", "Lumea"); VAR ISARR \u003d Array.Sarray (date);

A treia opțiune (cea mai bună, dar lungă). Pentru comoditate, puteți face astfel funcția. Folosind obiectul, facem. Dacă rezultatul Object.protype.tostring.Call (date) nu este egal cu variabila nu este o matrice ().

VAR DATA \u003d Array nou ("Bună ziua", "Lumea"); Var ISARR \u003d obiect.protype.tostring.call (date) \u003d\u003d ""; Consola.log (ISARR);

Ultimul rezultat sub forma unei funcții convenabile:

Funcție isarray (date) (Return Object.protype.tostring.Call (date) \u003d\u003d "")

Acum puteți apela funcțiile Isarray () și ca argument pentru a seta o matrice sau altceva și pentru a vedea rezultatul.

Postfaţă

Înregistrarea sa dovedit destul de mare decât gândirea inițial. Dar sunt mulțumit de el, pentru că descrie pe scurt și descrie în mod clar dificultățile când verificați variabilele din JavaScript și cum să le obțineți în jurul lor.

Dacă aveți întrebări la stânga - scrieți-le mai jos la această înregistrare. Voi fi fericit să vă ajut.

Operator Tip de. Returnează șirul care indică tipul de operand.

Sintaxă

Operand urmează operatorul de tip:

Tip de. operand.

Parametri

operand. Este o expresie reprezentând un obiect sau primitiv, tipul care trebuie returnat.

Descriere

Următorul tabel prezintă valorile posibile ale tipurilor returnate. Informații suplimentare despre tipuri și primitive sunt pe pagină.

Exemple

// numere Tipul 37 \u003d\u003d\u003d "Număr"; Tipul 3.14 \u003d\u003d\u003d "Număr"; Tipul (42) \u003d\u003d\u003d "Număr"; TypeLOf Math.LN2 \u003d\u003d\u003d "Număr"; Tipul Infinity \u003d\u003d\u003d "Număr"; Tipul Nan \u003d\u003d\u003d "Număr"; // în ciuda faptului că este "nu-a-număr" (nu numără) număr de tip (1) \u003d\u003d\u003d "număr"; // Nu folosiți niciodată această intrare! // String TypeOf "" \u003d\u003d\u003d "șir"; Tipul "BLA" \u003d\u003d\u003d "șir"; Tipul "1" \u003d\u003d\u003d "șir"; // Vă rugăm să rețineți că numărul din interiorul șirului are încă un tip de șngă (TypeOf 1) \u003d\u003d\u003d "șir"; // tastarea va reveni întotdeauna în acest caz șirul de șir (ABC ") \u003d\u003d\u003d" șir "; // Nu folosiți niciodată această intrare! // booleani Tipul adevărat \u003d\u003d\u003d "Boolean"; Tipul fals \u003d\u003d\u003d "Boolean"; Tipul boolean (adevărat) \u003d\u003d\u003d "boolean"; // Nu folosiți niciodată această intrare! // simboluri simboluri Syms () \u003d\u003d\u003d "simbol" simbol ("foo") \u003d\u003d\u003d "simbol" TypeOf simbol.iterator \u003d\u003d\u003d "simbol" // nedefinit nedefinit \u003d\u003d\u003d "nedefinit"; Tipul declaratbutundefinedvariable \u003d\u003d\u003d "nedefinit"; Tipul nedeclaratVariable \u003d\u003d\u003d "nedefinit"; // obiecte de tip (A: 1) \u003d\u003d\u003d "obiect"; // utilizați array.isarray sau obiect.protype.tostring.call // pentru a distinge între obiectele obișnuite și matricea de tip "obiect"; Tipul noului Data () \u003d\u003d\u003d "obiect"; // că conducerea mai mică la erori și probleme. Nu folosi! Tipul noului boolean (adevărat) \u003d\u003d\u003d "obiect"; Tipul numărului nou (1) \u003d\u003d\u003d "obiect"; Tipul șirului nou ("ABC") \u003d\u003d\u003d "obiect"; // funcții de funcții funcția () () \u003d\u003d\u003d "funcția"; Tipul de clasă C () \u003d\u003d\u003d "funcția"; TypeOf Math.sin \u003d\u003d\u003d "funcția";

nUL

// a fost determinată de la nașterea lui JavaScript TypeOf Null \u003d\u003d\u003d "obiect";

În prima implementare a JavaScript, valorile au fost prezentate de un tip de etichetă și o valoare. Tag-ul pentru obiecte a fost 0. Null a fost reprezentat ca un indicator zero (0x00 în majoritatea platformelor). În consecință, tipul de etichetă pentru NULL a fost zero, astfel încât valoarea returnată a tipului este fictivă. ()

Corecția a fost întrebată în ECMAScript (prin oprire), dar a fost respinsă. Acest lucru ar duce la faptul că Tipul Null \u003d\u003d\u003d "Null".

Utilizarea noului operator

// toate funcțiile-designerii create folosind "New" vor avea tipul "obiect" var șir \u003d șir nou ("șir"); var num \u003d număr nou (100); Tipul Str. // returnați "Obiect" TypeLOf Num; // va returna "obiectul" // dar există o excepție pentru funcția var func \u003d constructor nou (); Tipul Func; // return "funcția"

Expresii obisnuite

Numite expresii regulate au fost suplimente non-standard în unele browsere.

TypeOf / S / \u003d\u003d\u003d "Funcție"; // Chrome 1-12 nu se potrivește cu EcMascript 5.1 TypeOf / S / \u003d\u003d\u003d "obiect"; // Firefox 5+ corespunde ECMAScript 5.1

Erori asociate cu zonele moarte temporare

Înainte de ECMAScript 2015, a fost garantat că operatorul de tip TypeOf va returna un șir pentru orice operand cu care a fost numit. Acest lucru sa schimbat după adăugarea anunțurilor non-supuse și CONST cu o zonă de vizibilitate bloc. Acum, dacă variabilele sunt declarate folosind Let și Const, iar pentru ei se numește tipul în unitatea de declarație de clasă, dar înainte de anunțare, ReferenceReError este eliminat. Comportamentul diferă de variabilele nedeclarate pentru care tipof va reveni "nedefinit". Variabilele cu o suprafață de vizibilitate se află în "Zona moartă temporară" care durează de la începutul blocului până la declarația de variabile. În această zonă, o încercare de a accesa variabilele este aruncată o excepție.

Tipul nedeclaratVariable \u003d\u003d\u003d "nedefinit"; Tipul Newletvariable; Lăsați Newletvariable; // ReferenceError TypeOf Newconsvariable; Const nouconsvariable \u003d "salut"; // referencerror.

Excepții

În toate browserele curente există un document non-standard. Toate obiectul gazdă, care are tip undefined.

Tipul de document.all \u003d\u003d\u003d "nedefinit";

Deși specificația permite propriile tipuri de tipuri de obiecte exotice non-standard, este necesar ca aceste nume să difere de predefinit. Situația în care documentul. Tipul nedefinit ar trebui considerat o încălcare excepțională a regulilor.

Specificații

Specificație stare Comentarii
ECMAScript ultimul proiect (ECMA-262)
Proiect
ECMAScript 2015 (ediția a 6-a, ECMA-262)
Definiție "operatorul de tip" în această specificație.
Standard
ECMAScript 5.1 (ECMA-262)
Definiție "operatorul de tip" în această specificație.
Standard
Ecmascript ediția a 3-a (ECMA-262)
Definiție "operatorul de tip" în această specificație.
Standard
Ecmasrcript Prima ediție (ECMA-262)
Definiție "operatorul de tip" în această specificație.
Standard Definiție inițială. Implementat în JavaScript 1.1

Compatibilitate cu browserele

Actualizați datele de compatibilitate pe GitHub

CalculatoareMobilServer
Crom.Margine.Firefox.Internet Explorer.Operă.Safari.Android WebView.Chrome pentru Android.Firefox pentru Android.Opera pentru Android.Safari pe iOS.Samsung Internet.Nod.js.
Tip de.Crom. Suport complet 1 Margine. Suport complet 12 Firefox. Suport complet 1 Adică Suport complet 3 Operă. Suport complet daSafari. Suport complet daWebView Android. Suport complet 1 Chrome Android. Suport complet 18 Firefox Android. Suport complet 4 Opera Android Suport complet daSafari ios. Suport complet daSamsung Internet Android. Suport complet 1.0 nodejs. Suport complet da

Legendă

Suport complet Suport complet

De exemplu, noțiuni specifice

În IE 6, 7 și 8, multe obiecte gazdă sunt obiecte, dar nu caracteristici. De exemplu.

Identificarea dinamică a tipurilor

Identificarea tipului dinamic (RTTI) Vă permite să determinați tipul de obiect în timpul executării programului. Se pare că este utilă din mai multe motive. În special, prin referire la clasa de bază, este posibil să determinați destul de precis tipul de obiect disponibil la această legătură. Identificarea dinamică a tipurilor face, de asemenea, posibilă verificarea în avans cât de succes va rezulta rezultatul tipului de tip, împiedicând situația exclusivă în legătură cu vizualizarea incorectă a tipurilor. În plus, identificarea dinamică a tipurilor este principala componentă a reflecției.

Pentru a sprijini identificarea dinamică a tipurilor în C #, sunt furnizate trei cuvinte cheie: este, ca și tipoul. Fiecare dintre aceste cuvinte cheie este considerat în continuare la rândul său.

Operatorul este.

Tipul specific de obiect poate fi determinat utilizând operatorul este utilizat. Mai jos este forma sa comună:

este expresia tipului

În cazul în care expresia denotă o expresie separată care descrie obiectul al cărui tip este verificat. Dacă expresia are un tip compatibil sau același tip, deoarece tipul a fost verificat, rezultatul acestei operații este adevărat, altfel fals. Astfel, rezultatul va fi adevărat dacă expresia are un tip verificabil într-o formă sau altul. În instrucțiunea de tip este, ambele sunt definite ca fiind compatibile dacă sunt de același tip sau dacă sunt furnizate transformări de referință, ambalare sau despachetare.

Mai jos este un exemplu de utilizare a unui operator este:

Folosind sistemul; NameSpace ConsoleApplication1 (Clasa Adăugați () Suma de clasă: Adăugați () Programul de clasă (Static VOD () (Adăugați a \u003d New Add (); Sum S \u003d Noua sumă (); dacă (A este adăugat) console.Writeline ("variabilă A a fost adăugat "); dacă (s este sum) consolă.writerită (" tipul de variabile s este moștenit din clasa AD "); consola.Readline ();)))

Operator ca.

Uneori, conversia de tip este necesară în timpul executării, dar nu generează o excepție dacă rezultatul acestei conversii va fi nereușit, ceea ce este foarte posibil atunci când tipurile sunt date. În acest scop, operatorul în timp ce are următoarea formă:

ca expresie de tip

unde expresia denotă o expresie separată care este convertită la tipul specificat.

Dacă rezultatul unei astfel de conversii se dovedește a avea succes, atunci link-ul la tipul este returnat și altfel este o legătură goală. Operatorul în calitate de operator poate fi utilizat numai pentru a converti legăturile, identitatea, ambalarea, despachetarea. În unele cazuri, operatorul în calitate de operator poate servi ca o alternativă convenabilă la operatorul este. De exemplu, luați în considerare următorul program:

Folosind sistemul; NameSpace ConsoleApplication1 (Clasa Adăugare () Suma de clasă: Adăugați () Programul de clasă (static VOID principal (); suma s \u003d noua sumă (); // Efectuați anunțul de tip A; dacă (A! \u003d Null) consola.Writeri ("Convertirea a avut succes"); altcineva consola.Writeline ("Eroare convertirea"); consola.Readline ();)))

Rezultatul acestui program va fi o conversie de succes.

a \u003d (b\u003e 0) && (c + 1! \u003d d); Steag \u003d! (Stare \u003d 0);

Tabelul 14.5. Operatori logici

Descrierea operatorului

! Nu (inversiune logică)

&& Și (multiplicare logică)

|| Sau (adăugare logică)

Tabelul 14.6. Rezultatele executării operatorilor și sau sau

Operand 1.

Operand 2.

Tabelul 14.7. Rezultatele executării operatorului nu

Tipul operatorului de primire

Tip operator de primiretipul returnează un șir care descrie tipul de date operand. Operand, tipul de care trebuie să știți sunt plasate după acest operator și intrați în paranteze:

s \u003d Tipul ("Str");

Ca urmare a executării acestei expresii în variabila S va fi un șir "șir", care denotă un tip de șir.

Toate valorile pe care operatorul de tipare le poate returna sunt enumerate în tabel. 14,8.

Tabelul 14.8. Valorile returnate de către operatorul de tip

Tipul de date.

Linia de întoarcere

Şir

Numeric

Tabelul 14.8 (sfârșitul)

Tipul de date.

Linia de întoarcere

Logic

Conversia compatibilității și a tipului de date

Este timpul să luăm în considerare două probleme mai importante: compatibilitatea tipurilor de date și convertirea unui tip la altul.

Ce se întâmplă dacă sunt pliate două valori numerice? Așa este - o altă valoare numerică. Și dacă pliați numărul și șirul? Este greu de spus ... Aici JavaScript se confruntă cu problema incompatibilității tipurilor de date și încearcă să facă aceste tipuri compatibile, transformând unul la altul. În primul rând, încearcă să transforme un rând la număr și, dacă administrează, efectuează adăugarea. În caz de eșec, numărul va fi transformat în șir, iar cele două rânduri obținute vor fi combinate. De exemplu, ca urmare a implementării scenariului web din listă 14.6, valoarea variabilei B atunci când se adaugă din variabila A va fi transformată într-un tip numeric; Astfel, variabila C va conține o valoare 23.

Listarea 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;

Dar, deoarece valoarea variabilei D nu poate fi convertită într-un număr, valoarea E va fi convertită în șir și rezultatul - valoarea F - va deveni egală

Valorile logice sunt convertite fie la numerice, fie în șir, în funcție de cazul specific. Valoarea reală va fi convertită în numărul 1 sau șirul "1", iar valoarea falsă - în 0 sau "0". În schimb, numărul 1 va fi convertit într-adevăr, iar numărul 0 este fals. De asemenea, în fals vor fi transformate

valori nul și nedefinite.

Partea a III-a. Pagini web de comportament. Scenariile web

Se poate observa că luptele JavaScript pentru a efectua corect chiar expresii scrise incorect. Uneori se dovedește, dar mai des funcționează așa cum este planificat și, în cele din urmă, punerea în aplicare a scenariului web este întreruptă în legătură cu detectarea unei erori complet în celălalt loc, pe o declarație absolut corectă. Prin urmare, este mai bine să preveniți astfel de incidente.

Prioritatea operatorilor

Ultima întrebare pe care o vom arăta aici sunt prioritatea operatorilor. După cum ne amintim, prioritatea afectează ordinea în care operatorii sunt efectuați în expresie.

Să fie următoarea expresie:

În acest caz, în primul rând la valoarea variabilei B va fi adăugată la C, iar apoi 10 vor fi deduse din sumă. Operatorii acestei expresii au aceeași prioritate și, prin urmare, rulează strict la dreapta.

Acum, luați în considerare o astfel de expresie:

Aici, mai întâi va fi efectuată multiplicarea valorii C cu 10 și numai atunci valoarea B va fi adăugată la rezultat. Operatorul de multiplicare are o prioritate mai mare decât operatorul de adăugare, astfel încât ordinea "strict lăsată la dreapta" va fi întreruptă.

Cea mai mică prioritate pentru operatorii de atribuire. Acesta este motivul pentru care expresia în sine este calculată și apoi rezultatul este atribuit unei variabile.

ÎN În general, principiul de bază al îndeplinirii tuturor operatorilor este după cum urmează: Primii operatori sunt efectuați cu o prioritate mai mare și numai operatorii mai târziu cu mai mici. Operatorii cu aceeași prioritate sunt efectuate în ordinea lor (de la stânga la dreapta).

ÎN masa. 14.9 Operatorii studiați de noi sunt enumerați în ordinea priorităților lor.

Tabelul 14.9. Prioritatea operatorilor (în ordinea descrescătoare)

Operatori

Descriere

++ - - ~! Tip de.

Increment, decrement, schimbare semn, logic, definiție

Multiplicare, diviziune, luând un echilibru

Adăugarea și fuziunea rândului, scăderea scăderii

Comparația operatorilor

Logic I.

Capitolul 14. Introducere în programarea web. Limba JavaScript.

Tabelul 14.9 (sfârșitul)

Operatori

Descriere

Logical sau

Operator condiționat (vezi mai jos)

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

Cesiune, simplă și complexă

ATENŢIE!

Amintiți-vă de această masă. Procedura incorectă pentru operatorii performanți poate provoca erori dificile în care expresia externă absolut corectă oferă un rezultat incorect.

Dar dacă trebuie să distrugem ordinea obișnuită de execuție a operatorilor? Folosim paranteze. Cu o astfel de intrare închisă în paranteze, operatorii sunt executați mai întâi:

a \u003d (b + c) * 10;

Aici, mai întâi, adăugarea de valori ale variabilelor B și C va fi finalizată și apoi suma rezultată va fi înmulțită cu 10.

Operatorii anexați în paranteze sunt, de asemenea, supuse priorității. Prin urmare, mai multe paranteze sunt adesea utilizate:

a \u003d ((b + c) * 10 - d) / 2 + 9;

Aici operatorii vor fi efectuați într-o astfel de secvență:

1. Adăugarea B și C.

2. Înmulțirea sumei primite cu 10.

3. Scade D din muncă.

4. Divizia unei diferențe pentru 2.

5. ADAMENTUL 9 LA PRIVAT.

Dacă eliminați paranteze:

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

ordinul de execuție a operatorilor va fi:

1. Multiplicarea C și 10.

2. Împărțirea D la 2.

3. Adăugarea B și lucrările C și 10.

4. Scăderea din suma primită de privat din diviziuned 2.

5. A ajustat 9 la diferența obținută.

Se pare un rezultat complet diferit, nu?



Ți-a plăcut articolul? Împărtășește-l