2013-04-14 3 views
16

первая часть:Что такое {} + {} в JavaScript?

Поскольку При добавлении двух массивов, все работает, как ожидалось:

[] + []  //output:'' 

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

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

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

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

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

"3" > "12" 
: true 

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

"03" > "12" 
: false 

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

+9

'[] + [] == ''' ожидается для вас? Какова ваша логика? –

+3

@SergioTulentsev: Строковое представление массива представляет собой строковое представление его элементов, соединенных запятыми. Если это пустой массив, его строковое представление будет пустым, и если вы соедините две пустые строки, вы получите пустую строку. – icktoofay

+3

Вы должны отправить один вопрос на вопрос. –

ответ

12

первая часть

1-

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

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

3-

при добавлении два объекта, так, как показано вы просто преобразование объекта в число по + проверки этой question

Часть вторая

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

"3" > "12" 

«3» в ASCII больше, чем «1 "поэтому возвращение ИСТИНА

"03" > "12" 

„0“в ASCII меньше, чем„1“, так что возвращение Ложные

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

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

0

Я попытался следующие в последнем Firefox, Safari и Chrome: а = [ ]; Ь = {}; 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");