JS中的错误分类
1.语法错误
JS代码在预编译时 就发现了错误
- 特点:
1)代码没有机会执行
2)错误最好找
Uncaught SyntaxError: Function statements require a function name
function () {
}
2.引用错误
通常访问一个没有定义的变量就会发生引用错误
解决办法:先定义好这个变量,再使用之
- 特点:JS代码在执行时的时候,才会发现引用错误,错误之后的代码就不执行
console.log("start")
// index.html:38 Uncaught ReferenceError: a is not defined
console.log(a);
console.log("end")
3.类型错误
使用类型不当 你提供的数据,不是JS想要的
- 也是JS代码在执行时才会发现 类型错误之前的代码也会执行,之后的代码不会执行
- 解决办法:一般是你数据类型使用不当,修改之就OK了
console.log("start")
TypeError: f is not a function
var f = 110;
f();
console.log("end")
4.范围错误
使用容器时,范围指定不当
// Uncaught RangeError: Invalid array length
// 定义一个数组
var arr = ["a","b","c"]; // 定义数组方式1
var arr2 = new Array(10); // 定义数组方式2 10表示数组中可以存储10个数据
var arr3 = new Array(-5);
5.逻辑错误
上面的4类错误,在控制台都会报错,修改就OK了,。还有一类错误,控制台不会报错,叫逻辑逻辑错误。
逻辑错误解决办法:通过debugger调试错误。
异常处理
异常不是错误,异常是指可能出错的错码。
语法:
try{
// 放可能出错的代码
}catch(e){
// 如果上面的代码错误了,就到这里进行错误的处理,其中e表示错误对象
// 它里面包含了错误信息。通过查看e,可以知道它到底出了什么错误
}finally{
// 无论对错,代码都会执行到此处,在JS中用的不多
}
try{
console.log(a); // 放可能出错的代码
}catch (e) {
console.log("有错误:",e);
}finally {
console.log("最终finally一定会执行");
}
try{
var a = 0;
console.log(a);
if(a == 0){
// 程序员主动抛出一个错误
throw new Error("不能为0"); // 抛出错误 catch会捕获到
}
}catch (e) {
console.log("友情提示:这里有点小问题,工程师正在解决中...",e)
}
逻辑与 或
var a = 10;
var b = 0;
// b && a++; &&左结合性 b的值是0
// b的值是0 &&两侧要放布尔值
// 不是布尔值 要发生隐式类型转化 0 转成false
// false && a++ 第1个操作数就已经决定了整体的值是false
// 如果说第一个操作数能决定整体的值,JS会停止对第二个操作数的运算
// a++就不执行了
var c = b && a++; // b的值是false 按理说是把false赋值给c c的值是false 但是&&得到的值不是隐式类型转化后的值,是隐式类型转化之前的值
var d = a++ && b; // a++后 a的值是11 整体的值是10 10转成true 不能确定 看第2个操作数 b是0 0转成false 整体就是false 第1个操作数不能确定整体的值,那么整体的值就是第2个操作数的值
console.log(a); // 11
console.log(b); // 0
console.log(c); // 0
console.log(d); // 0