JavaScript中常见的几种错误

一、Javascript的异常处理机制

当javascript代码中出现错误的时候,js引擎就会根据js的调用栈逐级寻找对应的catch,如果没有找到相应的catchhandler或catchhandler本身又有error或者又抛出新的error,最后就会把这个error的处理交给浏览器,并显示在错误控制台中)显示错误信息给访问者。

二、try/catch/finally

是js提供的异常处理机制,用法如下:

try{//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行}catch(e){//如果try代码块中抛出了异常,catch代码块中的代码就会被执行。//e是一个局部变量,用来指向Error对象或者其他抛出的对象}finally{//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),//finally代码块中始终会被执行}
三、常见错误3.1syntaxError

顾名思义,典型的语法错误。

functionfoo{}
if{}

Js代码是从上往下依次执行,但是js引擎先解析代码是否语法出错,如果语法都解析不通过,那么显而易见:一行代码也不会执行,从而会在控制台中输出语法报错:

syntaxError错误

3.2变量未定义

变量未定义(也叫未声明)指的是,当程序中使用了一个未定义的变量则会报错。

如下代码:

varfoo=1varbar=foo+n1

显而易见,n1变量是未定义的就直接使用,从而会在控制台中输出如下错误:

XXXisnotdefined变量未定义

3.3TypeError错误

TypeError错误指的是数据类型未正确使用。

例如一:

varfoo=function(){('foo')}foo='helloworld'foo()

在某些逻辑下,foo本身存储的是函数,但是误把foo赋值了一个字符串或其它不是函数的数据类型,但是foo当作函数来调用了,则会报TypeError错误在控制台中输出:

TypeError,xxxisnotafunction

例如二:

未正确获取元素,导致得到一个null而不是DOM节点对象后,绑定事件而引发的TypeError错误。

scriptvaroBtn=('btn')//因为代码从上往下解析的原因,还未解析到button标签,返回为null。//null是空对象,不能绑定任何属性,onclick虽然是事件,//但也是对象中属性的一部分,所以报TypeError错误。=function(){('bar')}/scriptbuttonid="btn"foo/button

cannotsetproperty'onclick'ofnull

正确错误是把选择元素的js代码放置html标签之后,也就是紧邻/body标签,或放在事件中。

=function(){varoBtn=('btn')//因为代码从上往下解析的原因,还未解析到button标签,返回为null。//null是空对象,不能绑定任何属性,onclick虽然是事件,//但也是对象中属性的一部分,所以报TypeError错误。=function(){('bar')}}/scriptbuttonid="btn"foo/button
3.4JSON解析错误

首先,我们需要了解JSON是什么?

JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。

而它的定义规则和js中字面量声明对象很像,所以很多初学者以为json就是js对象,其实这是错误的。

3.4.1JSON是JS对象表示语法的子集。

数据在名称/值对中

数据由逗号分隔

大括号{}保存对象

中括号[]保存数组,数组可以包含多个对象

3.4.2JSON数据的书写格式是
key:value

名称/值包括字段名称(在双引号中),后面写一个冒号,然后是值:

"name":"foo"
3.4.3JSON值可以是:

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true或false)

数组(在中括号中)

对象(在大括号中)

null

前方高能~~~

谈到这里,json数据从哪来呢?

在请求Ajax的时候,会从后台服务器中拿到json数据,往往会把json解析成js对象。则前端工程师会用到方法。有时候前端也会定义JSON数据,如果语法不正确当转成js对象时,则会报错。如下代码:

//varfoo='{name:"bar"}'//name未带双引号varfoo='{"name":bar}'//bar未带双引号varf=(foo)

tokenninJSONatposition

正确的JSON转换js对象的方式如下:

varfoo='{"name":"bar","age":20}'//20无需带,则理解为数值类型varf=(foo)(f)//{name:"bar",age:20},此时可以正确的把json转换成js对象,//通过点语法,也就是和访问到具体的数据

以上是JavaScript中常见的错误,后期遇到会不断更新,感谢小伙伴们的踊跃投稿和留言。

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐