Ответ 1
{}
может быть либо пустым, либо пустым литералом объекта в зависимости от контекста.
+
может быть либо унарным плюсом, либо оператором конкатенации в зависимости от контекста.
Первый пример кода - это пустой блок, который также не может быть там, что делает выражение таким же, как +[]
, что означает "Пустой массив, преобразованный в число".
Вы не можете иметь блок как аргумент функции, поэтому второй пример кода {}
- это объект, а код означает "Конкатенация объекта с массивом" (неявное преобразование как объекта, так и массива в строки).