语法错误:
语法错误,也被称为解析错误,在编译时进行传统的编程语言,并出现在JavaScript解释时。
例如,下面一行将导致一个语法错误,因为它缺少一个右括号:
[js] view plaincopyprint?
<script type="text/javascript">
<!--
window.print(
//-->
</script>
[js] view plaincopyprint?
<script type="text/javascript">
<!--
window.print(
//-->
</script>
当一个语法错误在JavaScript中出现,只有在同一个线程中包含的语法错误的影响,在其他线程的代码被执行;代码依赖于包含错误的代码不会被执行。
运行时错误:
执行(编译/解释后)在运行时错误,也被称为异常,会引发。
例如,下面一行将导致运行时错误,因为这里的语法是正确的,但在运行时它正试图调用非存在的方法:
[js] view plaincopyprint?
<script type="text/javascript">
<!--
window.printme()
//-->
</script>
[js] view plaincopyprint?
<script type="text/javascript">
<!--
window.printme()
//-->
</script>
例外情况也影响到它们发生的线程,允许其他JavaScript线程继续正常执行。
逻辑错误:
逻辑错误可能是最困难的类型的错误跟踪。这些错误是不是一个语法或运行时错误的结果。相反,当发生一个错误的驱动脚本逻辑,你没有得到所期望的结果。
你可能无法抓到这些错误,因为这取决于程序是什么类型的逻辑是基于业务需求。
try...catch...finally 语句:
JavaScript的最新版本中添加的异常处理能力。JavaScript实现 try ... catch... finally结构以及抛出操作来处理异常。
你可以捕获程序员生成和运行时异常,但不能捕获JavaScript语法错误。
这里是 try...catch...finally 块语法:
[js] view plaincopyprint?
<script type="text/javascript">
<!--
try {
// Code to run
[break]
} catch ( e ) {
// Code to run if an exception occurs
[break]
}[ finally {
// Code that is always executed regardless of
// an exception occurring
}]
//-->
</script>
try块必须后跟只有一个catch块或者一个finally块(或两者之一)。当一个异常在try块时,除被放置在e和catch块被执行。 try/catch语句后的可选finally块无条件地执行。
示例:
下面是一个例子,我们正试图调用一个不存在的函数,这将引发异常。让我们来看看它的行为,不具有try ... catch:
[js] view plaincopyprint?
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100
alert("Value of variable a is : " + a )
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" οnclick="myFunc()" />
</form>
</body>
</html>
现在,让我们尝试使用 try ... catch 捕获这个异常,并显示一个用户友好的消息。也可以取消此消息,如果要隐藏从用户这个错误。
[js] view plaincopyprint?
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100
try {
alert("Value of variable a is : " + a )
} catch ( e ) {
alert("Error: " + e.description )
}
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" οnclick="myFunc()" />
</form>
</body>
</html>
可以使用finally块将永远try/catch语句后,无条件地执行。下面是一个例子:
[js] view plaincopyprint
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100
try {
alert("Value of variable a is : " + a )
}catch ( e ) {
alert("Error: " + e.description )
}finally {
alert("Finally block will always execute!" )
}
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" οnclick="myFunc()" />
</form>
</body>
</html>
throw 语句:
可以使用throw语句来提高你的内置异常或自定义异常。后来这些异常可以被捕获并可以采取适当的行动。
以下是表示throw语句的用法的例子。
[js] view plaincopyprint
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
var a = 100
var b = 0
try{
if ( b == 0 ){
throw( "Divide by zero error." )
}else{
var c = a / b
}
}catch ( e ) {
alert("Error: " + e )
}
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" οnclick="myFunc()" />
</form>
</body>
</html>
您可以使用字符串,整数,布尔或对象在一个函数抛出一个异常,那么可以捕捉例外在相同的函数,我们在上面做了,或者使用try ... catch块在其他的函数。
onerror() 语法
onerror事件处理程序是第一个特点,方便JavaScript处理错误。错误事件被触发窗口对象,每当一个异常页面上出现。例如:
[js] view plaincopyprint
<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function () {
alert("An error occurred.")
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" οnclick="myFunc()" />
</form>
</body>
</html>
onerror事件处理程序提供了三条信息,以找出错误的确切性质:
错误消息 . 浏览器将显示给定的错误相同的消息
URL . 在发生错误的文件
行号. 在导致错误的URL给出的行号
这里是例子来说明如何提取此信息
[js] view plaincopyprint
<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function (msg, url, line) {
alert("Message : " + msg )
alert("url : " + url )
alert("Line number : " + line )
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" οnclick="myFunc()" />
</form>
</body>
</html>
可以显示在任何方式,你觉得这是更好的提取信息。
可以使用onError方法来显示错误消息的情况下没有在如下加载图像的任何问题:
[js] view plaincopyprint?
<img src="myimage.gif"
οnerrοr="alert('An error occurred loading the image.')" />
[js] view plaincopyprint
<img src="myimage.gif"
οnerrοr="alert('An error occurred loading the image.')" />
可以使用的onerror许多HTML标记错误的情况下显示相应的信息。
详解1000+项目数据分析出来的10大JavaScript错误
10个用Console来Debug的高级技巧
有浏览器的地方就有Fundebug
Debug前端HTML/CSS
转载于:https://www.cnblogs.com/curationFE/p/handle_javascript_exception.html
相关资源:javascript容错处理代码(屏蔽js错误)_js容错处理-其它代码类资源...
原文链接:http://www.cnblogs.com/curationFE/p/handle_javascript_exception.html
点击阅读全文
打开CSDN,阅读体验更佳
Vue.js中filterBy过滤器导致网页直接白屏_执笔看墨花开的博客-CSDN博 ...
一用这个方法就白屏,也没有报错,后来进vue官网一查才知道,filterBy被替换了 以前是这样的写法: <pv-for="user in users | filterBy searchQuery in 'name'">{{user.name}} 1 最新的方法:在 computed 属性中使用 js 内置方法....
继续访问
vue打包js报错问题(低版本浏览器白屏)_十梦她九的博客
在config中的webpack.base.conf.js中,修改编译配置 entry:{ app:['babel-polyfill','./src/main.js'] } 可解决开发时低版本浏览器js报错问题 方案3 使用组件问题 可能使用的组件存在问题导致打包后报错 npm update npm run build...
继续访问
mvc条码打印(使用window.print打印条码)实例
mvc条码打印(使用window.print打印条码)实例 代码: @{ Layout = "~/Views/Shared/_Layout.cshtml"var types = ViewData["types"].ToString().Trim()} <script src="@Url.Content("~/Areas/Area/AreaScripts/PrinterInWarehouse.js")" type="text/javascript"></script
继续访问
javascript中的contains方法
在研究一个多级菜单联动的js时,发现contains方法,以前没有碰到过,不知何意,然后在@司徒正美的博客发现有详细介绍,暂且摘录在此。 IE有许多好用的方法,后来都被其他浏览器抄袭了,比如这个contains方法。如果A元素包含B元素,则返回true,否则false。唯一不支持这个方法的是IE的死对头firefox。不过火狐支持compareDocumentPosition(...
继续访问
vue框架开发出现页面空白、白屏的解决方法总汇_晶晶晶晶晶的博客-CSDN...
最后build/webpack.base.conf.js 文件中配置如下: module.exports= { entry: { app: ["babel-polyfill","./src/main.js"] } }6.Vue只在iOS 10出现白屏问题 a:出现变量定义两次的错误描述,如下: SyntaxError:Cannotdeclareale...
继续访问
vue页面白屏的原因及优化_尼克_张的博客_vue 刷新页面白屏
一、原因:单页面应用的 html 是靠 js 生成,因为首屏需要加载很大的js文件(app.js vendor.js),所以当网速差的时候会产生一定程度的白屏二、解决办法:(1)优化 webpack 减少模块打包体积,code-split 按需加载(2)服务端渲染,在服务端...
继续访问
网页打印javascript:window.print()
在做B/S项目开发时。难免会遇到网页打印问题! 可以用css控制, @media print .a {display:block} .b {display:hidden} 好像是这样。把你不想打印的部分class设为b 首先在网页中添加: VIEWASTEXT>然后就可以依次加入功能按钮了: 将这两块东西放到就不会打印这些按钮了。当然要定义no
继续访问
window.print() 前端实现网页打印详解
转载: window.print() 前端实现网页打印详解_越努力,越幸运!-CSDN博客_window.print
继续访问
前端白屏出现的原因及一些解决方式_HuaHua·Li的博客
前端导致白屏的原因: JS问题 常用框架Vue React Angular都是依靠JS进行驱动, 并且单页面的应用html也是依靠JS生成,在渲染页面的时候需要加载很大的JS文件( app.js 和vendor.js ),在JS解析加载完成之前无法展示页面,从而导致了白屏(当网...
继续访问
Vue.js项目在IE11白屏报错_光脚丫思考的博客_ie11打开...
在vue.config.js里添加如下代码: configureWebpack:config=>{ config.entry.app= ['babel-polyfill','./src/main.js']}, (四)sockjs-client 还有一种情况是在i.e.打开报错显示的sockjs-client错误,如下所示: ...
继续访问
js常用方法(。。。。不完整)
lastIndexOf()substring()split()slice()splice()var s="http://www.baidu.com"var i= s.lastIndexOf(".")//16 var unit= s.substring(i)//.com var url= s.substring(0,i)//http://www.baidu ...
继续访问
详解JavaScript中的异常处理方法
当一个语法错误在JavaScript中出现,只有在同一个线程中包含的语法错误的影响,在其他线程的代码被执行;代码依赖于包含错误的代码不会被执行。 运行时错误: 执行(编译/解释后)在运行时错误,也被称为异常,会引发...
JavaScript 异常处理 详解
主要介绍了JavaScript 异常处理 详解,需要的朋友可以参考下
javascript异常处理实现原理详解
主要介绍了javascript异常处理实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
最新发布 JavaScript异常处理
JavaScript异常处理 一:异常处理 【错误类型】 Error(错误)表示系统级的错误和程序不必处理的异常,是 JavaScript 运行环境中的内部错误或者硬件问题,比如,内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择。 系统错误 程序错误 用户错用 【异常】 所谓异常,表示需要捕捉或者需要程序进行处理的地方,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。 【error对象】 创建错误 let err = new Erro
继续访问
JavaScript代码异常监控实现过程详解
JavaScript异常一般有两方面:语法错误和运行时错误。两种错误的捕获和处理方式不同,从而影响具体的方案选型。通常来说,处理JS异常的方案有两种:try…catch捕获 和 [removed]捕获。以下就两种方案分别分析各自的...
webview加载页面,JS方法不能加载的问题解决
今天发现在webview,没有办法加载JS方法,跳不出那种提示框,就是写了webview.getSettings().setJavaScriptEnabled(true)这一句也完全没用。后来发现网上说的解决方案是用要用到WebChromeClient ,并且重写它里面的几个方法才行。 MyWebChromeClient.java package com.example.webview
继续访问
IE与firefox对CSS解析的差异说明
<以下摘自:草堂学社,原文路径:http://www.cm1314.cn/Article/site/ht/200704/16698.html>列举了一些常见,新手经常问的问题。举例并说明解决方法。(内容在下面对应)1.超链接访问过后hover样式就不出现的问题2.FF下如何使连续长字段自动换行3.ff下为什么父容器的高度不能自适应4. IE6的双倍边距BUG5. IE6下绝对...
继续访问
javascript错误处理方式有哪些
今天给大家分享的这篇javascript教程不是很适合初学者观看,对此不熟悉的朋友建议先看看基础的知识点。本文主要讲述java中的出错处理,也会涉及到javascript异常处理使用的正反列,以及ajax的异步处理。 Java的事件驱动机制让Java更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件。当一个错误发生时,一个事件就在某个点抛 出。理论上,有人会说错误是Java中的简单
继续访问
Javascript异常处理机制详解
在ES3之前js代码执行的过程中,一旦出现错误,整个js代码都会停止执行,这样就显的代码非常的不健壮。 在Java或C#等一些高级语言中,都提供了异常处理机制,可以处理出现的异常,而不会停止整个应用程序。 从ES3开始,js也提供了类似的异常处理机制,从而让js代码变的更健壮,及时执行的过程中出现了异常,也可以让程序具有了一部分的异常恢复能力。 一、Javascrip
继续访问
【JavaScript源代码】Angular处理未可知异常错误的方法详解.docx
Angular处理未可知异常错误的方法详解 代码写得再好,始终都无法完整的处理所有可能产生异常,特别是生产环境中的应用,很大一部分是数据来自用户、远程,很难保证所有数据都按程序规定的产生。事实上,除非测试...
JavaScript错误处理操作实例详解
良好的错误处理机制可以让用户得到及时的提醒,所以让我们来看看 JavaScript 提供了哪些针对错误处理的工具和方法吧O(∩_∩)O~ 1 try-catch 语句 ECMA-262 第 3 版引入了 try-catch 语句,这时 JavaScript 处理异常...
热门推荐 Javascript异常(exception)处理机制详解 JS、异常Error属性
在ES3之前js代码执行的过程中,一旦出现错误,整个js代码都会停止执行,这样就显的代码非常的不健壮。 在Java或C#等一些高级语言中,都提供了异常处理机制,可以处理出现的异常,而不会停止整个应用程序。 从ES3开始,js也提供了类似的异常处理机制,从而让js代码变的更健壮,及时执行的过程中出现了异常,也可以让程序具有了一部分的异常恢复能力。 一、Javascr
继续访问
JS高级调试技巧:捕获和分析 JavaScript Error详解
前端工程师都知道 JavaScript 有基本的异常处理能力。我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常。但估计绝大多数前端工程师都没考虑过收集这些异常信息
JavaScript错误处理机制详解
从ES3开始,js也提供了类似的异常处理机制,从而让js代码变的更健壮,即使执行的过程中出现了异常,也可以让程序具有了一定的异常恢复能力。
继续访问
js异常白屏报错
把错误函数替换掉
javascript
虽然最近几年JavaScript有了很多进步,但是相比于其它语言的开发者,JavaScript开发者仍然只有少得可怜的调试工具。因此在JavaScript中throwerror就显得比其它语言更有价值。我们可以用throw关键字来抛出一个对象。我们可以抛出任何类型的对象,不过Error对象是最常用的:
throw new Error("Something bad happened.")
当我们用这样的方式抛出错误,而这个错误又不被try-catch捕获时,浏览器就会用其通常的方式显示上面的错误信息(Something
bad
happened)。在IE里会在浏览器的左下角出现一个小图标,当双击图标时会弹出一个带着上面错误提示的对话框;安装有Firebug插件的火狐浏览器会在控制台显示错误信息;Safar和Chrome会在Web
Inspector中显示;Opera会在错误控制台显示。一句话,它们会像你没有抛出错误时一样处理。但不同的是它会通过浏览器向你提供具体的信息,而不是一个发生错误的行列号。你可以为错误信息加入任何需要的信息,来帮你成功解决问题。我建议在错误信息中提供发生错误的函数名称以及错误原因。看下面这个函数:
function addClass(element, className){
element.className += " " + className
}
这个函数的功能是向一个给定的element加入新的CSS
class(这在JavaScript中非常普遍)。但如果element是null的时候会发生什么?你会得到一个这样的错误提示“object
expected”,很隐晦。然后你需要查看执行堆栈(如果浏览器支持这个功能)来准确定位错误的源头。如果我们抛出一个错误调试就变得简单了:
function addClass(element, className){
if (element != null &&typeof element.className == "string"){
element.className += " " + className
} else {
throw new Error("addClass(): First arg must be a DOM element.")
}
}
先不讨论如何精确的判断对象是否是一个DOM
element,这个方法现在能够在非法的element参数传入时提供一个更明确的错误信息。看到了如此详尽的错误描述你就能立刻找到错误的源头了。我习惯把throw
error看作是贴一个任务贴纸,告诉我错误的原因。
懂得了如何throw error只是事情的一半;懂得何时throw
error则是另一半。因为JavaScript并不对参数进行类型检查,许多开发者都错误的认为他们应该在所有的函数中进行该检查。那样的话是不实际的,而且会降低脚本的执行效率。问题的关键在于找到最有可能出错的代码部分,并且只在那里throw
error。一句话就是只在已经发生error的地方throw error。
如果一个函数只被一个已知的实体调用,那么错误检查基本上是没有必要的(例如私有函数就是这样);如果你不能事先确定所有函数被调用的地点,那么你需要进行错误检查并throw自己的error。throw
error最好的地方是功能函数,那些是脚本环境基本组成部分的,而且可以在任意地点被调用的函数。JavaScript的库函数就是这样的例子。
所有JavaScript的库函数都应当为已知的错误条件从它们的公共接口throw
error。对于YUI,jQuery以及Dojo等等,我们无法确定会在何时何处调用它们的库函数。所以当你犯错时对你进行提示就是这些库函数的任务。为什么呢?因为你不可能到库函数内部去找出错误所在。error的调用堆栈应当终止于库函数接口,不要再深入。没有什么比在12层函数嵌套中寻找错误更遭的事了;库函数开发人员有责任预防这种事情的发生。
这一条同样适用于私有的JavaScript库函数。许多Web应用程序都有它们自己专属的JavaScript库,可能是通过这些库来构建的,也可能是用库来代替公共的操作。库函数的作用是降低开发难度,这是通过向人们提供其抽象表达而不是复杂的实现细节来实现的。throw
error可以让这些复杂的实现隐藏在安全的地方不被开发者发现。
JavaScript同样提供了try-catch语句,用来在浏览器处理之前捕获被throw的error。开发者常常会为到底是仅仅throw
error还是用try-catch将其捕获而犹豫不决。我们应当只在程序栈的最底层throw
error,就像前面提到的,最典型的就是JavaScript库函数。所有应用程序都应当在逻辑上具有处理error的能力,因此应当在底层模块中捕获error。
在应用程序逻辑中我们总是知道为什么要调用某个函数,因此它们非常适合处理error。有一点要引起注意,就是永远不要在try-catch结构中使用空的catch语句;你应当用某种方法处理错误。这钟处理在开发中和最终生产时会有些不同,但必须进行处理。当错误发生时,不应当仅仅将其包裹在try-catch里不管——这是掩盖错误而不是解决错误。
在JavaScript中throw error是一门艺术。在代码中找到适当的throw error的地点会花费一些时间。不过一旦你找到了这些地点,你的调试时间就会大大降低,而你对代码的满意度会获得提升。