Оператор ++
выполняет преобразование "toNumber" (в основном комбинация правил типа и функции valueOf). В основном для любого выражения разрешения
resolveExpression++
Шаги, предпринятые двигателем JS:
<temp> = toNumber(resolveExpression);
resolveExpression = <temp> + 1;
<result> = <temp>
Для неатомарных выражений разрешения, например. base.resolve++
или base["resolve"]++
и т. Д. base
разрешается только один раз, а затем используется повторно. В любом нормальном случае это не имеет значения, однако важно, если увеличиваемое значение является объектом с реализацией valueOf, которая изменяет базовый объект.
например.
base = {};
base.value = {valueOf:function(){base = {}; return 5;}}
base.value++;