JavaScript Number & Строка декларации

голоса
0

Я пытаюсь понять, что, как я могу получить истинную логику на следующий код JavaScript:

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

ссылка: https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_add_strings4

ВЫХОД из следующего кода = 1020 в работе «дополнение». На мой взгляд, я думаю, что это правильно, потому что это объединение двух числа в виде строки.

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

ссылка: https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_string1

Но выход следующего кода = 10 в «Участке» операции и это не может рассчитывать это два числа в виде строки. Он вычислил два номера в качестве номера. **** Пожалуйста, кто-нибудь помочь мне, что я буду понимать это ясно. ****

Задан 02/09/2018 в 05:05
источник пользователем
На других языках...                            


6 ответов

голоса
0

Я предлагаю, чтобы прочитать это для вас.

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

Тип примитивное Количество: Operate другого типа, valueOf () -> ToString () -> TypeError

Тип примитивный Строка: Operate другой тип, ToString () -> valueOf () -> TypeError

Ответил 02/09/2018 в 05:53
источник пользователем

голоса
0

JavaScript является слабо типизированным языком. Это означает , что мы можем сделать математику со строками, (например "100" / "10" === 10) и JavaScript автоматически понимает , что следует интерпретировать эти строки как числа.

Но тогда почему не "10" + "20"равно 30?

JavaScript (возможно , плохо) решил использовать один и тот же оператор ( +) для конкатенации строк , а также как дополнение. Это означает , что они должны были решить , является ли число подобных строки должны интерпретироваться как строка или как числа в этом случае, и конкатенация выиграла. На самом деле, даже "10" + 20и 10 + "20"и 10 + "2" + 0будет весь выход "1020". Если есть строка где - то , конкатенация побеждает.

Ответил 02/09/2018 в 05:35
источник пользователем

голоса
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!.

Дайте мне знать, если я помог!

Ответил 02/09/2018 в 05:31
источник пользователем

голоса
0

В JavaScript оператор «+» рассматриваются как оператор конкатенации, если какие-либо из аргументов является строкой и оператор «/» деление имеет только «операцию деления, связанную с ним.

Ответил 02/09/2018 в 05:21
источник пользователем

голоса
0

В JavaScript, оператор деления преобразует неявно строки в числа и выполнять деление Но для того Javascript рассматривает его в качестве строки и выполнить конкатенацию.

Ответил 02/09/2018 в 05:17
источник пользователем

голоса
0

JavaScript делает все возможное, чтобы дать вам разумный ответ независимо от того, какой тип данных вы даете ему. В первом примере он видит, что вы подаете оператор + для двух строк. Это верное дело для того, чтобы сделать (конкатенации), поэтому никакого принуждения не выполняется - две строки объединяются.

В вашем втором примере видит, что вы подаете оператор / двух строк. Это не является правильным, что нужно сделать, но применение этого оператора числа будет действительным, и строки, которые вы дали это может и быть представлены в виде чисел, так это то, что он делает. Он преобразует их в число, а затем выполняет это разделение.

Это автоматическое принуждение может быть очень удобным (вам не придется беспокоиться почти стольких типов в JavaScript, как и в других языках). Иногда он также может быть немного опасно в том, что он может дать вам результаты, вы не ожидаете, но как только вы получите, чтобы понять, как и когда применяется насилие, опасность уменьшается некоторые.

Ответил 02/09/2018 в 05:17
источник пользователем

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