Может ли кто-нибудь объяснить мне, как оценивались результаты следующего?
{} + {} // NaN
[] + {} // "[object Object]"
{} + [] // 0
[] + [] // ""
Может ли кто-нибудь объяснить мне, как оценивались результаты следующего?
{} + {} // NaN
[] + {} // "[object Object]"
{} + [] // 0
[] + [] // ""
Вот полное объяснение этого, проверить его.
И обратите внимание {} + {} be NaN, если вы выполняете его непосредственно в консоли, потому что {} рассматривается как блок, а не объект.
({}+{}) должен быть '[object Object][object Object]'
Реальный результат:
console.log({}+{}) // '[object Object][object Object]'
console.log([]+{}) // '[object Object]'
console.log({}+[]) // '[object Object]'
console.log([]+[]) // ''
Добавление массивов с любым объектом и его строковым представлением всегда приводит к соединению
Например:
[1] + [2] // is merged to "12", so [] + [] is an empty string ""
То же самое для второго примера
['test'] + {} // "test[object Object]"
Таким образом, пустой массив плюс пустой объект просто вернет [object Object]
Для добавления в пустые объекты также легко:
Оцените простой пустой объект: {} // results in undefined
И добавление двух значений undefined равно NaN, потому что вы не можете сделать добавление на них.
Примечание: значения возврата зависят от реализации JavaScript (т.е. в браузере или среде)
{} + {}
вы не можете сделать дополнение или любую операцию над двумя объектами
[] + {} // "[object Object]"
это просто concat между строкой и объектом, у вас есть тот же результат с alert({});
{} + [] // 0
же
[] + [] // ""
concat двух пустых строк = пустая строка.
Для {}+{} первый {} интерпретируется как блок, второй {} интерпретируется как пустой объект, а + интерпретируется как унарный оператор плюс, так что {}+{} эквивалентно:
{
//Empty block, does nothing
}
+{} //Unary + applied to empty object, which is NaN
Точно так же в {}+[], {} интерпретируется как блок, а +[] интерпретируется как унарный оператор плюс, примененный к пустому массиву, который дает 0.
Для []+{} + интерпретируется как оператор конкатенации строк, поэтому оба операнда преобразуются в строки, в этом случае [] преобразуются в пустую строку (""), а {} преобразуются в "[object Object]", затем оба соединяются вместе, давая ""+"[object Object]" который является "[object Object]".
Аналогично, для []+[] оба массива преобразуются в пустую строку, давая ""+"" что означает "".