0
我想實現一個非常簡單的嘗試{}趕上{}塊,看起來像這樣:不明錯誤JavaScript語句
try{
var invoice = parseInt(localStorage[0]);
if(invoice == NaN)
throw "invoice not a number";
localStorage[invoice] = Ticket;
console.log("localStorage["+invoice+'] : '+localStorage[invoice]);
}
catch (e){
console.log(e);
this.test();
}
我要做的就是手動清除localStorage的另一個功能,因此將localStorage [0]設置爲undefined。當我parseInt(localStorage [0]),它返回NaN,並將其存儲到發票。我在發票和NaN上使用了double equals條件,以防萬一,即使NaN是一個字符串(它不應該是),它也應該是真的。
我的問題是:爲什麼當我說「throw ...」時,它不會調用塊的catch部分?
當我運行下面的代碼,我得到了Chrome的控制檯輸出如下:
的localStorage [NaN的]:[目標對象]
它甚至不運行catch塊,事實上,即使在應該拋出異常之後,它仍然繼續運行try塊。
這是爲什麼?
這種行爲通常不公平地是「wtf javascript !!!」的目標。註釋。它實際上是在IEEE-754標準中爲JavaScript實現的浮點數定義的。 – joews 2014-09-06 14:30:53
是的,真的!但感謝isNaN的善意。我們的先輩知道我們會在創造這個問題時遇到這個問題。不幸的是,他們沒有預見到一個人必須知道它對於這個人是有價值的! – papiro 2014-09-07 04:29:22