javaScript代码飘红报错看不懂?读完这篇文章再试试


Posted in Javascript onAugust 19, 2020

一、本文将会出现以下英语词汇

assignment[əˈsaɪnmənt] 赋值;分配
assignment [əˈsaɪnmənt] 分配;任务
call [kɔːl]  调用
caught [kɔːt]  捕获;接住;截住;拦住;
constructor [kənˈstrʌktə(r)] 构造器
cannot [ˈkænɒt]  不是
catch [kætʃ]  接住;抓住
constant[ˈkɒnstənt]  常量
defined [dɪˈfaɪnd]  定义
error [ˈerə(r)]  错误; 差错; 谬误;
exceeded [ɪkˈsiːdɪd]  超过
function [ˈfʌŋkʃn]  函数
finally [ˈfaɪnəli]  最终;最后
invalid [ɪnˈvælɪd]  不承认的; 无效的
initializer [ɪˈnɪʃəˌlaɪzə]  初始值
left-hand [ˈleft hænd]  左边的
Maximum [ˈmæksɪməm]  最大
property [ˈprɒpəti]  属性;财产
stack [stæk]  堆栈
shorthand [ˈʃɔːthænd]
syntax [ˈsɪntæks]  句法; 句法规则; 语构;
side [saɪd] 一边;一侧;
reference [ˈrefrəns]  谈及; 涉及;
range [reɪndʒ]  范围;界限;区间; 类; 种;
token [ˈtəʊkən]  令牌;标记
try [traɪ]  尝试
throw [θrəʊ]  投;掷;抛;扔;摔;丢;猛推;使劲撞
Uncaught  未捕获
unexpected [ˌʌnɪkˈspektɪd]  出乎意料的;始料不及的
undefined [ˌʌndɪˈfaɪnd]  未定义
variable[ˈveəriəbl]  变量

二、带你领略JS常见的四种Error类型

1、ReferenceError(引用错误):使用了未定义的变量。错误之前的代码会执行,之后代码不会执行。

// 1、变量未定义便直接使用
console.log(my);
// 报错:Uncaught ReferenceError: my is not defined
// 翻译:my未定义
 
// 2、将变量赋值给一个无法被赋值的东东
Math.random()=1;
// 报错:Uncaught ReferenceError: Invalid left-hand side in assignment
// 翻译:左侧的赋值无效

2、TypeError(类型错误):变量或参数不是预期类型,或调用对象不存在的属性方法。错误之前的代码会执行,之后代码不会执行。

// 1、变量不是预期类型,比如对字符串、布尔值、数值等原始类型的值使用new命令。
let userName = new "zhangpeiyue";
// 报错:Uncaught TypeError: "zhangpeiyue" is not a constructor
// 翻译:"zhangpeiyue" 不是一个构造函数。new 操作符后应该是一个构造函数
 
// 2、变量不是预期类型,比如变量被作为函数来使用
let userName = "zhangpeiyue";
console.log(userName())
// 报错:Uncaught TypeError: userName is not a function
// 翻译:userName 不是一个函数
 
// 3、对象的属性或方法不存在
const obj = undefined;// 为null也会报错
console.log(obj.userName);
// 报错:Uncaught TypeError: Cannot read property 'userName' of undefined
// 翻译:undefined的环境下无法读取属性“userName”

3、RangeError(范围错误):数据值不在JS所允许的范围内。错误之前的代码会执行,之后代码不会执行。

// 1、递归函数未设置跳出的条件
function run(){
 run();
}
run();
// 报错:Uncaught RangeError: Maximum call stack size exceeded
// 翻译:超出最大调用堆栈大小。原因函数一直调用,直到达到调用堆栈限制。
 
// 2、无效的数组长度,应该是个正整数
const arr =new Array(-1);
// 报错:Uncaught RangeError: Invalid array length
// 翻译:无效的数组长度

4、SyntaxError(语法错误):即写的代码不符合js编码规则。我们可以根据后面的信息提示去修改错误,当然,语法错误,浏览器会直接报错,整个代码都不会执行。

// 1、程序错误,比如写错,或者缺少 , ) ; } 这些符号。
const obj = {;
// 报错:Uncaught SyntaxError: Unexpected token ';'
// 翻译:";"该标记有些出乎意料。
 
// 2、变量定义不合法
let 8userName = "zhangpeiyue";
// 报错:Uncaught SyntaxError: Invalid or unexpected token
// 翻译:定义的变量标记无效
 
// 3、对象属性赋值语法错误
const obj = {
 userName = "zhangpeiyue"
}
// 报错:Uncaught SyntaxError: Invalid shorthand property initializer
// 翻译:对象属性初始值无效。原因:对象中属性与其对应的值之间使用“=”

// 语法错误有很多,在此就不一一列举了

三、通过try…catch处理Error

1、被try包裹的代码块一旦出现Error,会将Error传递给catch并运行catch代码块。不会影响后续代码运行。

try{
 console.log(userName);
}catch (err) {
 // ReferenceError: userName is not defined
 console.log(err);
}
console.log("我还会继续运行哦!!")

2、出现SyntaxError(语法错误),不会被抛出。

try{
 // Uncaught SyntaxError: Invalid or unexpected token
 const 8userName = "zhangpeiyue";
}catch (err) {
 console.log(err);
}
console.log("我不会继续运行了!!")

3、通过 throw new Error 抛出错误

try{
 throw new Error("出现异常了");
}catch (err) {
 // 错误相关信息
 console.log(err.message);// 出现异常了
 // 函数调用栈记录信息
 console.log(err.stack);// Error: 出现异常了
}
console.log("我还会继续运行哦!!")

4、不管有没有异常,finally中的代码都会在try和catch之后执行

try{
 throw new Error("出现异常了");
}catch (err) {
 // 错误相关信息
 console.log(err.message);// 出现异常了
 // 函数调用栈记录信息
 console.log(err.stack);// Error: 出现异常了
}finally {
 // 不管有没有异常,我都会执行。哪怕你有return,我也会执行!
 console.log("不管有没有异常,我都会执行。哪怕你有return,我也会执行!")
}
console.log("我还会继续运行哦!!")

5、总结

  • 只要不发生语法错误,程序即可不中断执行。
  • 使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低。
  • 在try中,尽量少的包含可能出错的代码。
  • 无法提前预知错误类型的错误,必须用try catch捕获。
  • finally可以省略。
try{

 //可能发生错误的代码
}catch(err){
 //只有发生错误时才执行的代码
}finally{
 //无论是否出错,肯定都要执行的代码
}

最后,代码出现错误并不可怕,真正可怕的是你的业务及代码逻辑出现问题才是真正灾难的开始!

到此这篇关于javaScript代码飘红报错看不懂?读完这篇文章再试试的文章就介绍到这了,更多相关javaScript 代码报错内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
利用JS实现浏览器的title闪烁
Jul 08 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
JavaScript使用循环和分割来替换和删除元素实例
Oct 13 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
javascript电商网站抢购倒计时效果实现
Nov 19 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
jQuery解析XML 详解及方法总结
Sep 28 Javascript
详解angularjs结合pagination插件实现分页功能
Feb 10 Javascript
Vue入门之animate过渡动画效果
Apr 08 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
Apr 28 Javascript
JavaScript实现拖拽效果
Mar 16 Javascript
jQuery实现简单评论功能
Aug 19 #jQuery
原生JS实现多条件筛选
Aug 19 #Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
Aug 19 #Javascript
微信小程序通过websocket实时语音识别的实现代码
Aug 19 #Javascript
JS实现炫酷雪花飘落效果
Aug 19 #Javascript
javascript实现雪花飘落效果
Aug 19 #Javascript
js实现直播点击飘心效果
Aug 19 #Javascript
You might like
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
php单一接口的实现方法
2015/06/20 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
Python中设置变量访问权限的方法
2015/04/27 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
python yield关键词案例测试
2019/10/15 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
成考报名单位证明范本
2014/01/16 职场文书
创先争优制度
2014/01/21 职场文书
小学安全教育材料
2014/02/17 职场文书
2014年技术员工作总结
2014/11/18 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle