JS: существует таблица неявного приведения типов?

363
30 ноября 2017, 03:57

Привет!

Существует таблица неявного приведения типов или где правильные ответы смотреть?

Пример:

[1] + [2] - [3]
= 9

или:

{} + {}
= "[object Object][object Object]"
Answer 1

Правильные ответы есть в спецификации.

В примерах в вопросе нужно смотреть операции сложения и вычитания.

Как видно из алгоритма, в случае сложения сначала операнды приводятся к примитивному типу, с помощью вызова внутренней функции ToPrimitive (алгоритм ToPrimivite можно также увидеть в ответе на вопрос В чем разница между valueOf и toString)

Далее, если хотя бы один из операндов строка - производится сложение строк.
В противном случае, операнды приводятся к числу и выполняется сложение чисел.

В случае с вычитанием - операнды сразу приводятся к числу.

Рассмотрим первый пример из вопроса: [1] + [2] - [3]

  1. Происходит вычисление [1] + [2].
    1. операнды приводятся к примитивному типу, для массивов - это равносильно вызову ToString, следовательно: [1]+[2] -> "1"+"2"
    2. складываются строки: "1"+"2" = "12"
  2. Происходит вычисление "12" - [3].
    1. Операнды приводятся к числам: "12" -> 12, [3] -> "3" -> 3
    2. вычитание: 12 - 3 = 9
READ ALSO
Node js игнорирует if

Node js игнорирует if

Привет, подробно изучал Steam-user, хочу создавать аккаунты, но node игнорирует ifКод:

322
Как подменить User-Agent?

Как подменить User-Agent?

Как с помощью своего расширения подменить User-Agent?

293