Почему [2] + 2 это 22, а не 4?
Массивы не имеют ни Symbol.toPrimitive, ни функционирующего valueOf, они реализуют только преобразование toString, таким образом, здесь [] становится пустой строкой, [1] становится "1", а [1,2] становится "1,2"

https://learn.javascript.ru/array
сначала у массива вызывается метод valueOf, но он возвращает не примитив, а сам массив, и приходится вызвать toString, который дает строку, потому складывается строка с числом.

вот, поэкспериментируй в консоли браузера
var v12 = {
    valueOf: () => {console.log('valueOf'); return [1];},
    toString: () => {console.log('toString'); return '2';}
}

console.log(v12 + 2);
если убрать квадратные скобки, то toString не понадобится