前言

今日话题,了解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"
}

兼容性

最新文章

  1. C# 技巧(3) C# 操作 JSON
  2. mongodb学习03 操作详解
  3. js修改:before、:after的内容
  4. iOS -Swift 3.0 -String(字符串常规用法)
  5. 1、探究java方法参数传递——引用传递?值传递!
  6. c++设计模式之观察者模式
  7. 打印等腰三角形as3
  8. reg 正则
  9. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题
  10. python print 在windows上 出现 Bad file descriptor error
  11. CPU TFLOPS 计算
  12. 12款 JavaScript 表格控件(DataGrid)
  13. bootstrap2.2登录验证
  14. 【bzoj3196】 Tyvj1730—二逼平衡树
  15. 设置tab标签页 遮挡部分
  16. 【C基础】之联合体
  17. SonarQube使用教程
  18. Mac 下使用brew install 报错: Cowardly refusing to `sudo brew install'
  19. Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal ntsc
  20. Codeforces Round #431 (Div. 2) C. From Y to Y

热门文章

  1. 12. 集合类Collection和Map
  2. Git 的常用的命令
  3. Spring 核心技术(5)
  4. 在Docker中部署Spring Boot项目
  5. light oj 1159 - Batman LCS
  6. mysql中left join right join inner join用法分析
  7. 使用nginx代理centos yum 源
  8. zookeeper 集群配置
  9. 学习TensorFlow的第一天
  10. Android使用xUtils3上传图片报错解决:java.lang.ArrayIndexOutOfBoundsException: 70918