Skip to content

Latest commit

 

History

History
22 lines (21 loc) · 2.73 KB

File metadata and controls

22 lines (21 loc) · 2.73 KB
'5' - 3 === 2 // (1)
'5' + 3 === '53' // (2)
'5' - '4' === 1 // (3)
'5' + + '5' === '55' // (4)
'foo' + + 'foo' === 'fooNaN' // (5)
'5' + - '2' === '5-2' // (6)
'5' + - + - - + - - + + - + - + - + - - - '-2' === '52' // (7)
let x = 3; 
'5' + x - x === 50 // (8)
'5' - x + x === 5 // (9)
  1. Оператор - является числовым, строка '5' переводится в число и получается 5 - 3.
  2. Оператор + используется для строковых и математических операций, он имеет левую ассоциативность, и из-за этого 3 становится строкой и получается '5' + '3'.
  3. Оператор - является числовым, строки преобразуются в числа, и получается 5 - 4.
  4. Приоритет у операторов + одинаковый, из-за этого происходит следующее: берётся первая часть '5' + и ожидается результат вычисления + '5' (перевод строки в число). Получается '5' + 5, что в итоге даёт 55.
  5. Идея такая же, как и в предыдущем выражении, но тут во второй части + 'foo' происходит попытка преобразовать 'foo' в число, что даёт NaN.
  6. Всё тот же принцип, но в этом примере вторая часть - '2' преобразовывается в число -2. В итоге получается '5' + -2 = '5-2'.
  7. Сначала идёт строка '5', к которой добавляется результат вычисления следующего за ней выражения. В нём идут унарные операторы + и -. Унарный + просто приводит строку в число, а унарный - приводит строку в число и меняет знак на противоположный. То есть унарный + в данном выражении можно не учитывать, а просто посчитать количество - - выходит 11 знаков, что является нечётным числом и в конечном итоге даёт один - (если бы было чётное число, то был бы +). Далее вычисляем - '-2' и получаем в итоге '5' + 2 = '52'.
  8. '5' + 3 = '53' строковое сложение, далее '53' - 3.
  9. '5' - 3 = 2 математическое вычитание, далее 2 + 3.