在代碼庫我的工作,我遇到了這樣的代碼:parseFloat是否會拋出錯誤?
try {
price = parseFloat(price);
} catch (err) {
console.log(err);
}
我知道,在price
不能變成一些大多數情況下,它會只是獲得NaN
值來代替。我的問題是:是否有這種情況會引發錯誤,使try-catch-construction成爲必需?
在代碼庫我的工作,我遇到了這樣的代碼:parseFloat是否會拋出錯誤?
try {
price = parseFloat(price);
} catch (err) {
console.log(err);
}
我知道,在price
不能變成一些大多數情況下,它會只是獲得NaN
值來代替。我的問題是:是否有這種情況會引發錯誤,使try-catch-construction成爲必需?
有沒有這樣的情況下,它會拋出一個錯誤,使try-catch-construction必要?
是的。除了參考錯誤(因爲price
未被聲明)或parseFloat
被某些不是函數或類似內容的內容覆蓋之外,內建函數也可能會拋出異常。
但是,當你傳遞一個字符串時,它從不會拋出錯誤。它只會在嘗試將參數轉換爲字符串失敗並出現異常時拋出。該實例包括:
[Symbol.toPrimitive]
,.valueOf
或.toString
方法parseFloat()
本身只返回並且從不拋出錯誤。但是,如果變量price
尚未在上下文中聲明,你會得到這樣的錯誤:
Uncaught ReferenceError: price is not defined
它解釋了爲什麼在它周圍有一個try/catch塊的原因。
所以要回答你的問題:是的,有些情況下,如果你不能相信先前的js執行/上下文(由於adblockers或類似的情況),但不是它的功能parseFloat()
引發錯誤口譯員。
雖然這個錯誤與'parseFloat'沒有任何關係,但是在它達到'parseFloat'之前就拋出了(通過嘗試讀取一個未聲明的變量)。 – Quentin
@quentin正確,所以我澄清說。但是,如果你閱讀實際的問題,不僅僅是標題,OP說*我的問題是:是否有這樣的情況會引發錯誤,使try-catch-construction成爲必需?*我的答案解釋說,「不, parseFloat()不能給出錯誤「在問題的上下文中是誤導性的。所以請收回你的低估,這是OP的問題的答案。 –
簡短的回答:
號從MDN
從給定的字符串解析的浮點數。如果第一個字符不能被轉換爲數字,則返回NaN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat
如果變量不存在,它仍然可能會失敗並顯示錯誤消息。 OP在使用'parseFloat()'時明確地詢問是否有必要使用try/catch。 –
沒有的情況下拋出錯誤。
它會總是返回NaN,如果字符不能轉換爲數字。
取決於「價格」是什麼。嘗試'var price = {valueOf(){throw new Error; }}' – Bergi