移动版浏览器控制台
谷歌移动版和ios移动版内置了实用工具,支持将设备连接到宿主操作系统中相同的浏览器,然后就可以在对应的桌面浏览器中查看错误了。
此外也可以使用第三方工具直接在移动设备调试,在移动版浏览器上打开调试界面。
try/catch语句:
try{
//可能出错的代码
}catch(error){
//error错误对象必须定义,无论是否使用,肯定有message、name属性,不同浏览器还有一些其他的专有属性。
//出错时要做什么
}finally{
//finally语句块是可选的,但是却是始终运行的;
//try/catch块中的return也无法阻止finally语句块的执行,try/catch块中的return会被忽略。
}
如果try块中有代码发生错误,代码会立即退出执行,并跳到catch块中。
try/catch语句中发生错误时,浏览器会认为错误被处理了,因此就不会再使用本章前面提到的机制错误。也就是控制台中不会显示错误,代码不会终止,会继续执行。
错误类型
Error:
Error是基本类型,其他错误类型继承该类型。
InternalError:
在底层js引擎抛出异常时由浏览器抛出。例如递归过多导致的栈溢出。
EvalError:
在使用eval()函数发生异常时抛出。
RangeError:
在数值越界时抛出。
ReferenceError:
在找不到对象时发生。这种错误是由访问不存在的变量而导致的。这也是“object expected"浏览器错误的原因。
SyntaxError:
在给eval()传入的字符串包含js语法错误时发生。
TypeError:
主要发生在变量不是预期类型,或者访问不存在的方法时。
URIError:
在使用encodeURI()或decodeURI()传入了格式错误的URL时发生。
抛出错误:throw 任何类型的值
使用throw操作符时,代码会立即停止,除非try/catch语句捕获了抛出的值。
捕获错误的目的是阻止浏览器以其默认方式响应;抛出错误的目的是为错误提供有关其发生原因的说明。
error事件
任何没有被try/catch语句处理的错误都会触发window对象上的error事件。
window.onerror = (message,url,line)=>{只支持此种方式添加错误事件处理程序
console.log(message)
return false;可以返回false来阻止浏览器默认报告错误的行为。相当于try/catch语句。
}
try/catch语句会拦截捕获块内的错误,致使错误不会触发window.onerror事件。
一般来说,原始类型的值应该使用typeof 检测,而对象值应该使用instanceof检测。
警告框会阻塞代码的执行。
用选择元素按钮选中某个元素,然后可以在控制台通过$0访问选中的那个元素进行操作。
debugger关键字
在运行时碰到这个关键字,所有主流浏览器都会打开开发者工具面板,并在指定位置显示断点。此外还可以执行标准的代码调试操作(单步进入、单步跳过、继续等等)。
旧版本ie的常见错误:
无效字符:语法中没有定义过的字符。 invalid character :ie中; illegal character:火狐中;
未找到成员:member not found 。 这个错误通常会在给一个已经被销毁的对象赋值时发生。
语法错误:如果网页中引用的一个外部js文件,由于某种原因返回了非js代码,则ie会抛出语法错误。
系统找不到指定资源:The system cannot locate the resource specified. 请求路径长度超过最大url长度时发生这个错误。只有ie由这个长度限制。
try/catch语句和window.onerror可用于阻止浏览器对js错误做出反应。