- 理解浏览器报告的错误
- 处理错误
- 调试Javascriptpt代码
// 结构如下:
// try{
// //可能会导致错误的代码
// window.someNonexistentFunction()
// }catch(error){
// //在错误发生时怎么处理
// console.log(error.message)
// }
// function a(){
// try{
// return 2
// }catch(err){
// return 1
// }finally{
// return 0
// }
// }
// console.log(a()) //0
//几种常见错误类型
// Error 基类型,其他错误类型都基于它。很少见,有也是浏览器抛出的, 主要目的是供开发人员抛出自定义错误
// EvalError 是在使用eval()函数发生异常时抛出.非直接调用的方式使用eval属性的值.或者为eval属性赋值.如果没有把eval当函数用.如下:
//new eval()
//eval = foo
// RangeError 数值超出相应范围时触发,例如:在定义数组时,指定了数组不支持的项数,就会触发。如下:
// var i1 = new Array(-20)
// var i2 = new Array(Number.MAX_VALUE)
// ReferenceError 找不到对象的情况下,会提示这个错误,在访问不存在的变量也会出现这个错误,如下:
// var obj = x;
// SyntaxError 语法错误的Javascript字符串传入eval函数时,会触发这个错误,如下:
//eval('a ++ b')
// TypeError 在js中经常用,变量中保存着意外的类型,或者在访问不存在的方法时,会导致这种错误.原因虽然多种,但归根结底还是由于执行特定于类型的操作时,变量的类型不符合要求导致,如下:
// var o = new 10;
// console.log("name" in true)
// Function.prototype.toString.call("name")
//最常发生类型错误的情况就是传递给函数的参数事先未尽检查,结果传入类型与预期类型不符.
// URIError 使用encodeURI和decodeURI,而URI格式不正确就会导致URIError
//想知道错误的类型,可以如下:
try{
someFunction()
}catch(err){
if(err instanceof TypeError){
//处理类型错误
console.log('1')
}else if(err instanceof ReferenceError){
//处理引用错误
console.log('2')
}else{
//处理其他错误
console.log('3')
}
}
//遇到throw操作符时,代码会立即停止执行.只有try-catch语句捕获被抛出的值时,才会继续执行
// throw 12345
// throw new Error("有什么不好的事情")
// throw new URIError('12321312')
//利用原型链给新创建的错误执行name和message
// function n(message){
// this.name = '错误'
// this.message = message
// }
// n.prototype = new Error()
// throw new n('我的错误')
//
//如果参数不是数组形式就报错
// function process(val){
// if(!(val instanceof Array)){
// throw new Error("process():参数不是数组形式" )
// }
// val.sort()
// for(var i = 0,len = val.length;i<len;i++){
// if(val[i] > 100){
// return val[i]
// }
// }
// return -1
// }
// process(['1','2'])
function g(url){
var pos = url.indexOf('?')
if(pos > -1){
return url.substring(pos + 1)
}
return ''
}
console.log(g('awsdadwdada?asd'))
console.log(['1'] instanceof Array)
//JS中发生错误的主要原因如下:
// 类型转换
//未充分检测数据类型
//发送给服务器或从服务器接收到的数据有错误