你知道JavaScript这六种错误类型吗?

前言

今日话题,了解JavaScript的错误处理机制。

一、ReferenceError

引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。

举栗子

  try {
          console.log(a) // a 未声明的变量
        } catch (e) {
            if (e instanceof ReferenceError) {
                console.log(e.name + ": " + e.message); // ReferenceError: a is not defined 
            } 
        }

构建一个ReferenceError

        try {
          throw new ReferenceError('Hello', 'someFile.js', 10);
        } catch (e) {
         console.log(e instanceof ReferenceError); // true
         console.log(e.message);                   // "Hello"
         console.log(e.name);                      // "ReferenceError" console.log(e.fileName); // "someFile.js" console.log(e.lineNumber); // 10 console.log(e.columnNumber); // 0 console.log(e.stack); // "@Scratchpad/2:2:9\n" } 
    如果未声明变量就使用,就会抛出这个异常哦!
二、TypeError

变量或参数不是预期类型时发生的错误。比如使用new字符串、布尔值等原始类型和调用对象不存在的方法就会抛出这种错误,因为new命令的参数应该是一个构造函数。

举栗子

  try {
          var a = {}
          a.go()
        } catch (e) {
            if (e instanceof TypeError) {
                console.log(e.name + ": " + e.message); // TypeError: a.go is not a function
            } 
        }
三、EvalError

在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。

举栗子

 var myEval = eval;
 myEval("alert('call eval')");
 
    ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。
四、RangeError

数值变量或参数超出其有效范围

举栗子

  try {
         [].length = -1
        } catch (e) {
            if (e instanceof RangeError) {
                console.log(e.name + ": " + e.message); // RangeError: Invalid array length
            } 
        }
五、SyntaxError

语法错误,比如变量名不规范

举栗子

  try {
          var 1 
        } catch (e) {
            if (e instanceof SyntaxError) {
                console.log(e.name + ": " + e.message); // SyntaxError: Unexpected number
            } 
        }
六、URIError

给 encodeURI()或 decodeURl()传递的参数无效

举栗子

捕获一个URIError

 try {
  decodeURIComponent('%');
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message);             // "malformed URI sequence"
  console.log(e.name);                // "URIError"
  console.log(e.fileName);            // "Scratchpad/1" console.log(e.lineNumber); // 2 console.log(e.columnNumber); // 2 console.log(e.stack); // "@Scratchpad/2:2:3\n" } 

创建URIError实例

try {
  throw new URIError('Hello', 'someFile.js', 10);
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message);             // "Hello"
  console.log(e.name);                // "URIError" console.log(e.fileName); // "someFile.js" console.log(e.lineNumber); // 10 console.log(e.columnNumber); // 0 console.log(e.stack); // "@Scratchpad/2:2:9\n" } 
兼容性

 

转载于:https://www.cnblogs.com/ifannie/p/11448553.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值