Прежде всего, я знаю, что выражения, о которых говорилось позже, имеют side-effects
и не должны использоваться в рабочей среде. Я просто хочу понять через них JavaScript
. Все они тестируются под Chrome
.
var a = 42;
var b = "42";
a + ++b; // result is 85
Вот мое понимание a + ++b
,
Prefix Increment (++)
(приоритет 15) имеет более высокий приоритет, чем Addition(+)
(приоритет 13) в соответствии с приоритетом оператора. ++b
можно разобрать var ToNumber(GetValue(expr))
до 43
, обратитесь к 12.5.7 Prefix Increment Operator
. Тогда результатом a + 43
может быть 85
.
Однако
var a = 42;
var b = "42";
a++ + b; // "4242"
Почему результатом a++ + b
является "4242"
?
Я пытаюсь понять результат "4242"
, кажется, что a++
возвращает 42
во-первых, тогда для 42 + '42'
42
будет '42'
var ToString()
, во-первых, обратитесь к 12.7.3 The Addition operator ( + )
. то результатом может быть "4242"
.
Но, похоже, это нарушает правило: Postfix increment
(приоритет 16) выше Addition
(приоритет 13)???
var a = 42;
var b = "42";
a +++b; // "4242"
Как анализируется a +++b;
?