2013-04-08 14 views
7

in corso anche se la documentazione asm.js ho osservato questo strano (almeno per me, abbastanza nuovo per JS) frammento tutto il codice di esempio:Effetto x = + x in JavaScript

function test(x) { 
    x = +x; // THIS 
    ... 
    return +(x*y); 
} 

Qual è la scopo del + sulla prima riga?

+0

potrebbe cambiarlo in un numero ...! –

+3

'typeof '3'' =>" stringa " ' typeof +' 3'' = "" numero " – dfsq

+2

Il' + 'nel' return + (x * y); 'è ridondante, in realtà – Ian

risposta

2

Forse sto leggendo questo torto, ma dalle specifiche http://asmjs.org/spec/latest/#parameter-type-annotations

è quello che lo lancia come un doppio?

+0

Sì, mi sono perso. È interessante vedere come il cast 'int' e' double' viene eseguito in modo diverso. – adrianp

+5

No, non lo specifica espressamente come "doppio". Per fare ciò, si usa 'parseFloat' e' parseInt' (per "interi"). Usando '+' lo converte in un 'numero'. Quindi, se è "int" -looking, lo converte in un "int". Se è "float" -looking, lo converte in "double". – Ian

+0

Grazie per il chiarimento. – thealfreds

5

È semplicemente utilizzato per casting un valore con un altro tipo di numero. Additonally restituirà NaN se il valore dopo il simbolo + non può essere convertito in number.

FIDDLE

Dal libro Javascript e Jquery - The Missing Maunal

var numOfShoes = '2'; 
var numOfSocks = 4; 
var totalItems = +numOfShoes + numOfSocks; 

L'aggiunta di un segno + prima di una variabile (assicurarsi che non c'è nessuno spazio tra i due) dice il Interprete JavaScript per provare a convertire la stringa in un valore numerico: se la stringa contiene solo numeri come "2", finirai con la stringa convertita in un numero. In questo esempio, si finisce con 6 (2 + 4). Un'altra tecnica è quella di utilizzare il numero() comando simile:

var numOfShoes = '2'; 
var numOfSocks = 4; 
var totalItems = Number(numOfShoes) + numOfSocks; 

Number() converte una stringa in un numero, se possibile. (Se la stringa è solo lettere e numeri non , si ottiene il valore NaN per indicare che non si può trasformare le lettere in un numero.)