2013-05-13 14 views
17

stavo leggendo il re-introduction to JavaScript on MDN e nella sezione Numbers ha detto che è possibile convertire una stringa in un numero semplicemente aggiungendo un operatore più di fronte ad essa.JavaScript aggiunta di una stringa in un numero

Ad esempio:

+ "42" che produrrà l'uscita numero di 42.

Ma più avanti nella sezione circa Operatori si dice che aggiungendo una stringa "qualcosa" a qualsiasi numero è possibile convertire quel numero in una stringa. Essi forniscono anche il seguente esempio che mi confuse:

"3" + 4 + 5 presumibilmente produrre una stringa di 345 nell'output, perché i numeri 4 e 5 sarebbe anche essere convertiti in stringhe.

Tuttavia, non sarebbe 3 + 4 + "5" restituire un numero di 12 anziché una stringa 75 come indicato nel loro esempio?

In questo secondo esempio nella sezione sugli operatori non sarebbe l'operatore + che è in piedi di fronte a una stringa "5" convertire quella stringa in numero 5 e quindi aggiungere tutto fino a 12 uguale?

+0

Legga questo: [cosa è = + _] (http: // StackOverflow.it/questions/15129137/what-does-mean-in-javascript) –

risposta

23

Quello di cui stai parlando è un plus unario. È diverso dal valore più utilizzato con concatenazione o aggiunta di stringhe.

Se si desidera utilizzare un unario plus per la conversione e averlo aggiunto al valore precedente, è necessario raddoppiarlo.

> 3 + 4 + "5" 
"75" 
> 3 + 4 + +"5" 
12 

Edit:

È necessario conoscere ordine delle operazioni:

+ e - hanno la stessa precedenza e sono associati a sinistra:

> 4 - 3 + 5 
(4 - 3) + 5 
1 + 5 
6 

+ associando ad di nuovo a sinistra:

operatori
> 3 + 4 + "5" 
(3 + 4) + "5" 
7 + "5" 
75 

unari hanno normalmente più forte la precedenza di operatori binari:

> 3 + 4 + +"5" 
(3 + 4) + (+"5") 
7 + (+"5") 
7 + 5 
12 
+0

Ciò significa che quando una stringa viene combinata con altri numeri converte tutti gli altri numeri in stringhe, tranne quando specificatamente ho messo un altro + davanti (essenzialmente due operatori + (+ + "5")) e poi, solo allora, JavaScript interpreterà cosa c'è dentro una stringa come un numero? – SineLaboreNihil

+0

@SineLaboreNihil In '(+ +" 5 "))' prima è per 'add' secondo usato per digitare' "5" 'stringa per' 5' int ..read il collegamento –

+0

@epascarello ottengo l'ordine delle operazioni I è stato semplicemente confuso dalla seguente frase sul sito Web di MDN: "Se aggiungi una stringa a un numero (o un altro valore), tutto viene convertito prima in una stringa." Non dice nulla sull'ordine in cui viene convertito. Inoltre, la seguente frase ha aggiunto alla confusione: "Aggiungere una stringa vuota a qualcosa è un modo utile per convertirlo." Non dice che converte tutto in una stringa solo dopo che è stata rilevata come una stringa da JavaScript e che tutto prima sarebbe rimasto intatto. Comunque, grazie per il tuo aiuto. – SineLaboreNihil

3

Si potrebbe anche usare parseInt() o parseFloat(), in questo modo:

> 1 + 2 + "3" 
"33" 
> 1 + 2 + parseInt(3) 
6 

Penso che sia un sacco più pulita rispetto usando + "3", ma questa è solo la mia opinione.

1

Nell'esempio di 3 + 4 + "5" - il parser Javascript farà (3 + 4) + "5", come il 3 + 4 è il primo - in modo che si aggiunge 3 + 4, perché sono i numeri , quindi concatenare la stringa "5".

+0

Questo è ciò che mi confonde e lo sto incollando qui come è scritto sul sito Web di MDN: "Se aggiungi una stringa a un numero (o altro valore), tutto viene convertito prima in una stringa." .. Quindi apparentemente questo funziona solo se aggiungi una stringa prima, prima dei numeri. Se lo aggiungi dopo i numeri, i numeri si sommano (matematica semplice) e quindi concatenano una stringa in seguito. Significa che in questo caso tutto non sarà convertito in una stringa. – SineLaboreNihil

+1

Non tecnicamente corretto, anche se Javascript non è stato digitato, conserverà comunque i tipi a meno che non si converta, come int-> string, string-> int. – Modul8

1

Quando si aggiunge un numero e una stringa in Javascript, il risultato è sempre una stringa.

Controllare l'esperimento qui - http://jsfiddle.net/xuVur/1/

var a = "3" + 4 + 5; 
var b = 3 + 4 + "5"; 

$("#result1").html(a); // prints 345 
$("#result2").html(b); //prints 75 
+0

Stai stampando 'a' sempre –

+1

Il mio male. L'ho cambiato ora. – UnTechie

+1

jsfiddle è ancora sbagliato. L'ho aggiornato –

4

La risposta può essere trovata nella sezione Ecma262.pdf 11.6.1:

Se Type (lprim) è String o tipo (rprim) è String, quindi a. Restituisce la stringa che è il risultato del concatenamento di ToString (lprim) seguito da da ToString (rprim).

Quindi questo risolverà tutte le operazioni in base alla precedenza, in modo che non appena la stringa viene trovata un numero qualsiasi, il numero viene convertito in stringa.

4 + 3 + "5" 
"75" 
4 + 3 + "5" + 3 
"753" 

Per leggere l'intero standard, andare here.

1

Quando si guarda a Passo 7 e "Nota 2" a The Addition operator (+) (§11.6.1) nelle specifiche ES5,

si dice

Se Type (lprim) è STRING` o Tipo (rprim) è String, quindi restituisce la stringa che è il risultato della concatenazione ToString (lprim) seguito da ToString (rprim)


NOTA 2 Il passaggio 7 differisce dal punto 3 dell'algoritmo di confronto per gli operatori relazionali (11.8.5), utilizzando l'operazione logica o operativa anziché l'operazione logica e.

Senso se una 7 (3+4) o"5" (|| non &&) è typeof "string"toString() viene applicato ad entrambi gli operandi.

Quindi l'aggiunta venga effettivamente applicato secondo

"7" e "5" ->"7" + "5" //"75"

1

A smple + operatore in Javascript è usato per la concatenazione e non aggiungere.

Una parentesi e un operatore + prima della variabile intera del formato stringa eseguiranno il lavoro ogni volta.

Questo funziona sempre correttamente.

1 + (+"2") = 3 

Perché posizionare + prima della stringa converte la variabile di stringa in numero.

violino qui: http://jsfiddle.net/xuVur/2/

Problemi correlati