2014-06-05 60 views
-3

我需要檢查是否值isNaN("") === true但它返回false,但parseFloat("")返回NaN如何解析parseFloat(「」)和isNaN(「」)

爲什麼我需要這是因爲我正在使用JSON.stringify()進行散列檢查,而敲除observable而不是數值會返回字符串數值。

E.g.它將返回"1.23"而不是1.23

問題:如何解析字符串數值而不會得到NaN作爲結果?

+1

我很困惑你到底想要什麼。你想過濾掉'「」'? –

+0

如果您不想退出,請在未預期輸入時選擇回退,例如'x = + str || 0;'(簡單情況,因爲'0 || 0'給出'0',雖然它來自_RHS_) –

回答

4

如何解析字符串數值而不會得到NaN結果?

那麼......你不能,如果值不能被解析爲數值。但是"1.23"可以被解析爲一個數值:

var num = parseFloat("1.23"); 
console.log(num); // 1.23 

如果需要檢查,如果結果將是NaN,檢查結果

isNaN(parseFloat(yourInput)) === true 

...除了有正好點在=== true那一部分,所以:

isNaN(parseFloat(yourInput)) 

parseFloat以及如果您將字符串傳入isNaN遵循不同的規則,則使用默認的強制轉換號碼。特別是,parseFloat將從第一個非數字開始停止解析,但isNaN [實際上]使用Number函數,如果存在非數字字符,則該函數將失敗。因此,如果您需要依靠從parseFloat得到的結果不是NaN,則必須致電parseFloat並將其結果傳遞到isNaN

下面是一個例子:"1.23aaa"讓我們來看看我們所看到的有:

console.log(parseFloat("1.23aaa"));  // 1.23 
console.log(isNaN("1.23aaa"));    // true!! 
console.log(isNaN(parseFloat("1.23aaa"))); // false 

parseFloat停止嘗試,作爲第一a的,但是從字符串默認脅迫編號你傳遞一個字符串轉換成isNaN調用不是

+0

好點。我只是想用'isNaN'來檢查值,但是這樣當我真正檢查'parseFloat'結果可以解決問題。 – skmasq

+0

@skmasq:爲了完整:另一種方法是繼續使用'isNaN(string)',然後使用'Number(string)'來解析它。這是在這兩種情況下使用相同規則的另一種方式。 –