2013-04-08 16 views
7

Idąc choć dokumentacja asm.js ja obserwowałem to dziwne (przynajmniej dla mnie, zupełnie nowy, JS) snippet całym przykładowy kod:Wpływ x = x + w JavaScript

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

Jaki jest przeznaczenie + w pierwszym wierszu?

+0

może być zmieniony na numer ...! –

+3

'typeof '3'' =>" string " ' typeof +' 3'' => "number" – dfsq

+2

'' 'w' return + (x * y); 'jest zbędne, właściwie – Ian

Odpowiedz

2

Może czytam to źle, ale od specyfikacji http://asmjs.org/spec/latest/#parameter-type-annotations

czy to rzucanie to jako podwójne?

+0

Tak, przegapiłem to. Interesujące, aby zobaczyć, jak "int" i "podwójne" casting odbywa się inaczej. – adrianp

+5

Nie, nie rzuca go specjalnie jako "podwójny". Aby to zrobić, używaj 'parseFloat' i' parseInt' (dla "liczb całkowitych"). Użycie '+ 'zamienia go na' Number'. Więc jeśli jest to widok "int", zamienia go na "int". Jeśli jest to widok "pływający", przekształca go w "podwójny". – Ian

+0

Dziękuję za wyjaśnienie. – thealfreds

5

Jest to po prostu używane dla casting wartość z innym typem do numeru. Dodatkowo zwróci NaN, jeśli wartość po tym symbolu nie może zostać przekonwertowana na number.

FIDDLE

Z książki JavaScript i jQuery - Brakujące Maunal

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

Dodawanie znak + przed zmienną (upewnij się, że nie ma przestrzeni między nimi) informuje się Interpreter języka JavaScript, który próbuje przekonwertować ciąg znaków na wartość liczbową - jeśli ciąg zawiera tylko liczby takie jak "2", kończy się ciągiem skonwertowanym na liczbę. W tym przykładzie kończysz na 6 (2 + 4). Inną techniką jest użycie Number() polecenie tak:

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

Number() konwertuje ciąg znaków na liczbę, jeśli to możliwe. (Jeśli łańcuch jest tylko litery i cyfry nie , można uzyskać wartość NaN, aby wskazać, że nie można włączyć na kilka liter).