Uvod

javascript_konverzija

JavaScript je slabo (eng. loosely) tipiziran jezik, što znači da ne zahteva da se jasno deklarišete vrsta podataka pri deklarisanju promenjive. Kod JavaScript-a se tip promenjive implicitno deklariše sa pridruživanjem odredjene vrednosti datoj promenjivoj.
Javascript je takodje jezik dinamičkih tipova jer je moguća promena tipa u toku izvršenja programa. Rezultat konverzije je uvek neka primitivna vrednost, tj. ne postoji konverzija čiji je rezultat neka složena vrednost (kao što je objekat ili funkcija). Za razliku od JavaScript-a, TypeScript (JavaScript superset jezik) je “strongly typed” jezik koji zahteva da se pri deklaraciji promenjive definiše tip i ne dozvoljava implicitno menjanje tipova.

Eksplicitna konverzija

Kada mi želimo da promenimo tip podataka neke promenjive to se zove eksplicitna (očigledna) konverzija tipova i vrši se koristeći neku od ugradjenih funkcija za konverziju:

  • Konvertovanje u “string”: “String()” ili “toString()”
  • Konvertovanje u “number”: “Number()” ili “parseFloat()” ili “parseInt()”
  • Konvertovanje u “boolean”: “Boolean()”

Implicitna (prikrivena) konverzija tipova

Implicitna (prikrivena) konverzija tipova se odnosi na konverzije koje nisu očigledne, a izvšava ih JavaScript engine u hodu kao sporedni efekat nekih drugih radnji. Implicitna konverzija se najčešće javlja kada se vrednost nekog tipa koristi na način koji automatski prouzrokuje njenu konverziju.

Poznati slučajevi implicitne konverzije tipova podataka su pri “Abstraktnom relacionom poredjenju”, kao i pri primeni matematičkih operacija nad podacima koji nisu jednakog tipa. Takodje jedan od najpoznatijih primera implicitne konverzije je “poredjenje prama jednakosti”, nakon čega se dobija logička vrednost. Algoritam pri odredjivanju logičke vrednosti je sledeći:

Algoritam pri abstraktnom poredjenju “x==y”
  1. If Type(x) is the same as Type(y), then
    1. Return the result of performing Strict Equality Comparison x === y.
  2. If x is null and y is undefined, return true.
  3. If x is undefined and y is null, return true.
  4. If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).
  5. If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.
  6. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
  7. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
  8. If Type(x) is either String, Number, or Symbol and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).
  9. If Type(x) is Object and Type(y) is either String, Number, or Symbol, return the result of the comparison ToPrimitive(x) == y.
  10. Return false.
Algoritam pri striktnom poredjenju “x===y”
  1. If x is NaN, return false.
  2. If y is NaN, return false.
  3. If x is the same Number value as y, return true.
  4. If x is +0 and y is -0, return true.
  5. If x is -0 and y is +0, return true.
  6. Return false.

Tabela implicitnih konverzija

Original Vrednost Konverzija u Number Konverzija u String Konverzija u Boolean
false 0 “false” false
true 1 “true” true
0 0 “0” false
1 1 “1” true
“0” 0 “0” true
“000” 0 “000” true
“1” 1 “1” true
NaN NaN “NaN” false
Infinity Infinity “Infinity” true
-Infinity -Infinity “-Infinity” true
“” 0 “” false
“20” 20 “20” true
“twenty” NaN “twenty” true
[ ] 0 “” true
[20] 20 “20” true
[10,20] NaN “10,20” true
[“twenty”] NaN “twenty” true
[“ten”,”twenty”] NaN “ten,twenty” true
function(){} NaN “function(){}” true
{ } NaN “[object Object]” true
null 0 “null” false
undefined NaN “undefined” false

Implicitna konverzija u string

Ova konverzija se javlja pri korišćenju operatora “+”, kada je jedan od operanada string. Pravilo je da se operand (element nad kojim se izvršava operacija) čiji tip nije “string” konvertuje u string a zatim se vrši spajanje dva string-a (spajanje znakovnih nizova).

Primer

Primer

Implicitna konverzija u broj

Operatori za oduzimanje (), množenje (*) i deljenje (/) namenjeni samo za rad sa brojevima, stoga jedan od operanada nije broj, dolazi do implicitne konverzija u broj. Takodje su brojevi potrebni kada se koriste operatori poredjenja (“==” ili “<" ...), stoga i tada dolazi do konverzije u broj.

a) String u broj

b) Niz u string pa u broj

Pri konverziji nizova u broj se prvo niz prebacuju u string (medjukorak), a zatim stringovi u brojeve.

c) Logička vrednost u broj

Kada se koriste operatori poredjenja (“==” ili “<" ...) pri čemu jedan od operanada je logička vrednost a drugi broj dolazi do konverzije logičke vrednosti u broj. Logička vrednost TRUE se konvertuje u broj 1, a logička vrednost FALSE se konvertuje u nulu.

NAPOMENA:
Korišćenjem unarnih operatora (+ ili -) ispred nekog podatka, operator će pokušati da ga kovertuje u broj!

Implicitna konverzija u logičku vrednost

Konverzija nekog tipa u logički tip se smatra za najkompleksniji slučaj konverzije. Najčešće implicitna konverzija u logički tip nastaje kao potreba za izračunavanje nekog uslova. Poznato je da su za izračunavanje uslova potrebne logičke vrednosti, stoga svaka vrednost koja se koristi unutar pomenutih uslova čiji tip nije logička vrednost je potrebno da se konvertuje u logičku vrednost! Navešću uslove kojima je potrebna logička vrednost za razrešenje uslova, pa zbog toga može da se javi potreba za konverzijom u logički tip:

  1. uslov u iskazu if (..)
  2. uslov (druga odredba) u petlji for (.. ; .. ; ..)
  3. uslov u petljama while(..)
  4. uslov (prva odredba) u ternarnim izrazima ..?.. :..
  5. operandi kao uslov kod logičkih operatora && ili ||:

    Kada jedan ili čak oba operanda nisu logičkog tipa pri korišćenju operatora && i || dolazi do konverzije u logički tip ali nakon razrešenja uslova ne vraćaju logičku vrednost, već vraćaju vrednost jednog od dva operanda. Šta će da bude razultat uslova se odredjuje prema sledećim pravilima:

    • Za operator || nakon konverzije “ne logičkog” tipa u logički pri razrešenju uslova važi:
      ukoliko je krajnje rešenje uslova operatora TRUE on vraća vrednost prvog operanda, a u slučaju FALSE vraća vrednost drugog operanda.
    • Za operator && nakon konverzije “ne logičkog” tipa u logički pri razrešenju uslova važi:
      ukoliko je krajnje rešenje uslova operatora TRUE vraća vrednost drugog operanda i obrnuto.

Pogledajte slične članke...

Podelite:

Ostavite komentar