Что {} + {} в 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");