2013-04-14 12 views
16

1 ° Parte:Che cos'è {} + {} in JavaScript?

perché quando si aggiungono due array, tutto funziona come previsto:

[] + []  //output:'' 

Aggiunta di una matrice e un oggetto è conforme anche alle nostre aspettative:

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

{} + {} in JavaScript è NaN?
e questo è un risultato inaspettato quindi qual è la ragione di questo?

2a parte:

In confronto stringa senza il prefisso 0, 3 è maggiore di 12:

"3" > "12" 
: true 

con imbottitura, tutto funziona correttamente:

"03" > "12" 
: false 

Is prefisso 0 obbligatorio per il confronto delle stringhe? Qual è la ragione per aggiungere il prefisso 0?

+9

'[] + [] == ''' è previsto per te? Qual è la tua logica? –

+3

@SergioTulentsev: la rappresentazione di una stringa dell'array è la rappresentazione in formato stringa degli elementi uniti da virgole. Se si tratta di un array vuoto, la sua rappresentazione di stringa sarà vuota e se si concatenano due stringhe vuote, si ottiene una stringa vuota. – icktoofay

+3

Dovresti pubblicare una domanda per domanda. –

risposta

12

la prima parte

1-

quando si aggiungono due array si prende il valore di base per ciascuno e per gli array possono essere convertiti in stringhe come i seguenti [1,2,3,4].toString() //=> 1,2,3,4 in modo che i due array emty genera per svuotare stringhe e la concatenazione tra di loro genera una stringa vuota.

2- quando la seconda quando si aggiunge stringa vuota con oggetto, si converte l'oggetto stringa e come mostrato il valore di stringa di un oggetto è [object Object]

3-

quando si aggiunge due oggetti, nel modo illustrato vi sono solo conversione di un oggetto al numero per il controllo + questo question

Part Two

stringa di confronto è effettuato lettera per lettera da sinistra a destra e appena v'è un ossequio il valore restituito è determinato ignorando la lunghezza della stringa come il seguente

"3" > "12" 

"3" in ASCII è maggiore di "1 "in modo che il ritorno è TRUE

"03" > "12" 

"0" in ASCII è inferiore "1" in modo che il ritorno è falso

14
  1. {} + {} viene interpretato come blocco vuoto {} seguito dall'espressione + {}. {} non ha valore numerico, quindi restituisce NaN. Se imposti la valutazione come un'espressione come ({} + {}), otterrai [object Object][object Object].

  2. Sono stringhe, quindi verranno confrontate lessicograficamente. Se si desidera confrontarli come numeri, analizzarli prima utilizzando parseInt o parseFloat.

0

ho provato quanto segue nella sua ultima Firefox, Safari e Chrome: a = [ ]; b = {}; console.log (a + a); console.log (a + b); console.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] 

La stringa "3" è maggiore, lessicografico, che la stringa "12". Se vuoi veramente che le stringhe vengano confrontate come numeri, devi dire a JavaScript che è come vuoi farlo.

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