Что такое ToPrimitive в + оператор - PullRequest
0 голосов
/ 26 июня 2018

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()?

...