var a = [1,2];
var b = [3,4];
console.log(a + b); // "1,23,4"
Наткнулся на абзац в this , пытаясь объяснить, что произошло
В соответствии с разделом спецификации ES5 11.6.1,Алгоритм + (когда значение объекта является операндом) будет объединен, если любой из операндов уже является строкой или если следующие шаги приводят к строковому представлению.Таким образом, когда + получает объект (включая массив) для любого операнда, он сначала вызывает абстрактную операцию ToPrimitive (раздел 9.1) для значения, которое затем вызывает алгоритм [[DefaultValue]] (раздел 8.12.8) с подсказкой контекстачисла.
Я не могу понять особенно ToPrimitive
в вышеприведенном контексте.Применяя вышеуказанные правила к описанному выше случаю, JS Engine попытается проверить, является ли a
или b
typeof String
, и, поскольку ни одно из них не является, операция ToPrimitive
будет применена к a
.
Пытаясь понять, что такое ToPrimitive()
, поправьте меня, если я ошибаюсь, объяснение в том, что ToPrimitive
также можно понимать как toString()
, toNumber()
и т. Д.?Если это так, почему в цитируемом контексте не говорится toString
напрямую вместо ToPrimitive()
?