【问题标题】:unidentified bug in a try catch javascript statementtry catch javascript 语句中的未知错误
【发布时间】:2014-10-31 07:27:01
【问题描述】:

我正在尝试实现一个(非常)简单的 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] 设置为未定义。当我 parseInt(localStorage[0]) 时,它返回 NaN,并将其存储到发票中。我在发票和 NaN 上使用了双等于条件,因此,以防万一,即使 NaN 是一个字符串(它不应该是),它也应该是正确的。

我的问题是:为什么,当我说“throw...”时,它不调用块的 catch 部分?

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

localStorage[NaN] : [object 对象]

它甚至不运行 catch 块,事实上,它继续运行 try 块,即使它应该抛出异常。

这是为什么?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    NaN 不等于自身,使用isNaN

    【讨论】:

    • 这种行为通常是不公平的,“wtf javascript!!!”的目标厘米。它实际上是在 IEEE-754 浮点数标准中定义的,Javascript 实现了该标准。
    • 是的,真的!但谢天谢地,isNaN。我们的祖先在创建它时就知道我们会遇到这个问题。不幸的是,他们没有预见到一个人必须知道它的存在才能对人有价值!
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多