Diskuze: Převod string na number
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 15 zpráv z 15.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Musíš obě čísla převést funkcí parseInt:
var vysledek = parseInt(PrvniCislo, 10) + parseInt(DruheCislo, 10);
Ta 10 je soustava, je nepovinná, ale občas dokáže JS zmást formát čísla.
Použij konstruktor Number() ... do něj předej tu navrácenou hodnotu ... vrátí se ti číslo... ohledně toho odčítání... pokud odečteš "9" - "4" tak se provede konverze pomocí metody valueOf() to samé násobení a dělení... není to tedy nic jiného než standardní chování dynamického jazyka ...
Taskill můžeš to prosím rozvést? Jak přesně mám použít konstruktor Number()? Mám udělat Number(PrvniCislo); a od té chvíle je v proměnné PrvniCislo hodnota typu number nebo jak to je?
Můžeš udělat buď Number(PrvniCislo), což ti vyhodí hodnotu
primitivního typu number.
Pokud uděláš new Number(PrvniCislo), pak ti to vrátí wrapper na primitivní
typ number.
Je úplně jedno, co použiješ, akorát ve druhém případě získáš objekt
s nějakými pomocnými metodami s prací s tím číslem.
Fajn, mám to. Vyzkoušel jsem obě možnosti,první možnost pomocí Number() a možnost, kterou tu nastínil Filip ParseInt(). Fungují obě dvě, proč použít kterou? Je v tom nějaký rozdíl, když je použiju? Zatím to vypadá, že obě dělají to samé... Přijde mi ale nelogické, aby byly v JS dvě možnosti jak udělat jednu věc...
var cislo = Number(prvniCislo);
Od teď je v cislo, číslo a ne string. Hele můžeš použít parseInt() a můžeš použít Number() oboje má svoje plus a mínus... parseInt třeba má to chování že když parsujes string "123-$;" tak ti vrátí v pohodě číslo ... tu část kterou ten string začíná.. Number udělá objekt s něčím navíc, ale když mu dáš string s tímhle bordelem tak to neprojde ...
JS má spoustu nelogických zákoutí
Ještě bych dodal, že parseInt si třeba neporadí s vědeckou notací. takže
když mu podstrčíš 1e8, tak ti vyhodí 1 a ne 100000000, což by udělal
Number. Pokud by jsi chtěl dělat kalkulačku, tak se hodí spíš Number,
protože parseInt se může někdy chovat neočekávaně.
1e8 nevím co je ani já, takže tohle mu laskavě odpouštím Ne, teď vážně, díky za radu. Asi si někdy zjistím o těchto dvou možnostech víc ať vím, kdy kterou použít a tak, to už si vygooglím
Ještě dodám že Number udělá objekt pokud použiješ new Number() ...pokud zavoláš jen Number jak jsem to ukázal...tak se neudělá novej objekt pouze se proparsuje hodnota a proměnná je typu number ... pokud opět zadas string s bordelem tak to neprojde dobře ... respektive hodnota bude NaN
Já bych neřekl že je nelogický.. protože ono to skoro všechno zapadá do pravidel toho jak je navržen... i tohle je naprosto logický, když víš jak to uvnitř funguje.
Věci co tam nedávají smysl tam ale taky jsou, jen nejsou podle mě tak snadno vidět.
Já to běžně dělám následovně:
var a = '3.8';
var b = '1e8';
var result = (+a)+(+b);
console.log(result); //100000003.8
Takže to + vlastne nahradí Number(). Je to tak?
Ano, tím se proměnná přetypuje na číslo.
Zobrazeno 15 zpráv z 15.