Это ожидаемое поведение. Когда вы используете оператор + на 2 массивах, оба массива передаются в строку, которая в основном совпадает с вызовом .join(','). Если массивы оба пустые, вы получите две пустые строки, объединенные в одну пустую строку с длиной 0.
([] + []) = ""
Однако с объектами способ, которым они передаются в строку, отличается. По умолчанию оператор + будет передавать объекты в строки, что приведет к тому, что строка "[object Object]" сделает это дважды, и вы получите длинную строку символов 30.
({}+{}) = "[object Object][object Object]"
Ответ 2
Оператор + в Javascript используется для добавления чисел или строк, но при использовании в объекте он по существу вызывает прототип toString.
Итак: ({}).toString() есть [object Object]
И, если вы добавите две строки вместе, это [object Object]
Вы получаете: [object Object][object Object], поэтому длина равна 30.
Но пустой массив [] для строки - это просто "", поэтому два комбинированных "" все еще справедливы: "", поэтому длина равна 0.