Добавление объектов и массивов

Может ли кто-нибудь объяснить мне, как оценивались результаты следующего?

{} + {} // NaN
[] + {} // "[object Object]"
{} + [] // 0
[] + [] // ""

Ответы

Ответ 1

Вот полное объяснение этого, проверить его.

И обратите внимание {} + {} be NaN, если вы выполняете его непосредственно в консоли, потому что {} рассматривается как блок, а не объект.

({}+{}) должен быть '[object Object][object Object]'

Реальный результат:

console.log({}+{}) // '[object Object][object Object]'
console.log([]+{}) // '[object Object]'
console.log({}+[]) // '[object Object]'
console.log([]+[]) // ''

Ответ 2

Добавление массивов с любым объектом и его строковым представлением всегда приводит к соединению

Например:

[1] + [2] // is merged to "12", so [] + [] is an empty string ""

То же самое для второго примера

['test'] + {} // "test[object Object]"

Таким образом, пустой массив плюс пустой объект просто вернет [object Object]


Для добавления в пустые объекты также легко:

Оцените простой пустой объект: {} // results in undefined

И добавление двух значений undefined равно NaN, потому что вы не можете сделать добавление на них.

Примечание: значения возврата зависят от реализации JavaScript (т.е. в браузере или среде)

Также: Что такое {} + {} в JavaScript?

Ответ 3

{} + {} 

вы не можете сделать дополнение или любую операцию над двумя объектами

[] + {} // "[object Object]"

это просто concat между строкой и объектом, у вас есть тот же результат с alert({});

{} + [] // 0

же

[] + [] // ""

concat двух пустых строк = пустая строка.

Ответ 4

Для {}+{} первый {} интерпретируется как блок, второй {} интерпретируется как пустой объект, а + интерпретируется как унарный оператор плюс, так что {}+{} эквивалентно:

{
    //Empty block, does nothing
}

+{}    //Unary + applied to empty object, which is NaN

Точно так же в {}+[], {} интерпретируется как блок, а +[] интерпретируется как унарный оператор плюс, примененный к пустому массиву, который дает 0.

Для []+{} + интерпретируется как оператор конкатенации строк, поэтому оба операнда преобразуются в строки, в этом случае [] преобразуются в пустую строку (""), а {} преобразуются в "[object Object]", затем оба соединяются вместе, давая ""+"[object Object]" который является "[object Object]".

Аналогично, для []+[] оба массива преобразуются в пустую строку, давая ""+"" что означает "".