try-catch javascript语句中的未识别错误

unidentified bug in a try catch javascript statement

本文关键字:识别 错误 javascript 语句 try-catch      更新时间:2023-09-26

我正在尝试实现一个(非常)简单的try{}catch{}块,它看起来像这样:

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。当我解析Int(localStorage[0])时,它返回NaN,并将其存储到发票中。我在invoice和NaN上使用了double equals条件,所以为了以防万一,即使NaN是一个字符串(它不应该是),它也应该是true。

我的问题是:为什么当我说"投掷…"时,它不称为块的接球部分?

当我运行以下代码时,我在Chrome的控制台中得到以下输出:

localStorage[NaN]:[object object]

它甚至不运行catch块,事实上,它继续运行try块,即使在它应该抛出异常之后也是如此。

为什么会这样?

NaN不等于它自己,请使用isNaN