2013-09-27 13 views

Odpowiedz

28

myślę z dwóch sposobów, aby przetestować dla typu wartości:

Metoda 1:

Można użyć metody javascript isNaN, która określa, czy wartość to NaN, czy nie. Ale ponieważ w twoim przypadku testujesz wartość liczbową konwertowaną na ciąg znaków, JavaScript próbuje odgadnąć typ wartości i przekształca ją na wartość 5, która nie jest równa NaN. Dlatego jeśli console.log się wynik, będziesz zaskoczony, że kod:

if (isNaN(i)) { 
    console.log('This is not number'); 
} 

niczego nie powrócić. Z tego powodu lepszym rozwiązaniem byłaby metoda 2.

Metoda 2:

Można użyć javascript metody typeof przetestować typ zmiennej lub wartość

if (typeof i != "number") { 
    console.log('This is not number'); 
} 

Zauważ, że "Używam podwójnego operatora równościowego, ponieważ w tym przypadku typem wartości jest ciąg znaków, ale JavaScript wewnętrznie przekształci się w Number.

Bardziej niezawodną metodą wymuszenia wartości na typ numeryczny jest użycie Number.isNaN, która jest częścią nowej propozycji Ecmascript 6 (Harmony), a więc nie jest rozpowszechniona i w pełni obsługiwana przez różnych dostawców.

+0

Jeszcze lepszy 'typof i! =" Liczba "'. – SeinopSys

4

Użyłem go w ten sposób i jego pracy grzywny

quantity=prompt("Please enter the quantity","1"); 
quantity=parseInt(quantity); 
if (!isNaN(quantity)) 
{ 
    totalAmount=itemPrice*quantity; 

} 
return totalAmount; 
+0

patrz ten kod i zmodyfikuj swój kod ... –

+0

+1 za umieszczenie oświadczenia zwrotu w środku klauzuli if/else. bo kto potrzebuje zasad językowych, prawda? ANARCHIA! – deepelement

2

Twoja logika jest poprawna, ale masz 2 błędy widocznie każdy nieodebrane:

wystarczy zmienić if(Number(i) = 'NaN') do if(Number(i) == NaN)

NaN jest stała i powinieneś użyć podwójne znaki równości porównania, jeden z nich jest używany do przypisywania wartości do zmiennych.

3

Zrobiłem kilka testów w node.js v4.2.4 (ale to prawda w dowolnej implementacji JavaScript):

> typeof NaN 
'number' 
> isNaN(NaN) 
true 
> isNaN("hello") 
true 

niespodzianką jest pierwszy jako rodzaj NaN jest „numer”, ale tak to jest zdefiniowane w javascript.

Więc następnym testy wywołuje nieoczekiwany rezultat

> typeof Number("hello") 
"number" 

ponieważ Number ("Hello") jest NaN

Poniższa funkcja sprawia, że ​​wyniki zgodnie z oczekiwaniami:

function isNumeric(n){ 
    return (typeof n == "number" && !isNaN(n)); 
} 
1

można spróbować ten kod jest dowolną rzeczą, taką jak łańcuch lub liczba:

0

Jeśli chcesz wiedzieć, czy „1” ou 1 można rzutować na liczby, można użyć tego kodu:

if (isNaN(i*1)) { 
    console.log('i is not a number'); 
} 
Powiązane problemy