Подтвердить что ты не робот

Почему JavaScript оценивает плюс со строкой и int по-разному?

Почему JavaScript оценивает значение плюс с строкой и целыми значениями по-разному в зависимости от места строки?

Пример:

console.log("1" + 2 + 3);
console.log(2 + 5 + "8");

Первая строка печатает 123, а вторая - 78.

4b9b3361

Ответ 2

Преобразование типа JavaScript в тех случаях, когда вы указываете, что вы хотите преобразовать типы всех ваших аргументов в соответствие типу вашего первого аргумента оператору +.

Вот почему в первом случае вы упоминаете, что начинается с строки "1", добавление преобразует другие аргументы в строки.

Во втором случае вы упомянули console.log(2 + 5 + "8"). Первый аргумент для оператора + - целое число, поэтому преобразование типа JavaScript предполагает, что вы хотите целое число.

Ответ 3

Хорошо, потому что оператор + перегружен.

  • При использовании с двумя целыми числами они суммируют их.
  • При использовании с двумя строками он объединяет их.
  • При использовании между строкой и целым числом она объединяет их.

Вот почему, когда вы делаете

console.log("1" + 2 + 3);

Он объединяет первый и второй операнды (так как первый является строкой), чтобы дать строку "12", и она снова объединяет ее с третьим операндом по той же причине.

Однако, когда вы делаете

console.log(2 + 5 + "8");

Он суммирует первый и второй операнды (оба являются числовыми), чтобы дать 7 и, наконец, объединяет его с третьим операндом по причинам, упомянутым выше.

Ответ 4

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

Итак, если вы используете "1" + 2 + 3, а типы операндов разные, он будет добавляться, иначе, если типы будут ints, он будет добавлять.

case "1" + 2 + 3
"1" +2 - different types- result - "12" string
"12" + 3 - different types- result - "123" string
 case 2 + 5 + "8"
2 + 5 - same types- result - 7 int
7 + "8" - different types - result "78" string

Ответ 5

Я думаю, что это называется утка. Если это выглядит как утка, а кряки, как утка, должно быть утка. Если он выглядит как строка "1" , то это, вероятно, строка.

JavaScript также, кажется, оценивает как слева направо, так и от конкретного (int) до общего (string).

В первом примере console.log( "1" + 2 + 3), он оценивает "1" как строку из-за кавычек и предполагает, что вы хотите объединить все, что следует за ней. В результате он пишет "123".

Во втором примере console.log(2 + 5 + "8" ), он принимает int и добавляет к другому int, создавая 7, затем встречает строку, поэтому предполагает, что вы хотите выполнить конкатенацию, чтобы она записывала "78" в виде строки. Если вы хотите оценить строго значения int, вы можете использовать parseInt ( "8" ), чтобы преобразовать ваш 8 обратно в int.