JavaScript. Podatkovni tipi in operatorji. Podatkovni tipi Javascript nastavijo vrsto spremenljivke

Spremenljivka je poimenovana pomnilniška lokacija, v katero lahko shranite nekaj informacij in jih iz nje pridobite.

Deklariranje (ustvarjanje) spremenljivk poteka s ključno besedo var.

// sporočilo - ime spremenljivke var sporočilo;

Ko ustvarite spremenljivko, ji lahko takoj dodelite vrednost.

Dodeljevanje vrednosti spremenljivki poteka z uporabo operatorja “=”.

// ustvarite na primer spremenljivo e-pošto in ji dodelite niz " [e-pošta zaščitena]"var email = " [e-pošta zaščitena]"; // nastavi spremenljivko elektronske pošte na novo vrednost email = " [e-pošta zaščitena]";

Če želite pridobiti vrednost spremenljivke, jo preprosto navedite po imenu.

// na primer izpiši vrednost spremenljivke email v konzolo brskalnika: console.log(email);

Če želite deklarirati več kot eno spremenljivko z eno ključno besedo var, morate uporabiti vejico.

Var cena = 78,55, količina = 10, sporočilo;

JavaScript je dinamično ali šibko tipiziran jezik. To pomeni, da ko je spremenljivka deklarirana, ji ni treba podati podatkovnega tipa, ki ga lahko sprejme. Zato lahko v spremenljivko najprej postavite vrednost enega podatkovnega tipa in nato drugega.

Var izhod = "uspeh"; // spremenljivka ima podatkovni tip niz output = 28; // ista spremenljivka, vendar že podatkovnega tipa “število” output = true; // ista spremenljivka, vendar že shranjuje logično vrednost

Vrednost spremenljivke lahko spremenite neomejeno število krat.

// ustvarjena je spremenljivka starost var age; // spremenljivki starosti je dodeljena vrednost 67 starost = 67; // spremenljivka age je nastavljena na "Upokojitvena starost" age = "Upokojitvena starost"; // spremenljivka starost je nastavljena na 55 starost = 55;

Dobra praksa pri razvoju odjemalskih aplikacij je uporaba samo enega tipa podatkov v dani spremenljivki, tj. Ne zapisujte vrednosti različnih tipov podatkov v spremenljivko. Da bi razumeli, kakšno vrsto podatkov je treba pričakovati v spremenljivki, je pri ustvarjanju spremenljivke priporočljivo, da jo takoj inicializirate z določeno vrednostjo.

Ime spremenljivke je lahko sestavljeno iz črk, številk in simbolov $ in _. V tem primeru prvi znak spremenljivke ne sme biti številka. Poleg tega ne morete uporabiti rezerviranih besed kot imena spremenljivk.

// ustvarjanje dveh spremenljivk, prva spremenljivka se imenuje phone, druga pa meassage; var telefon, sporočilo;

Pomembna je velikost črk v imenu spremenljivke. To pomeni, da sta na primer spremenljivki phone in Phone dve različni spremenljivki.

Če strogi način ni uporabljen, lahko ustvarite spremenljivko z začetno vrednostjo brez ključne besede var.

Cena = 250,00; // ustvarili spremenljivko in jo inicializirali s številom 250,00 odstotkov = "20%"; // ustvarili spremenljivko in jo inicializirali z nizom “20%”

Toda ustvarjanje spremenljivk na ta način ni priporočljivo.

Vrste podatkov

V JavaScriptu lahko tipe podatkov razdelimo na primitivne in objektne.

Spremenljivke, ki vsebujejo primitivne tipe podatkov, eksplicitno shranijo svojo vrednost.

V JavaScriptu obstaja 5 primitivnih vrst podatkov:

  • število;
  • vrvica;
  • logični tip (boolean);
  • nič;
  • nedoločeno.

Če je eni spremenljivki dodeljena vrednost druge spremenljivke, ki vsebuje primitivni podatkovni tip, bo prejela lastno kopijo te vrednosti.

Var x = 77, y = x; x = 55; y; // 77

Spremenljivke, ki vsebujejo objekt, dejansko ne shranjujejo samega predmeta, temveč referenco nanj.

Če je eni spremenljivki dodeljena vrednost druge spremenljivke, ki vsebuje objekt (povezavo do njega), potem bo tudi prejela povezavo do njega. Kot rezultat te operacije bosta ti dve spremenljivki vsebovali sklic na isti objekt.

// primer 1 (s podatkovnim tipom "object") var coord1 = (x: 77, y: 100), coord2 = coord1; coord1.x = 55; // nastavi lastnost x objekta na novo vrednost coord2.x; // 55, ker coord1 in coord2 vsebujeta sklic na isti objekt // primer 2 (s podatkovnim tipom polja) var coord1 = , coord2 = coord1; coord1 = 55; // nastavi element z indeksom 0 na novo vrednost coord2; // 55, ker coord1 in coord2 vsebujeta sklic na isti objekt // primer 3 (s podatkovnim tipom "date") var date1 = new Date(2018,00,01), date2 = date1; datum2 = datum2.setDate(datum2.getDate()+7); // povečaj datum za 7 dni date1; // 01.07.2018, ker datum1 in datum2 vsebujeta sklic na isti objekt

številka

Številski podatkovni tip v JavaScriptu je splošen. Uporablja se za predstavitev celih števil in ulomkov.

Var int = 5; // celo število var float = 5,98; // delno število

Format za predstavitev števil v JavaScriptu je v skladu s standardom IEEE 754-2008.

Cela števila v JavaScriptu je mogoče določiti ne samo v decimalni sistemštevilskem sistemu, ampak tudi v osmiškem (0) ali šestnajstiškem številskem sistemu (0x) z uporabo predpon, navedenih v oklepajih:

Var int = 010; // 8 int = 055; // 45 int = 0xFF; //255 int = 0xB8; // 184

Številke je mogoče zapisati v eksponentni obliki:

Sprem. št. = 2e3; // eksponentni zapis števila 2*10^3 (2000) num = 2e-3; // eksponentni zapis števila 2*10^-3 (0,002) num = 3,2e3; // 3200 num = 1,5e-2; // 0,015

Številski podatkovni tip vsebuje poleg števil tudi posebne številske vrednosti:

  • Neskončnost (pozitivna neskončnost);
  • -Neskončnost (negativna neskončnost);
  • NaN (ni številka).

Posebna vrednost Infinity pomeni zelo veliko pozitivno število, tj. število, ki ga ni mogoče predstaviti v JavaScriptu, ker je preveliko.

Posebni pomeni -Neskončnost pomeni, nasprotno, zelo veliko negativno število, tj. število, ki ga JavaScript ne more predstaviti, ker je tudi preveliko.

Primer izrazov, ki bodo kot rezultat izračuna vrnili posebne številske vrednosti:

5/0; // Neskončnost -5/0; // -Infinity Math.pow(10,399); // Neskončnost (10 na potenco 399) Math.pow(10,399); // -Neskončnost (-10 na potenco 399)

Vrednost NaN je vrnjena kot rezultat izvajanja matematičnih operacij, ki jih JavaScript ne more izračunati.

5 - "Živjo"; // NaN (odštejte vrstico od števila 5) 1000 / "20px"; // NaN (število deljeno z nizom) true * "1rem"; // NaN (logična vrednost true, pomnožena z nizom)

Zelo zanimivo je, da vrednost NaN v JavaScriptu ni enaka ničemur, vključno s samim seboj.

NaN == NaN; // napačno NaN === NaN; //false

Logični podatkovni tip

Boolean je primitivni podatkovni tip, ki ima samo dve vrednosti: true in false.

Var a = res; var b = false;

Vrvica

Niz je podatkovni tip, ki se v JavaScriptu uporablja za predstavitev besedila.

Niz JavaScript je lahko sestavljen iz 0 oz več znakov.

JavaScript vedno uporablja Unicode kot svojo obliko niza.

Ustvarjanje niza (string literal) poteka tako, da besedilo zapremo v enojno oz dvojni narekovaji.

"JavaScript"; "ECMAScript";

V JavaScriptu ni razlike med enojnimi in dvojnimi narekovaji.

Toda v nekaterih primerih je smiselno uporabiti enojne narekovaje namesto dvojnih in obratno.

Na primer, ko niz vsebuje dvojne narekovaje, je bolj priročno, da ga obdate z enojnimi narekovaji. To bo odpravilo potrebo po izogibanju dvojnim narekovajem v njem.

"ECMAScript"; // brez ubežanja (z uporabo enojnih narekovajev) "\"ECMAScript\""; // z uhajanjem

Niz v JavaScriptu lahko vsebuje posebne znake. Na primer \n (pomik v vrstico), \t (zavihek), \r (povratek na začetek vrstice) itd.

"To je stavek.\nIn tudi to je stavek, vendar se bo začel v novi vrstici.";

Z nizi lahko izvedete operacijo seštevanja (združevanja) ali z drugimi besedami veriženja. Za to se uporablja operator "+". Pomen te operacije je pripenjanje druge vrstice na konec prve.

"Všeč mi je" + "JavaScript"; // Obožujem JavaScript

Vrednost je "nedefinirano"

undefined je poseben primarni podatkovni tip, ki ima eno samo vrednost, enako nedefined.

Ta podatkovni tip ima deklarirano spremenljivko, ki ji še ni bila dodeljena vrednost.

Var num; // nedoločeno

Vrednost undefined bo vrnjena tudi pri dostopu do neobstoječe lastnosti predmeta.

Var obj = (); // prazen objekt obj.prop; // nedoločeno

"null" vrednost

null je poseben primitivni podatkovni tip, ki ima eno samo vrednost enako null.

null je le posebna vrednost, ki ima pomen "nič" ali "neznana vrednost", tj. očitno nič ne pomeni.

Objekt

Objekt je podatkovna struktura, sestavljena iz parov ime-vrednost.

Ustvarjanje predmeta z zapisom dobesednega objekta se izvede na naslednji način:

( ime_1: vrednost_1, ime_2: vrednost_2, ime_3: vrednost_3, ... )

Kot lahko vidite, je ime ločeno od vrednosti z dvopičjem, pari pa so ločeni drug od drugega z vejico.

Poleg tega, če je vrednost para funkcija, potem se imenuje metoda tega predmeta. Vsi ostali pari, tj. pari, v katerih funkcija ni uporabljena kot vrednost, se imenujejo lastnosti objekta.

Z drugimi besedami, objekt je podatkovna struktura, sestavljena iz lastnosti in metod.

Var oseba = ( ime: "Vitaly", starost: 27, getAge: funkcija () ( return "Starost: " + this.age; ) )

Dostop do lastnosti predmeta poteka s piko ali z uporabo zapisa v oklepajih.

// prikaži vrednost lastnosti starosti v konzoli brskalnika // 1. metoda (preko pike) console.log(person.age); // Metoda 2 (z uporabo oklepajev) console.log(person["age"]); // pokliči metodo getAge; vrednost, ki jo vrne, bo prikazana na konzoli console.log(person.getAge());

tip operaterja

Operator typeof se uporablja za pridobitev informacij o podatkovnem tipu izraza kot niza.

Sintaksa operatorja typeof (možnost brez oklepajev):

Vrsta izražanja

Sintaksa tipa operatorja (z uporabo oklepajev):

Vrsta(izraz)

Var name, age = 37, email = " [e-pošta zaščitena]", isLicense = true, interest: null, lastExperience: ( obdobje: "junij 2011 - junij 2018", kraj: "ISACA, Moskva", položaj: "spletni oblikovalec"), getExperience: function() ( return lastExperience.period + " ("+ lastExperience.position + " - " + lastExperience.place + ")"; ); typeof name; // "nedefined" typeof age; // "number" typeof isLicense; // "boolean" typeof interest; / / "object" (1) typeof lastExperience; // "object" typeof getExperience; // "function" (2) /* (1) je hrošč, ki je prisoten v jeziku od njegove prve implementacije; ni bil popravljeno, da se ohrani združljivost, in to je treba upoštevati pri pisanju skriptov; null je primitiven podatkovni tip, ni objekt */ /* (2) - zelo priročno je, da operator typeof loči funkcije ločeno; vendar funkcija v JavaSciptu je tudi objekt; to je mogoče enostavno preveriti z izvedbo naslednje konstrukcije: */ typeof getExperience.__proto__.__proto__ // "objekt" (prototip funkcije je objekt)

Konstante

Z izdajo ECMAScript 6 je postalo mogoče ustvariti konstante. To se naredi s ključno besedo const.

Const COLOR_RED = "#ff0000";

Konstanta je spremenljivka, katere vrednost je zaščitena pred spremembami. Tisti. Ko poskusite spremeniti vrednost, se prikaže napaka.

Const COLOR_RED = "#ff0000"; COLOR_RED = "#f44336"; // Uncaught TypeError: dodelitev konstantni spremenljivki.

Če na primer konstanta vsebuje objekt, potem ga ni mogoče spremeniti, oziroma sklicevanja nanj. Toda lastnosti tega predmeta je mogoče spremeniti.

Const COLORS = (rdeča: "#ff0000", zelena: "#00ff00", modra: "#00ff00" ) BARVE = ["#ff0000","#00ff00","#00ff00"]; // Uncaught TypeError: dodelitev konstantni spremenljivki. COLORS.green = "#4caf50";

Tipi podatkov pomagajo zgraditi klasifikacijo podatkov v programskih jezikih. Na primer, številka in niz znakov sta različni vrsti podatkov, ki ju bo JavaScript različno obravnaval.

To je pomembno, ker lahko vsak tip podatkov prevzame določene vrednosti in izvede določena dejanja. Da bi lahko izvajali operacije na spremenljivkah v JavaScriptu, je pomembno razumeti vrsto podatkov vsake dane spremenljivke.

Ta vadnica vam bo predstavila vrste podatkov JavaScript.

Opomba: Informacije v tem priročniku niso izčrpne, vendar vam bodo dale pregled osnovnih možnosti JavaScript.

Dinamično tipkanje

JavaScript je dinamičen jezik. To pomeni, da se preverjanje vrste podatkov izvede v času izvajanja, ne v času prevajanja.

V dinamičnih jezikih se lahko za shranjevanje uporabljajo spremenljivke z istim imenom različni tipi podatke.

Na primer, spremenljivka t, definirana s ključno besedo var, lahko shrani različne vrste podatkov; lahko ga tudi inicializiramo, vendar pustimo nedoločenega:

var t = 16; // t je število
var t = "Tereza"; // t je niz
var t = res; // t je logična vrednost
var t; // t je nedefiniran

Vse spremenljivke t vsebujejo različne vrste podatkov JavaScript. V JavaScriptu vam ni treba izrecno podati podatkovnega tipa spremenljivke, preden jo uporabite.

Številke

JavaScript ima en sam numerični podatkovni tip, ki ne razlikuje med celimi števili in števili s plavajočo vejico. Zato lahko številke v JavaScriptu zapišemo z ali brez decimalnih mest:

var št.1 = 93;
sprem. št.2 = 93,00;

V zgornjem primeru obe spremenljivki vsebujeta številki, ne glede na to, ali je vejica ali ne.

Znanstveni zapis v JavaScriptu vam omogoča, da skrajšate zelo velika ali majhna števila:

var št.3 = 987e8; // 98700000000
var št.4 = 987e-8; // 0,00000987

V JavaScriptu velja, da so številke natančne do 15 števk. To pomeni, da bodo številke po dosegu 16. mesta zaokrožene:

var št.5 = 999999999999999; // ostane kot 999999999999999
var št.6 = 9999999999999999; // zaokroženo na 10000000000000000

Poleg tega imajo številke v JavaScriptu tri simbolne pomene:

Neskončnost - številčna vrednost, kar je pozitivno število, ki se približuje neskončnosti.

Neskončnost je številska vrednost, ki predstavlja negativno število, ki se približuje neskončnosti.

NaN – Not-a-Number, posebno stanje števila s plavajočo vejico.

Infinity in -Infinity sta vrnjena pri štetju števila, ki presega največje možno število, ki je na voljo v JavaScriptu. Pojavijo se tudi pri štetju nedefiniranih vrednosti, kot je deljenje z ničlo:

var št.7 = 5 / 0; //Neskončnost
var num8 = -5 / 0; // -Neskončnost

Tehnično se neskončnost vrne, če je število večje od 1,797693134862315E+308, kar je zgornja meja v JavaScriptu.

Podobno se prikaže -Infinity, ko število preseže spodnjo mejo, -1,797693134862316E+308.

Neskončno število se lahko uporablja tudi v zankah:

medtem ko (num9 != neskončnost) (
// Koda se bo tukaj izvajala skozi num9 = Infinity
}

Za nedefinirana števila se natisne NaN. Če poskusite izvesti matematično operacijo s številom in neštevilsko vrednostjo, boste dobili NaN. Na primer:

var x = 20 / "Morski pes"; // x bo NaN

Ker 20 ni mogoče deliti z nizom Shark, bo vrednost x NaN.

Če pa je niz mogoče ovrednotiti kot številsko vrednost, bo JavaScript ovrednotil matematični izraz:

var y = 20 / "5"; // y bo 4

Ker lahko JavaScript obravnava 5 kot številsko vrednost, bo 5 delovalo z matematičnim operaterjem deljenja.

Če je ena spremenljivka v izrazu nastavljena na NaN, bo rezultat NaN, tudi če je drugi operand število.

var a = NaN;
var b = 37;
var c = a + b; // c bo NaN

Torej je v JavaScriptu samo en številski podatkovni tip. V JavaScriptu ni potrebe po ločevanju števil na cela števila in števila s plavajočo vejico, ker je JavaScript dinamičen jezik.

Strune

Niz je zaporedje enega ali več znakov (črk, številk in drugih simbolov). Nizi predstavljajo besedilne podatke.

V JavaScriptu so nizi v enojnih in dvojnih narekovajih. Če želite ustvariti niz, morate zaporedje znakov dati v narekovaje:

var singleQuotes = "To je niz v enojnih narekovajih.";
var doubleQuotes = "To je niz v dvojnih narekovajih.";

Uporabite lahko enojne ali dvojne narekovaje, vendar morate znotraj iste kode dosledno uporabljati eno vrsto narekovajev.

Program "Pozdravljen, svet!" prikazuje, kako se nizi uporabljajo v računalniškem programiranju. V bistvu v v tem primeru niz je zaporedje znakov, ki sestavlja stavek "Hello, World!" v opozorilu().





funkcija helloFunction() (
opozorilo ("Pozdravljen, svet!");
}



Kliknite me



Če zaženete kodo in kliknete gumb Klikni me, boste videli pojavno okno z besedilom:

Tako kot druge vrste podatkov lahko tudi nize shranimo v spremenljivke.

var hw = "Pozdravljen, svet!";

Nato lahko prikažete niz s klicem spremenljivke:

...

var hw = "Pozdravljen, svet!";
funkcija helloFunction() (
opozorilo(hw);
}

...
Pozdravljen, svet!

Nizi omogočajo prenos informacij do uporabnika in nazaj v program.

Logični podatkovni tip

Podatkovni tip Boolean (ali Boolean) je sestavljen iz dveh vrednosti - true in false.

Ta vrsta se uporablja za predstavitev resničnih vrednosti, povezanih z logiko in algoritmi v računalništvu.

Opomba: ta tip podatkov je poimenovan po matematiku Georgeu Boolu.

Številne operacije v matematiki dajejo rezultate, ki jih je mogoče ovrednotiti kot resnične ali napačne:

Več kot:

  • 500 > 100 drži
  • 1 > 5 napačno

Manj kot:

  • 200 < 400 true
  • 4 < 2 false
  • 5 = 5 drži
  • 500 = 400 napačno

Tako kot druge vrste je tudi logični podatkovni tip mogoče shraniti v spremenljivke.

var myBool = 5 > 8; // napačno

Ker 5 ni večje od 8, bo myBool napačen.

Ko kodirate v JavaScriptu, se boste seznanili s tem, kako logični podatki delujejo in kako lahko različne funkcije in operacije za vrednotenje resnice spremenijo tok programa.

Nizi

Matrika lahko vsebuje več vrednosti znotraj ene spremenljivke. To pomeni, da lahko shranite seznam vrednosti znotraj matrike in jih ponavljate.

Vsaka vrednost v matriki se imenuje element. Do elementov matrike lahko dostopate z uporabo indeksa.

Nizi so definirani z oglatimi oklepaji.

Niz nizov izgleda takole:

var fish = ["morski pes", "sipa", "klovn", "jegulja"];

Če pokličete spremenljivko fish, boste dobili rezultat:

["morski pes", "sipa", "klovn", "jegulja"]

Nizi so zelo prilagodljiv tip podatkov, ker so spremenljivi: lahko dodajate, odstranjujete in spreminjate vrednosti elementov.

Predmeti

Objekt v JavaScriptu je sestavljen iz parov ključ:vrednost.

Sintaksa predmeta je sestavljena iz parov ključ:vrednost. Predmet je ločen z zavitimi oklepaji na obeh straneh (()).

Pari v objektu so ločeni s presledki:

var sammy = (firstName:"Wally", lastName:"Shark", color:"blue", location:"ocean");

Predmet je lahko zapisan tudi v več vrsticah (to še posebej velja za velike predmete).

var wally = (
ime: "Wally",
priimek: "morski pes",
barva: "modra",
lokacija: "Ocean"
};

Delo z več vrstami podatkov

Vsak program, ki ga ustvarite, bo verjetno vseboval več tipov podatkov, vendar se operacije običajno izvajajo na enem tipu podatkov. matematika se uporablja za števila, rezanje pa za nize.

Z uporabo operatorjev, ki delujejo z vsemi vrstami podatkov (na primer, operater + lahko dodaja številke ali izvaja veriženje nizov), lahko dobite nepričakovane rezultate.

Če ustvarite spremenljivko za veriženje, bo JavaScript vsak element interpretiral kot niz.

var o = "Ocean" + 5 + 3;

Če pokličete spremenljivko o, boste dobili naslednji rezultat:

Če pa niz najprej vsebuje številke in nato niz, bo operater + izvedel seštevanje in nato združevanje:

var p = 5 + 3 + "Ocean";
8Ocean

Ker so rezultati nepredvidljivi, je bolj priročno izvajati operacije in metode v enem samem podatkovnem tipu. Vendar JavaScript ne vrača napak pri mešanju tipov podatkov, kot to počnejo nekateri drugi programski jeziki.

Zaključek

Zdaj ste seznanjeni s podatkovnimi vrstami JavaScript. Vsaka od tukaj navedenih vrst je pomembna pri pisanju programov JavaScript.

Oznake: Spremenljivka je identifikator, ki mu je bila dodeljena vrednost. Do spremenljivke je mogoče dostopati v programu in tako delati z vrednostjo, ki ji je dodeljena.

Sama spremenljivka JavaScript ne vsebuje informacij o vrsti vrednosti, ki bodo v njej shranjene. To pomeni, da lahko s pisanjem na primer niza v spremenljivko kasneje vanjo zapišete številko. Takšna operacija ne bo povzročila napake v programu. Zato se JavaScript včasih imenuje "netipiziran" jezik.

Preden lahko uporabite spremenljivko, jo morate deklarirati s ključno besedo var ali let. Če govorimo o konstanti, se uporablja ključna beseda const. Spremenljivko lahko deklarirate in ji dodelite vrednost brez uporabe teh ključnih besed, vendar tega ni priporočljivo storiti.

Ključna beseda var Pred standardom ES2015 je bila uporaba ključne besede var edina pot deklaracije spremenljivk.

Var. a = 0
Če v tem konstruktu izpustite var, bo vrednost dodeljena nedeklarirani spremenljivki. Rezultat te operacije je odvisen od načina, v katerem se program izvaja.

Torej, če je omogočen tako imenovani strogi način, bo to povzročilo napako. Če strogi način ni omogočen, bo spremenljivka implicitno deklarirana in dodeljena globalnemu objektu. To še posebej pomeni, da bo spremenljivka, ki je implicitno deklarirana v funkciji na ta način, ostala na voljo po zaključku funkcije. Običajno se pričakuje, da spremenljivke, deklarirane v funkcijah, ne presežejo svojega obsega. Videti je takole:

Funkcija notVar() ( bNotVar = 1 //bolje, da tega ne storite) notVar() console.log(bNotVar)
1 se prikaže v konzoli, običajno nihče ne pričakuje takšnega vedenja od programa, izraz bNotVar = 1 ni videti kot poskus deklaracije in inicializacije spremenljivke, ampak kot poskus dostopa do spremenljivke, ki se nahaja v obsegu zunaj funkcijo (to je povsem normalno). Posledično implicitne deklaracije spremenljivk zmedejo tiste, ki berejo kodo, in lahko povzročijo nepričakovano vedenje programa. Kasneje bomo govorili o funkcijah in obsegih, za zdaj pa poskušajte vedno uporabiti specializirane ključne besede, ko je pomen izraza deklarirati spremenljivko. Če je v tem primeru telo funkcije prepisano kot var bNotVar = 1, bo poskus zagona zgornjega fragmenta kode povzročil sporočilo o napaki (lahko ga vidite v konzoli brskalnika).

Na primer, lahko izgleda takole: Uncaught ReferenceError: bNotVar ni definiran. Njegov pomen se zmanjša na dejstvo, da program ne more delovati z neobstoječo spremenljivko. Veliko bolje je videti takšno sporočilo o napaki, ko prvič zaženete program, kot napisati nerazumljivo kodo, ki se lahko obnaša nepričakovano.

Če spremenljivka ob deklaraciji ni inicializirana ali ji ni dodeljena nobena vrednost, ji bo samodejno dodeljena nedefinirana vrednost.

Var. a //typeof a === "nedefinirano"
Spremenljivke, deklarirane s ključno besedo var, je mogoče znova deklarirati večkrat in jim dodeliti nove vrednosti (vendar je to lahko zmedeno za osebo, ki bere kodo).

Var a = 1 var a = 2
V enem izrazu lahko deklarirate več spremenljivk:

Varianta a = 1, b = 2
Obseg spremenljivke je področje programa, v katerem je ta spremenljivka dostopna (vidna).

Spremenljivka, inicializirana s ključno besedo var zunaj funkcije, je dodeljena globalnemu objektu. Ima globalni obseg in je dostopen od koder koli v programu. Če je spremenljivka deklarirana s ključno besedo var znotraj funkcije, potem je vidna le znotraj te funkcije, saj je zanjo lokalna spremenljivka.

Če funkcija, ki uporablja var, deklarira spremenljivko, katere ime je enako kot spremenljivka v globalnem obsegu, bo "preglasila" globalno spremenljivko. To pomeni, da bo pri dostopu do takšne spremenljivke znotraj funkcije uporabljena njena lokalna različica.

Pomembno je razumeti, da bloki (območja kode, zaprta v zavitih oklepajih) ne ustvarjajo novih obsegov. Novo območje vidnost se ustvari, ko je funkcija poklicana. Ključna beseda var ima tako imenovani funkcionalni obseg in ne obseg bloka.

Če je spremenljivka deklarirana v kodi funkcije, je vidna celotni kodi funkcije. Tudi če je spremenljivka deklarirana z uporabo var na koncu funkcijske kode, je do nje mogoče dostopati na začetku kode, saj ima JavaScript mehanizem za dvigovanje spremenljivk. Ta mehanizem "dvigne" deklaracije spremenljivk, ne pa njihovih operacij inicializacije. To je lahko vir zmede, zato naj vam postane navada, da spremenljivke deklarirate na začetku vaše funkcije.

▍Ključna beseda let Ključna beseda let je bila predstavljena v ES2015 in jo na poenostavljen način lahko imenujemo »blok« različica var. Spremenljivke, deklarirane s ključno besedo let, so omejene na blok, stavek ali izraz, v katerem so deklarirane, in na ugnezdene bloke.

Če se sama beseda "naj" ne zdi zelo jasna, si lahko predstavljate, da bi namesto nje uporabili besedo "naj". Potem lahko izraz let color = "rdeča" prevedemo v angleščino na naslednji način: "naj bo barva rdeča", v ruščino pa na naslednji način: "naj bo barva rdeča".

Z uporabo ključne besede let se lahko izognete dvoumnostim, ki prihajajo s ključno besedo var (na primer, ne boste mogli dvakrat deklarirati iste spremenljivke z uporabo let). Uporaba let zunaj funkcije, recimo pri inicializaciji zank, ne ustvari globalnih spremenljivk.

Na primer, ta koda bo ustvarila napako:

Za (naj bo i = 0; i< 5; i++) { console.log(i) } console.log(i)
Če je, ko je zanka inicializirana, števec i deklariran s ključno besedo var, potem bo i na voljo zunaj zanke, ko zaključi svoje delo.

Dandanes je pri razvoju programov JS, ki temeljijo na sodobnih standardih, povsem možno popolnoma opustiti var in uporabljati samo ključni besedi let in const.

▍Ključna beseda const Vrednosti spremenljivk, deklariranih s ključnima besedama var ali let, je mogoče prepisati. Če se namesto teh ključnih besed uporabi const, konstanti, ki je deklarirana in inicializirana z njeno pomočjo, ni mogoče dodeliti nove vrednosti.

Const a = "test"
V tem primeru konstanti a ni mogoče dodeliti nove vrednosti. Vendar je treba upoštevati, da če a ni primitivna vrednost, kot je število, ampak objekt, uporaba ključne besede const tega predmeta ne zaščiti pred spremembami.

Ko rečejo, da je objekt shranjen v spremenljivki, v resnici mislijo, da spremenljivka shrani sklic na objekt. Te povezave ni mogoče spremeniti, lahko pa spremenite sam objekt, do katerega vodi povezava.

Ključna beseda const ne naredi predmetov nespremenljivih. Preprosto ščiti sklice nanje, zapisane v ustreznih konstantah, pred spremembami. Takole izgleda:

Const obj = () console.log(obj.a) obj.a = 1 //deluje console.log(obj.a) //obj = 5 //povzroči napako
Med inicializacijo se v konstanto obj zapiše nov prazen objekt. Poskus dostopa do njegove lastnosti a, ki ne obstaja, ne povzroči napake. Konzola postane nedefinirana. Po tem objektu dodamo novo lastnost in poskusimo znova dostopati do njega. Tokrat je vrednost te lastnosti v konzoli 1. Če odkomentirate zadnjo vrstico primera, bo poskus izvedbe te kode povzročil napako.

Ključna beseda const je zelo podobna besedi let, zlasti ima obseg bloka.

V sodobnih razmerah je povsem sprejemljivo uporabiti ključno besedo const za razglasitev vseh subjektov, katerih vrednosti ni načrtovano spremeniti, pri čemer se zateče k let le v posebnih primerih. Zakaj? Bistvo je v tem, da si je najbolje prizadevati za uporabo čim preprostejših konstrukcij, ki so na voljo, da ne bi zapletli programa in se izognili napakam.

Vrste podatkov JavaScript se včasih imenujejo "netipiziran" jezik, vendar temu ni tako. Res je, da lahko v spremenljivke zapišete vrednosti različnih vrst, vendar v JavaScriptu še vedno obstajajo podatkovni tipi. Zlasti govorimo o primitivnih in objektnih tipih podatkov.

Če želite določiti podatkovni tip vrednosti, lahko uporabite operator typeof. Vrne niz, ki označuje vrsto operanda.

▍Primitivni podatkovni tipi Tukaj je seznam primitivnih podatkovnih tipov JavaScript:
  • število
  • vrvica
  • boolean (boolean vrednost)
  • null (posebna vrednost null)
  • nedefinirano (posebna vrednost nedefinirana)
  • simbol (simbol, uporabljen v posebnih primerih, uveden v ES6)
Tukaj so navedena imena tipov podatkov, kot jih vrne operator typeof.

Pogovorimo se o najpogosteje uporabljenih vrstah podatkov s tega seznama.

Vrsta števila Vrednosti tipa number v JavaScriptu so predstavljene kot 64-bitna števila s plavajočo vejico z dvojno natančnostjo.

V kodi so numerični literali predstavljeni kot cela števila in ulomki v decimalnem številskem sistemu. Za pisanje številk lahko uporabite druge metode. Na primer, če je na začetku številskega literala predpona 0x, se to zazna kot število, zapisano v šestnajstiškem zapisu. Števila lahko zapišemo tudi v eksponentnem zapisu (v takšnih številkah najdemo črko e).

Tukaj so primeri pisanja celih števil:

10 5354576767321 0xCC // šestnajstiško število
Tukaj so ulomki.

3,14 .1234 5,2e4 //5,2 * 10^4
Numerični literali (tako vedenje je značilno tudi za nekatere druge primitivne tipe), ko poskušate dostopati do njih kot do objektov, se med trajanjem operacije samodejno pretvorijo v ustrezne objekte, ki se imenujejo »objektni ovoji«. V tem primeru govorimo o ovoju predmeta Number.

Tukaj je na primer videti poskus dostopa do spremenljivke a, ki vsebuje numerični literal, kot objekta v konzoli Google Chrome.

Namig za ovoj številskega predmeta

Če na primer uporabite metodo toString() objekta tipa Number, bo vrnila nizovno predstavitev števila. Ustrezen ukaz je videti takole, ki ga je mogoče izvesti v konzoli brskalnika (in v običajni kodi) takole:

A.toString()
Upoštevajte dvojne oklepaje za imenom metode. Če jih ne vnesete, sistem ne bo ustvaril napake, ampak boste namesto pričakovanega izpisa v konzoli videli nekaj, kar ni prav nič podobno nizovnemu prikazu števila 5.

Globalni objekt Number se lahko uporablja kot konstruktor, ki z njegovo pomočjo ustvarja nova števila (vendar se skoraj nikoli ne uporablja v tej obliki), lahko pa se uporablja tudi kot neodvisna entiteta, brez ustvarjanja svojih primerkov (to je določenih števil). predstavljen z njegovo pomočjo). Na primer, njegova lastnost Number.MAX_VALUE vsebuje največjo številsko vrednost, ki jo je mogoče predstaviti v JavaScriptu.

Vrsta niza Vrednosti vrste niz so zaporedja znakov. Takšne vrednosti so določene kot nizovni literali, zaprti v enojne ali dvojne narekovaje.

"niz" "še en niz"
Vrednosti nizov je mogoče razdeliti na več delov z uporabo znaka poševnice nazaj.

"A\niz"
Vrstica lahko vsebuje tako imenovana ubežna zaporedja, ki se interpretirajo, ko je vrstica izhodna na konzolo. Na primer, zaporedje \n pomeni znak za novo vrstico. Poševnico nazaj lahko uporabite tudi za dodajanje narekovajev nizom, ki so znotraj istih narekovajev. Ubežanje znaku narekovaja z \ povzroči, da ga sistem ne obravnava kot poseben znak.

"Sem razvijalec"
Nize je mogoče povezati z operatorjem +.

"A" + "niz"

Predlogski literali V ES2015 so se pojavili tako imenovani predlogni literali ali nizi predlog. So nizi, zaprti v povratne narekovaje (`) in imajo nekaj zanimivih lastnosti.

`niz`
Na primer, lahko nadomestite določene vrednosti, ki so rezultat vrednotenja izrazov JavaScript, v literale predloge.

`niz z $(something)` `niz z $(something+somethingElse)` `niz z $(obj.something())`
Uporaba povratnih narekovajev olajša pisanje nizovnih literalov v več vrsticah:

`niz z $(nekaj)`

Logični tip JavaScript ima par rezerviranih besed, ki se uporabljajo pri delu z logičnimi vrednostmi: true in false. Operatorji primerjave, kot so == , === ,< , >, vrne true ali false.

Logični izrazi se uporabljajo v izjavah, kot sta if in while, za pomoč pri nadzoru poteka programa.

Upoštevati je treba, da kjer se pričakuje vrednost true ali false, lahko uporabite druge vrednosti, ki jih jezik samodejno ovrednoti kot true (truth) ali false (false).

Natančneje, naslednje so napačne vrednosti:

0 -0 NaN nedefinirano nič "" //prazen niz
Preostale vrednosti so resnične.

JavaScript tipa null ima posebno vrednost, null, ki označuje odsotnost vrednosti. Podobne vrednosti se uporabljajo v drugih jezikih Tip undefined Vrednost undefined, zapisana določeni spremenljivki, pomeni, da ta spremenljivka ni inicializirana in zanjo ni vrednosti.

Ta vrednost je samodejno vrnjena iz funkcij, katerih rezultati niso izrecno vrnjeni s ključno besedo return. Če funkcija ob klicu sprejme parameter, ki ni podan, je prav tako nastavljen na undefined.

Če želite preveriti vrednost za undefined, lahko uporabite naslednjo konstrukcijo.

Vrsta spremenljivke === "nedefinirano"

▍Predmeti Vse neprimitivne vrednosti so tipa objekta. Govorimo o funkcijah, nizih, tem, čemur pravimo "objekti", in mnogih drugih entitetah. Vsi ti podatkovni tipi temeljijo na tipu objekta in čeprav se med seboj v marsičem razlikujejo, imajo tudi veliko skupnega Izrazi Izrazi so deli kode, ki jih je mogoče obdelati in pridobiti določeno vrednost na podlagi izvedenih izračunov. . V JavaScriptu obstaja več kategorij izrazov.Aritmetični izrazi Ta kategorija vključuje izraze, ki se vrednotijo ​​v števila.

1 / 2 i++ i -= 2 i * 2

Nizovni izrazi Rezultat vrednotenja takih izrazov so nizi.

"A " + "niz" "A " += "niz"

Primarni izrazi V to kategorijo spadajo literali, konstante in reference na identifikatorje.

2 0,02 "nekaj" true false to //kontekst izvajanja, sklicevanje na trenutni objekt nedefinirano i //kjer je i spremenljivka ali konstanta
To vključuje tudi nekatere ključne besede in konstrukte JavaScript.

Funkcija razreda funkcije* //generator donosa //ukaz za premor/nadaljevanje donosa generatorja* //delegiranje drugemu iteratorju ali asinhroni funkciji generatorja* //asinhroni funkcionalni izraz čaka //organizacija čakanja na izvedbo asinhrone funkcije /vzorec /jaz // vsakdanje izražanje() //združevanje

Inicializacijski izrazi za nize in objekte //literal matrike () //literal objekta (a: 1, b: 2) (a: (b: 1)) Logični izrazi Uporaba logičnih izrazov logični operatorji, so rezultat njihovega izračuna logične vrednosti.

A && b a || b!a

Izrazi za dostop do lastnosti Ti izrazi vam omogočajo dostop do lastnosti in metod objektov.

Object.property //klic lastnosti (ali metode) objekta object object["property"]

Izrazi za ustvarjanje objekta new object() new a(1) new MyRectangle("name", 2, (a: 4)) Izrazi za deklaracijo funkcij function() () function(a, b) ( return a * b ) (a, b) => a * b a => a * 2 () => ( return 2 ) Klicni izrazi Takšni izrazi se uporabljajo za klicanje funkcij ali metod objektov.

A.x(2) window.resize()

Delo z objekti Zgoraj smo že naleteli na objekte, ko smo govorili o objektnih literalih, klicanju njihovih metod in dostopanju do njihovih lastnosti. Tukaj bomo podrobneje govorili o objektih, še posebej si bomo ogledali mehanizem prototipnega dedovanja in uporabo ključne besede class.▍Prototipno dedovanje JavaScript med sodobnimi programskimi jeziki izstopa po tem, da podpira prototipno dedovanje . Večina objektno usmerjenih jezikov uporablja model dedovanja na podlagi razreda.

Vsak objekt JavaScript ima posebno lastnost (__proto__), ki kaže na drug objekt, ki je njegov prototip. Objekt podeduje lastnosti in metode prototipa.

Recimo, da imamo predmet, ustvarjen z uporabo literala objekta.

Const car = ()
Ali pa smo ustvarili objekt z uporabo konstruktorja Object.

Const car = new Object()
V katerem koli od teh primerov bo prototip avtomobilskega objekta Object.prototype.

Če ustvarite matriko, ki je tudi objekt, bo njen prototip objekt Array.prototype.

Const list = //ali tako const list = new Array()
To lahko preverite na naslednji način.

Car.__proto__ == Object.prototype //true car.__proto__ == new Object().__proto__ //true list.__proto__ == Object.prototype //false list.__proto__ == Array.prototype //true list.__proto__ == new Array().__proto__ //true
Tukaj smo uporabili lastnost __proto__; ni nujno, da je na voljo razvijalcu, vendar je običajno mogoče dostopati do nje. Treba je opozoriti, da več na zanesljiv načinče želite pridobiti prototip predmeta, uporabite globalno metodo getPrototypeOf(). Objekt.

Object.getPrototypeOf(nov objekt())
Vse lastnosti in metode prototipa so na voljo objektu, ki ima ta prototip. Tukaj je na primer njihov seznam videti za niz.


Namig za niz

Osnovni prototip za vse objekte je Object.prototype.

Array.prototype.__proto__ == Object.prototype
Object.prototype nima prototipa.

Kar smo videli zgoraj, je primer prototipne verige.

Ko poskušate dostopati do lastnosti ali metode objekta, če objekt sam nima takšne lastnosti ali metode, se njihovo iskanje izvede v njegovem prototipu, nato v prototipu prototipa in tako naprej, dokler ni najdena želena lastnost, ali dokler se veriga prototipov ne konča.

Poleg ustvarjanja objektov z uporabo operatorja new in uporabe literalov objekta ali polja lahko ustvarite primerek predmeta z metodo Object.create(). Prvi argument, posredovan tej metodi, je objekt, ki bo prototip predmeta, ki ga ustvari.

Const car = Object.create(Object.prototype)
Z metodo isPrototypeOf() lahko preverite, ali je objekt del verige prototipov drugega predmeta.

Konstantni seznam = Array.prototype.isPrototypeOf(seznam)

Funkcije konstruktorja Zgoraj smo ustvarili nove objekte z uporabo funkcij konstruktorja, ki so že na voljo v jeziku (pri njihovem klicu se uporablja ključna beseda new). Takšne funkcije lahko ustvarite sami. Poglejmo si primer.

Funkcija Person(name) ( this.name = name ) Person.prototype.hello = function() ( console.log(this.name) ) let person = new Person("Flavio") person.hello() console.log( Person.prototype.isPrototypeOf(person))
Tukaj ustvarimo funkcijo konstruktorja. Ob klicu se ustvari nov objekt, kar je označeno s tipko beseda ta v telesu konstruktorja. Temu objektu dodamo lastnost imena in vanj zapišemo, kar je bilo posredovano konstruktorju. Ta objekt se samodejno vrne iz konstruktorja. S funkcijo konstruktorja lahko ustvarite veliko objektov, katerih lastnosti imena bodo vsebovale tisto, kar je bilo posredovano konstruktorju, ko so bili ustvarjeni.

Ko ustvarimo konstruktor, njegovemu prototipu dodamo funkcijo, ki bo na konzolo natisnila vrednost lastnosti name objekta, ustvarjenega s to funkcijo. Vsi objekti, ustvarjeni s tem konstruktorjem, bodo imeli isti prototip in bodo zato uporabljali isto funkcijo hello(). To lahko enostavno preverimo tako, da ustvarimo drug objekt tipa Person in primerjamo njegovo funkcijo hello() s funkcijo objekta, ki že obstaja v primeru (v tem primeru je ime funkcije zapisano brez oklepajev).

▍Razredi V standardu ES6 je JavaScript uvedel koncept »razreda«.

Prej je JavaScript lahko uporabljal samo zgoraj opisani mehanizem prototipnega dedovanja. Ta mehanizem je bil videti nenavaden za programerje, ki so v JS prišli iz drugih jezikov. Zato so se v jeziku pojavili razredi, ki so v bistvu »sintaktični sladkor« za mehanizem dedovanja prototipa. To pomeni, ustvarjeni predmeti tradicionalen način, in predmeti, ustvarjeni z uporabo razredov, imajo prototipe.

Deklaracija razreda Takole izgleda deklaracija razreda.

Razred Oseba ( konstruktor(ime) ( this.name = ime ) hello() ( return "Pozdravljeni, jaz sem " + this.name + "." ) )
Razred ima identifikator, ki ga je mogoče uporabiti za ustvarjanje novih objektov z uporabo novega konstrukta ClassIdentifier().

Ko je ustvarjen nov objekt, se pokliče metoda konstruktorja in vanj se posredujejo parametri.

V razredu lahko deklarirate metode. V našem primeru je hello() metoda, ki jo lahko kličejo vsi objekti, ustvarjeni na podlagi razreda. Tako je videti ustvarjanje novega predmeta z uporabo razreda Person.

Const flavio = nova oseba ("Flavio") flavio.hello()

Razredi dedovanja na podlagi razreda lahko razširijo druge razrede. Objekti, ustvarjeni iz takšnih razredov, bodo podedovali metode izvirnega razreda in metode, navedene v razširjenem razredu.

Če ima razred, ki razširja drug razred (podrazred tega razreda), metodo, katere ime je enako imenu nadrejenega razreda, ima ta metoda prednost pred prvotno.

Razred Programer extends Person ( hello() ( return super.hello() + "Jaz sem programer." ) ) const flavio = new Programmer("Flavio") flavio.hello()
Klic metode hello() v zgornjem primeru bo vrnil niz Hello, I am Flavio. Jaz sem programer.

Razredi ne predvidevajo prisotnosti spremenljivk (lastnosti), lastnosti predmetov, ustvarjenih z uporabo razredov, morajo biti konfigurirane v konstruktorju.

Znotraj razreda lahko do nadrejenega razreda dostopate s ključno besedo super.

Statične metode Metode, opisane v razredu, je mogoče poklicati z dostopom do objektov, ustvarjenih iz razreda, ne pa z dostopom do samega razreda. Statične metode lahko pokličete z neposrednim dostopom do razreda Zasebne metode JavaScript nima vgrajenega mehanizma, ki bi vam omogočal deklaracijo zasebnih metod. To omejitev je mogoče premagati, na primer, z uporabo zapiranj Pridobivalci in nastavljalci Metode v razredu lahko definirate tako, da jim predpono dodate ključne besede get ali set. To vam omogoča, da ustvarite tako imenovane getterje in setterje - funkcije, ki se uporabljajo za nadzor dostopa do lastnosti objektov, ustvarjenih na podlagi razreda. Getter se pokliče, ko poskušate prebrati vrednost psevdo-lastnosti, in setter se pokliče, ko vanj poskušate zapisati novo vrednost.

Razred Oseba ( konstruktor(ime) ( this.userName = ime ) set name(value) ( ​​​​this.userName = vrednost ) get name() ( return this.userName ) )

Povzetek V tem gradivu smo govorili o spremenljivkah, vrstah podatkov, izrazih in delu s predmeti v JavaScriptu. Tema našega naslednjega gradiva bodo funkcije.

Dragi bralci! Če že dolgo pišete v JS, nam povejte, kaj menite o pojavu ključne besede class v jeziku.

V tej vadnici bomo predstavili zelo pomemben koncept - podatkovne vrste JavaScript. Priporočamo, da temu konceptu posvetite veliko pozornost - če ga ne razumete že od samega začetka, se boste morali pogosto soočiti s čudnim vedenjem programa, ki ste ga ustvarili.

Dinamično tipkanje

V delu računalniški programi manipulira z različnimi vrednostmi, od katerih je vsaka lahko obdelana v programskem jeziku in pripada določenemu podatkovnemu tipu.

V JavaScriptu lahko podatkovne tipe razdelimo v dve kategoriji: enostavne (imenovane tudi primitivne) vrste in sestavljene (imenovane tudi reference ali objekt).

JavaScript je šibko tipiziran ali dinamičen programski jezik, ki omogoča definiranje, razčlenjevanje in prevajanje tipov podatkov sproti med izvajanjem programa. To pomeni, da vam ni treba vnaprej določiti vrste spremenljivke. Vrsta bo samodejno določena med izvajanjem programa.
Tako lahko v različnih delih programa ista spremenljivka prevzame vrednosti različnih vrst:

Vrste podatkov

Standard ECMAScript® definira naslednje vrste podatkov:

  • Enostavni (imenovani tudi primitivni) tipi:
    • Boolean - lahko sprejme dve možni vrednosti, včasih imenovani true in false;
    • null – vrednost null predstavlja referenco, ki običajno namenoma kaže na neobstoječ ali nepravilen objekt ali naslov;
    • nedefinirano – označuje vnaprej določeno globalno spremenljivko, inicializirano z nedefinirano vrednostjo;
    • numeric (angleško Number) – številski podatkovni tip v obliki 64-bitnega števila s plavajočo vejico dvojne natančnosti;
    • niz (angleško String) – je zaporedje znakov, ki se uporablja za predstavitev besedila;
    • simbol (eng. Symbol) je podatkovni tip, katerega primerki so edinstveni in nespremenljivi. (novo v ECMAScript 6).
  • Objekt je zbirka poimenovanih vrednosti, običajno imenovanih lastnosti predmeta.
Razlika med primitivnimi in sestavljenimi vrstami

Preden si ogledamo vsak podatkovni tip, se najprej seznanimo z operatorjem typeof. Operator typeof vrne niz, ki opisuje podatkovni tip spremenljivke.
Na naslednjem primeru pokažimo, kako deluje:

Primer skripta deklarira spremenljivke, jih inicializira (dodeli vrednosti) in nato natisne vrsto vsake spremenljivke.

Razlika med primitivnimi in sestavljenimi tipi podatkov se pojavi, ko se njihove vrednosti kopirajo.

Ko je spremenljivki dodeljena vrednost preprostega tipa, se sama vrednost (na primer število) zapiše v spremenljivko. Ko spremenljivki preprostega tipa dodelimo drugi spremenljivki, le-ta kopira vrednost. Posledično bo imela vsaka spremenljivka svojo vrednost in spremembe ene od spremenljivk ne bodo na noben način vplivale na vrednost druge spremenljivke:

Ko spremenljivki dodelimo vrednost sestavljenega (referenčnega) tipa, se v spremenljivko zapiše sklic na vrednost (sklic na objekt). Ko eno spremenljivko (katere vrednost vsebuje sklic na sestavljeno vrednost) dodelimo drugi spremenljivki, se referenca na sestavljeno vrednost kopira. Posledično se obe spremenljivki nanašata na isto sestavljeno vrednost in spremembe v vrednosti ene spremenljivke bodo vplivale na drugo spremenljivko:

Primitivni tipi

Vse vrste podatkov v JavaScriptu, razen objektov, so nespremenljive ali nespremenljive. To pomeni, da njihovih vrednosti ni mogoče spreminjati, temveč le prepisati z novo, drugačno vrednostjo. Na primer, nizov ni mogoče prilagajati znak za znakom - lahko jih le v celoti prepišete. Vrednosti takšnih vrst se imenujejo "primitivne".

Najenostavnejši podatki, s katerimi lahko deluje program, se imenujejo literali. Literali so števila ali nizi, ki se uporabljajo za predstavitev vrednosti v JavaScriptu. Ponujene informacije so lahko zelo raznolike, zato se tudi pomeni razlikujejo različne vrste. Najenostavnejši podatkovni tipi v JavaScriptu se imenujejo osnovni podatkovni tipi: števila, nizi in logične vrednosti. Vsi so razvrščeni kot "primitivni".

Logični (logični) tip "boolean"

Logične ali logične vrednosti (po imenu njihovega izumitelja - Boolean) imajo lahko samo eno od dveh vrednosti: true (true) ali false (false). Vrednote prave ali false se običajno pojavita v primerjalnih ali logičnih operacijah.

Naslednji program ustvari logično spremenljivko in nato preizkusi njeno vrednost s stavkom if/else:

Kot primerjalni izraz se lahko uporabi kateri koli izraz. Vsak izraz, ki vrne 0, nič, nedefinirano ali prazen niz, se interpretira kot false. Izraz, ki podaja katero koli drugo vrednost, se razlaga kot true.

Opomba: Ko zapisujete logične vrednosti, te niso v narekovajih: var myVar = true;
Hkrati deklaracija var myVar = "true" ustvari nizovno spremenljivko.

Številski podatkovni tip

V JavaScriptu ni razlike med celim številom in številom s plavajočo vejico – v bistvu JavaScript predstavlja vsa števila kot vrednost s plavajočo vejico.

JavaScript za predstavitev števil uporablja 64-bitni format, ki ga določa standard IEEE-754. Ta oblika je zmožna predstaviti števila v območju od ±1,7976931348623157 × 10308 do ±5 × 10 -324.

Število, ki ga najdemo neposredno v programski kodi, imenujemo numerični literal. Poleg decimalnih celih literalov JavaScript prepozna šestnajstiške vrednosti.
Šestnajstiška števila lahko vključujejo poljubno zaporedje številk od 0 do 9 in črk od a do f, ki se morajo začeti z zaporedjem znakov "0x".

Var a = 255; var b = 0xFF; // Število 255 v šestnajstiškem zapisu

Poleg tega JavaScript vsebuje posebne številske vrednosti:

  • NaN (ni številka ali računska napaka). Je rezultat nepravilne matematične operacije na neveljavnih podatkih, kot so nizi ali nedefinirana vrednost.
  • Neskončnost (pozitivna neskončnost). Uporablja se, ko je pozitivno število preveliko, da bi bilo predstavljeno v JavaScriptu.
  • -Neskončnost (negativna neskončnost). Uporablja se, ko je negativno število preveliko, da bi bilo predstavljeno v JavaScriptu.
  • ±0 (pozitivna in negativna 0). JavaScript razlikuje med pozitivno in negativno ničlo.
Podatkovni tip niz

Vrsta niza je nespremenljivo, urejeno zaporedje 16-bitnih vrednosti, od katerih vsaka predstavlja znak Unicode (črke, številke, ločila, posebni znaki in presledki). Vrstice so lahko prazne ali sestavljene iz enega ali več znakov. Nizi so ustvarjeni z uporabo dvojnih (") ali enojnih (") narekovajev. Niz, razmejen s parom enojnih narekovajev, lahko uporablja dvojne narekovaje in obratno, enojne narekovaje je mogoče uporabiti znotraj niza, obdanega s parom dvojnih narekovajev:

V JavaScriptu ni razlike med dvojnimi in enojnimi narekovaji, vendar se narekovaji na začetku in koncu niza ne smejo razlikovati. Izraz, kot je ta, bi na primer povzročil sintaktično napako:

var firstName = "Največ"; //sintaksna napaka - različni narekovaji

Opomba: JavaScript nima posebne vrste podatkov z enim znakom, kot je char v C, C++ in Javi. En znak je predstavljen z nizom enotne dolžine.

Ničelni podatkovni tip Ničelni tip vsebuje eno samo posebno vrednost – null.

Ključne besede null ni mogoče uporabiti kot ime funkcije ali spremenljivke. Vrednost null je sklic na "prazen" objekt in ima poseben namen - običajno se uporablja za inicializacijo spremenljivke, ki ji bo kasneje dodeljena vrednost.

Operator typeof za ničelno vrednost vrne niz "object", ki nakazuje, da je ničelna vrednost poseben "prazen" objekt.

Nedefiniran tip podatkov

Nedefiniran tip tvori svoj tip, ki vsebuje eno samo posebno vrednost - undefined. To je vrednost spremenljivke, deklarirane z uporabo operatorja var, vendar ni inicializirana:

Vrednost undefined je vrnjena pri dostopu do spremenljivke, ki ji nikoli ni bila dodeljena vrednost, lastnosti neobstoječega predmeta ali elementa matrike.

Upoštevati je treba, da se spremenljivka z vrednostjo undefined razlikuje od spremenljivke, ki sploh ni definirana:

V tem primeru metoda alert() prikaže vrednost spremenljivke starost, ki je nedefinirana. V drugem primeru se nedeklarirana spremenljivka car posreduje metodi alert(), kar vodi do napake.

Naslednji primer je morda nekoliko zmeden za programerje začetnike, ker ... Operator typeof vrne nedefinirano tako za neinicializirano kot za neprijavljeno spremenljivko:

V zgornjem primeru je spremenljivka starost deklarirana, vendar vanjo ni nič zapisano, zato je njena vrednost le undefined. Spremenljivka car ni deklarirana – pravzaprav ne obstaja. Vendar typeof v obeh primerih vrne niz nedefiniran. To je seveda nekoliko smiselno, saj je nemogoče izvesti kakršne koli operacije s katero koli od teh spremenljivk, čeprav so tehnično popolnoma različne.

Opomba: Priporočeno je, da deklarirano spremenljivko vedno inicializirate. V tem primeru boste vedeli, da operator typeof vrne nedefinirano, ker spremenljivka ni bila deklarirana, ne zato, ker ni bila inicializirana.

Vrednost undefined je izpeljana iz null, zato jih v ECMA-262 operator enakovrednosti == obravnava kot enake:

Čeprav sta ničelna in nedefinirana povezana, se uporabljata različno. Spremenljivki ne smete izrecno dodeliti vrednosti undefined, vendar to ne velja za nič. Če zahtevani objekt ni na voljo, je treba namesto tega uporabiti null. To pomeni, da je bila ničelna vrednost uvedena kot kazalec na prazen objekt, in poudarja njeno razliko od nedefiniranega.

Za razlikovanje med ničelnim in nedefiniranim v programu lahko uporabite operater identitete === :

Tip podatkov Simbol

Simbol je nov dodatek JavaScriptu od različice 6 ECMAScripta. Simbol je edinstvena, nespremenljiva, primitivna vrednost, ki se uporablja za ustvarjanje edinstvenih identifikatorjev.

Če želite ustvariti simbol, morate poklicati funkcijo Symbol:

var mySymbol = Simbol();

Če želite definirati simbol, lahko uporabite operator typeof; če je vrednost simbol, bo vrnjen simbol niza:

Funkcija Symbol ima izbirni parameter - niz, ki služi za opis simbola:

Ime lastnosti je niz, zato se lahko šteje, da objekti povezujejo nize z vrednostmi. Ti deli informacij skupaj tvorijo pare ključ-vrednost.

IN objekti JavaScript lahko ustvarite z eno od dveh sintaks:

1. var obj = (); // uporaba objektnega literala 2. var obj = new Object(); // z uporabo metode imenovane konstruktor

Ustvarjanje predmeta z uporabo literala objekta se začne z definiranjem navadne spremenljivke. Na desni strani tega stavka je zapisan objektni literal - to je z vejicami ločen seznam parov v zavitih oklepajih (). "ime-vrednost", v zavitih oklepajih. Ime in vrednost lastnosti sta ločeni z dvopičjem:

var cat = ( "noge": 4, "name": "Murzik", "color": "rdeča")

Drugi način ustvarjanja objektov je uporaba konstruktorja Object(). V tem primeru se najprej uporabi izraz new Object(), nato pa se definirajo in inicializirajo lastnosti nastalega predmeta:

  • Ko eno spremenljivko (katere vrednost vsebuje sklic na sestavljeno vrednost) dodelimo drugi spremenljivki, se referenca na sestavljeno vrednost kopira. Posledično se obe spremenljivki nanašata na isto sestavljeno vrednost in spremembe v vrednosti ene spremenljivke bodo vplivale na drugo spremenljivko.
  • Vsak izraz, ki vrne 0, nič, nedefinirano ali prazen niz, se interpretira kot false.
  • Nizi so ustvarjeni z uporabo dvojnih (") ali enojnih (") narekovajev. Niz, razmejen s parom enojnih narekovajev, lahko uporablja dvojne narekovaje in obratno, enojne narekovaje je mogoče uporabiti v nizu, obdanem s parom dvojnih narekovajev.
  • Vrednost null je sklic na "prazen" objekt in ima poseben namen - običajno se uporablja za inicializacijo spremenljivke, ki ji bo kasneje dodeljena vrednost.
  • Vrednost (nedefinirano) je spremenljivka, deklarirana z uporabo operatorja var, vendar ni inicializirana.
  • V JavaScriptu je mogoče objekte ustvariti na enega od dveh načinov:
    • z uporabo objektnega literala
    • z uporabo metode, imenovane konstruktor
  • Objekt vsebuje neurejeno zbirko lastnosti, od katerih vsaka vsebuje ime in vrednost. Objektu lahko kadar koli dodate nove poimenovane vrednosti ali odstranite obstoječe.