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