JavaScript Number a String prohlášení

hlasů
0

Snažím se pochopit, že jak mohu získat skutečnou logiku na následující kód JavaScript:

var x = 10;
var y = 20;
var result = x + y;
document.getElementById(demo).innerHTML = result;

link: https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_add_strings4

Výstupem následujícího kódu = 1020 v „doplněk“ provozu. V duchu jsem si, že to je správné, protože to je zřetězení dvou čísla jako řetězec.

var x = 100;
var y = 10;
var z = x / y;   
document.getElementById(demo).innerHTML = z;

link: https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_string1

Ale Výstupem následujícího kódu je = 10 v provozu „divize“, a to nemůže počítat tato dvě čísla jako řetězec. Vypočítala dvě čísla jako čísla. **** Prosím, někdo mi pomůže, že budu chápat jasně. ****

Položena 02/09/2018 v 05:05
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
0

Navrhuji číst to pro vás.

http://2ality.com/2013/04/quirk-implicit-conversion.html

Primative typ Number: Použijte jiný typ, valueOf () -> toString () -> TypeError

Primative typu String: Použijte jiný typ, toString () -> valueOf () -> TypeError

Odpovězeno 02/09/2018 v 05:53
zdroj uživatelem

hlasů
0

JavaScript je volně-napsaný jazykem. To znamená, že můžeme dělat matematiku s řetězci (např "100" / "10" === 10) a JavaScript automaticky uvědomí, že to by mělo interpretovat tyto řetězce jako čísla.

Ale proč není "10" + "20"rovná 30?

JavaScript (možná špatně), se rozhodli použít stejný operátor ( +) pro smyčcový zřetězení, stejně jako doplněk. To znamená, že musel rozhodnout, zda číslo podobné Řetězce by měly být vykládány jako řetězce nebo čísla v tomto případě, a zřetězení vyhrál. Ve skutečnosti, dokonce "10" + 20i 10 + "20"a 10 + "2" + 0budou všechny výnos "1020". Pokud existuje řetězec někde , zřetězení vyhrává.

Odpovězeno 02/09/2018 v 05:35
zdroj uživatelem

hlasů
0
var a  = "1022";            //variable a&b takes a string.
var b = "2";     
var c = a/b;                //a and b are converted to number type implicitly 
                            //because strings have no function with '/'.
document.write(c + "<br>"); //prints division between a and b (a/b).
c = toString();             //converts c to string explicitly.
document.write(c);          //shows an error as i said string cant be divided!.

Dejte mi vědět, jestli mi pomohl!

Odpovězeno 02/09/2018 v 05:31
zdroj uživatelem

hlasů
0

V javascript operátor „+“ je zacházeno jako operátor zřetězení, pokud některý z argumentů je řetězec a „/“ operátor dělení má pouze „divize operace s ním spojené.

Odpovězeno 02/09/2018 v 05:21
zdroj uživatelem

hlasů
0

V javascriptu, operátor dělení implictly převede řetězce na čísla a provést rozdělení Ale kromě javascript považuje za řetězec a provést zřetězení.

Odpovězeno 02/09/2018 v 05:17
zdroj uživatelem

hlasů
0

JavaScript dělá vše proto, aby vám přiměřenou odpověď bez ohledu na to, jaký typ dat, která ho dát. Ve svém prvním příkladu vidí žádáte operátor + na dva řetězce. To je platné, co pro to udělat (zřetězení), takže žádný nátlak se provádí - dvě struny jsou zřetězeny.

Ve svém druhém příkladu vidí žádáte o / operátor dvou řetězců. Toto není platný, co dělat, ale použití tohoto operátora na čísla by bylo platné, a řetězce jste dali to může být oba reprezentovány jako čísla, takže je to, co dělá. Převádí je do čísel a pak se provádí toto rozdělení.

Toto auto donucení může být velmi výhodné (nemusíte se obávat skoro tolik o typů v JavaScriptu jako v jiných jazycích). Někdy to může být i trochu nebezpečné v tom, že vám může dát za následek neočekáváte, ale jakmile se dostanete k pochopení, jak a kdy je použit nátlak, nebezpečí snižuje některé z nich.

Odpovězeno 02/09/2018 v 05:17
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more