Если мы запустим typeof empArr
, мы увидим empArr
объект.Независимо от того, объявляем ли мы его как массив, он является объектом.Далее, typeof arr[i]
показывает arr[i]
число.Следовательно, empArr+=arr[i]
означает, что мы пытаемся добавить объект и число.Поскольку мы пытаемся добавить два разных типа, это может произойти с помощью принуждения, неявно.Принуждение означает преобразование значения одного типа в другой.JavaScript выполняет неявное приведение в соответствии со следующими правилами:
операнд + операнд = результат
- Если хотя бы один операнд является объектом, он преобразуется в примитивное значение (строка, числоили логическое значение);
- После преобразования, если хотя бы один операнд является строковым типом, второй операнд преобразуется в и выполняется конкатенация;
- В другом случае выполняются оба операнда, преобразованные в числа, и выполняется арифметическое сложение.
Обратите внимание, что примитивное значение массива или объекта является строкой.
InВ нашем случае empArr
имеет тип объекта и по правилу 1 он приводится в виде строки.Теперь по правилу 2 arr[i]
, который является числом, также приводится к строке и присваивается empArr
.
. Для более подробной информации:
Добавление JavaScriptподробности об операторе
Приведение типа JavaScript