Строковые и числовые переменные javascript

Что оценивает следующее?

"1"+2+4

Как насчет этого:

5 + 4 + "3"

В первом случае с "1" является строкой, все является строкой, поэтому результат "124", Во втором случае его 93.что здесь происходит? Почему в одном случае происходит сложение, а в другом - конкатенация строк?

var x = "1" + 2 + 4;
var z = 5 + 4 + "3";
console.log(x); // "124"
console.log(z); // 93 

Кто-нибудь может объяснить это?

5 ответов

Решение

Выражение оценивается слева направо.

"1"+2+3
 ^--^
"12" //string  +3
  ^_____________^
 "123"  //string

во 2-м случае

 1+2+"3"
 ^_^
  3+"3"
  ^___^
  "33" // string

Подумайте о порядке операций (rtl или ltr) каждый раз, когда он выполняет двоичную операцию, он соответствующим образом преобразует ее, поэтому 5+4 будет int, а (5+4) + "3" будет строкой, поскольку "3" является строкой

Тот же метод применяется к разным примерам

В первом случае вы сначала создаете строку (1), а затем javascript объединяет следующее число в виде строк (124).

Во втором вы сначала создаете число, затем javascript добавляет второе число к этому первому числу (5 + 4 = 9), а затем вы добавляете строку, чтобы она выполняла объединение 9 и 3.

var x = "1" + 2 + 4; // 124

Это принимает строку "1" и объединяет в нее "2" и "4" в качестве строк.

var z = 5 + 4 + "3"; // 93

Это берет числа 4 и 5 и складывает их вместе, чтобы получить число 9, а затем соединяет строку "3" с этим, чтобы получить другую строку.

Главное, что здесь нужно убрать, это то, что конечный результат того, что вы здесь делаете, - это конкатенация строк. Порядок вычисления чисел отличается, но конечным результатом является строка.

В обоих случаях применяется преобразование типов и приоритет слева направо. в первом,

var x = "1" + 2 + 4; // 124

компилятор принимает 1 в качестве строки, и после этого он будет объединен с 2, теперь 12 является строкой, поэтому он будет объединен с 4, а результат выдаст "124" в виде строки.

var z = 5 + 4 + "3"; // 93

Во втором случае первые 5 и 4 являются числовыми, поэтому добавьте их, и результат будет равен 9. И это будет объединено со строкой 3, поэтому вывод soo будет равен 93 как строка.

Другие вопросы по тегам