Что {} + {} в JavaScript?

1-я часть:

Потому что Когда вы добавляете два массива, все работает так, как ожидалось:

 [] + []     //output:''

Добавление массива и объекта также соответствует нашим ожиданиям:

 [] + {}
output:'[object Object]'

{} + {} в JavaScript есть NaN?
и это неожиданный результат, и в чем причина этого?

Вторая часть:

В сравнении строк без префикса 0 3 больше 12:

"3" > "12"
: true

С дополнением все работает правильно:

 "03" > "12"
: false

Является ли префикс 0 обязательным для сравнения строк? В чем причина добавления префикса 0?

Ответы

Ответ 1

первая часть

1 -

когда вы добавляете два массива, вы берете примитивное значение для каждого, и массивы могут быть преобразованы в строки, такие как следующие [1,2,3,4].toString() //=> 1,2,3,4, поэтому два массива emty генерируют пустые строки, а конкатенация между ними генерирует пустую строку.

2- когда для второго, когда вы добавляете пустую строку с объектом, вы преобразовываете объект в строку и, как показано, строковое значение объекта [object Object]

3 -

когда вы добавляете два объекта, в показанном вами виде вы просто конвертируете объект в число с помощью +, проверьте этот question

Часть вторая

Сравнение строк производится буквой слева направо, и как только появляется предположение, возвращается возвращаемое значение, игнорируя длину строки, как показано ниже.

"3" > "12"

"3" в ASCII больше, чем "1", поэтому возврат равен TRUE

"03" > "12"

"0" в ASCII меньше, чем "1", поэтому возврат False

Ответ 2

  • {} + {} интерпретируется как пустой блок {}, за которым следует выражение + {}. {} не имеет численного значения, поэтому оно дает NaN. Если вы заставите его оценивать как выражение типа ({} + {}), вы получите [object Object][object Object].

  • Это строки, поэтому они будут сравниваться лексикографически. Если вы хотите сравнить их как числа, сначала проанализируйте их, используя parseInt или parseFloat.

Ответ 3

Я попробовал следующее в последних Firefox, Safari и Chrome:   a = []; Ь = {}; console.log(а + а); console.log(а + б); console.log(Ь + б);

Firefox

(an empty string)
[object Object]
[object Object][object Object]

Хром

[object Object]
[object Object][object Object]
undefined   

Сафари

[object Object]
[object Object][object Object]

Строка "3" больше, лексикографически, чем строка "12". Если вы действительно хотите, чтобы строки сравнивались как число, вы должны сказать JavaScript, что вы хотите это сделать.

parseInt("3") > parseInt("12");