2016-10-31 106 views
2

在代碼庫我的工作,我遇到了這樣的代碼:parseFloat是否會拋出錯誤?

try { 
    price = parseFloat(price); 
} catch (err) { 
    console.log(err); 
} 

我知道,在price不能變成一些大多數情況下,它會只是獲得NaN值來代替。我的問題是:是否有這種情況會引發錯誤,使try-catch-construction成爲必需?

+0

取決於「價格」是什麼。嘗試'var price = {valueOf(){throw new Error; }}' – Bergi

回答

4

有沒有這樣的情況下,它會拋出一個錯誤,使try-catch-construction必要?

是的。除了參考錯誤(因爲price未被聲明)或parseFloat被某些不是函數或類似內容的內容覆蓋之外,內建函數也可能會拋出異常

但是,當你傳遞一個字符串時,它從不會拋出錯誤。它只會在嘗試將參數轉換爲字符串失敗並出現異常時拋出。該實例包括:

  • 傳遞一個符號
  • 傳遞對象而不[Symbol.toPrimitive].valueOf.toString方法
  • 傳遞對象,其中這些方法中的一種引發
  • 傳遞對象,其中這些方法都沒有返回原語
0

parseFloat()本身只返回並且從不拋出錯誤。但是,如果變量price尚未在上下文中聲明,你會得到這樣的錯誤:

Uncaught ReferenceError: price is not defined 

它解釋了爲什麼在它周圍有一個try/catch塊的原因。

所以要回答你的問題:是的,有些情況下,如果你不能相信先前的js執行/上下文(由於adblockers或類似的情況),但不是它的功能parseFloat()引發錯誤口譯員。

+2

雖然這個錯誤與'parseFloat'沒有任何關係,但是在它達到'parseFloat'之前就拋出了(通過嘗試讀取一個未聲明的變量)。 – Quentin

+0

@quentin正確,所以我澄清說。但是,如果你閱讀實際的問題,不僅僅是標題,OP說*我的問題是:是否有這樣的情況會引發錯誤,使try-catch-construction成爲必需?*我的答案解釋說,「不, parseFloat()不能給出錯誤「在問題的上下文中是誤導性的。所以請收回你的低估,這是OP的問題的答案。 –

0

沒有的情況下拋出錯誤。

它會總是返回NaN,如果字符不能轉換爲數字。