Добавление объектов и массивов
Может ли кто-нибудь объяснить мне, как оценивались результаты следующего?
{} + {} // 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]"
.
Аналогично, для []+[]
оба массива преобразуются в пустую строку, давая ""+""
что означает ""
.