JavaScript Number & String декларация - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь понять, как я могу получить истинную логику в следующем коде 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 в операции «Разделение», и он не может считать эти два числа в виде строки. Он рассчитал два числа как число. **** Пожалуйста, кто-нибудь, помогите мне в этом, я буду понимать это ясно. ****

Ответы [ 6 ]

0 голосов
/ 02 сентября 2018

Предлагаю прочитать это для вас.

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

Примитивный тип Number: используется другой тип, valueOf () -> toString () -> TypeError

Примитивный тип String: Оператор другого типа, toString () -> valueOf () -> TypeError

0 голосов
/ 02 сентября 2018

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

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

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

0 голосов
/ 02 сентября 2018
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!.

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

0 голосов
/ 02 сентября 2018

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

0 голосов
/ 02 сентября 2018

В javascript оператор деления неявно преобразует строки в числа и выполняет деление Но для дополнения javascript считает его строкой и выполняет конкатенацию.

0 голосов
/ 02 сентября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...