2013-04-14 19 views
16

1. Teil:Was ist {} + {} in JavaScript?

Da Wenn Sie zwei Arrays hinzufügen, funktioniert alles wie erwartet:

[] + []  //output:'' 

ein Array Hinzufügen und ein Objekt entspricht auch unseren Erwartungen:

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

{} + {} in JavaScript ist NaN?
und dies ist ein unerwartetes Ergebnis. Was ist der Grund dafür?

2. Teil:

In String-Vergleich ohne Präfix 0, 3 größer als 12:

"3" > "12" 
: true 

Mit Polsterung, alles funktioniert einwandfrei:

"03" > "12" 
: false 

Ist Präfix 0 obligatorisch für String-Vergleich Was ist der Grund für das Hinzufügen von Präfix 0?

+9

'[] + [] == ''' wird für Sie erwartet? Was ist deine Logik? –

+3

@SergioTulentsev: Die Zeichenfolgendarstellung eines Arrays ist die Zeichenfolgendarstellung seiner durch Kommas verbundenen Elemente. Wenn es sich um ein leeres Array handelt, ist seine Zeichenfolgendarstellung leer. Wenn Sie zwei leere Zeichenfolgen verketten, erhalten Sie eine leere Zeichenfolge. – icktoofay

+3

Sie sollten eine Frage pro Frage stellen. –

Antwort

12

der erste Teil

1-

, wenn Sie zwei Arrays fügen Sie den Grundwert nehmen für jeden und Arrays können wie die folgenden [1,2,3,4].toString() //=> 1,2,3,4 so die beiden emty Arrays in Strings umgewandelt werden generiert, um Strings zu leeren, und die Verkettung zwischen ihnen erzeugt eine leere Zeichenfolge.

2- , wenn für das zweite, wenn Sie mit dem Objekt leere Zeichenfolge hinzuzufügen, konvertieren Sie das Objekt als String und der Zeichenfolgenwert eines Objekts ist [object Object]

3-

gezeigt beim Hinzufügen zwei Objekte, in der Art und Weise Sie sind nur gezeigt, dass dies ein Objekt zu Nummer durch die + Check Umwandlung question

Part Two

String-Vergleich-Buchstaben für Buchstaben von links nach rechts, und sobald es eine Ehrerbietung ist der Rückgabewert bestimmt wird, ignoriert die String-Länge wie die folgenden

"3" > "12" 

„3“ in ASCII ist größer als „1 gemacht "so die Rückkehr ist TRUE

"03" > "12" 

"0" in ASCII kleiner als "1", so die Rückkehr Falsch ist

14
  1. {} + {} als leerer Block interpretiert {} durch den Ausdruck gefolgt + {}. {} hat keinen numerischen Wert, so ergibt es NaN. Wenn Sie erzwingen, dass es als Ausdruck wie ({} + {}) ausgewertet wird, erhalten Sie [object Object][object Object].

  2. Sie sind Strings, also werden sie lexikographisch verglichen. Wenn Sie sie als Zahlen vergleichen möchten, analysieren Sie sie zunächst mit parseInt oder .

0

ich habe versucht, die folgenden in der neuesten Firefox, Safari und Chrome: a = [ ]; b = {}; Konsole.log (a + a); Konsole.log (a + b); Konsole.log (b + b);

Firefox

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

Chrome

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

Safari

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

Der String "3" ist größer, lexikographisch, als die Zeichenfolge "12". Wenn Sie wirklich wollen, dass Strings als Zahl verglichen werden, müssen Sie JavaScript sagen, dass es so ist.

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