百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

JavaScript中常见的几种错误 在javascript中进行错误处理的基本语法为

yuyutoo 2024-10-14 16:22 3 浏览 0 评论

一、Javascript的异常处理机制

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

二、try/catch/finally

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

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

三、常见错误

3.1 syntaxError

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

function foo{
}
if{}

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


3.2 变量未定义

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

如下代码:

var foo = 1
var bar = foo + n1

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


3.3 TypeError错误

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

例如一:

var foo = function(){
	console.log('foo')
}
foo = 'hello world'
foo()

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


例如二:

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

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


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

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

3.4 JSON解析错误

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

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

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

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

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号 {} 保存对象
  • 中括号 [] 保存数组,数组可以包含多个对象

3.4.2 JSON 数据的书写格式是

key : value

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

"name" : "foo"

3.4.3 JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

前方高能~~~

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

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

//var foo ='{ name:"bar" }'//name未带双引号
var foo ='{ "name":bar }'//bar未带双引号

var f = JSON.parse( foo )


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

var foo ='{ "name":"bar","age":20 }'//20无需带,则理解为数值类型

var f = JSON.parse( foo )
console.log( f ) //{name: "bar", age: 20} ,此时可以正确的把json转换成js对象,
												//通过 点 语法,也就是f.name和f.age访问到具体的数据

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

相关推荐

自卑的人容易患抑郁症吗?(自卑会导致抑郁吗)

Filephoto[Photo/IC]Lowself-esteemmakesusfeelbadaboutourselves.Butdidyouknowthatovert...

中考典型同(近)义词组(同义词考题)

中考典型同(近)义词组...

WPF 消息传递简明教程(wpf messagebox.show)

...

BroadcastReceiver的原理和使用(broadcast-suppression)

一、使用中注意的几点1.动态注册、静态注册的优先级在AndroidManifest.xml中静态注册的receiver比在代码中用registerReceiver动态注册的优先级要低。发送方在send...

Arduino通过串口透传ESP 13板与java程序交互

ESP13---是一个无线板子,配置通过热点通信Arduino通过串口透传ESP13板与java程序交互...

zookeeper的Leader选举源码解析(zookeeper角色选举角色包括)

作者:京东物流梁吉超zookeeper是一个分布式服务框架,主要解决分布式应用中常见的多种数据问题,例如集群管理,状态同步等。为解决这些问题zookeeper需要Leader选举进行保障数据的强一致...

接待外国人英文口语(接待外国友人的英语口语对话)

接待外国人英文口语询问访客身份:  MayIhaveyourname,please?  请问您贵姓?  Whatcompanyareyoufrom?  您是哪个公司的?  Could...

一文深入理解AP架构Nacos注册原理

Nacos简介Nacos是一款阿里巴巴开源用于管理分布式微服务的中间件,能够帮助开发人员快速实现动态服务发现、服务配置、服务元数据及流量管理等。这篇文章主要剖析一下Nacos作为注册中心时其服务注册与...

Android面试宝典之终极大招(android面试及答案)

以下内容来自兆隆IT云学院就业部,根据多年成功就业服务经验,以及职业素养课程部分内容,归纳总结:18.请描述一下Intent和IntentFilter。Android中通过Intent...

除了Crontab,Swoole Timer也可以实现定时任务的

一般的定时器是怎么实现的呢?我总结如下:1.使用Crontab工具,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本;2.ignore_user_abort()和set_time_li...

Spark源码阅读:DataFrame.collect 作业提交流程思维导图

本文分为两个部分:作业提交流程思维导图关键函数列表作业提交流程思维导图...

使用Xamarin和Visual Studio开发Android可穿戴设备应用

搭建开发环境我们需要做的第一件事情是安装必要的工具。因此,你需要首先安装VisualStudio。如果您使用的是VisualStudio2010,2012或2013,那么请确保它是一个专业版本或...

Android开发者必知的5个开源库(android 开发相关源码精编解析)

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...

Android事件总线还能怎么玩?(android实现事件处理的步骤)

顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码...

Android 开发中文引导-应用小部件

应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...

取消回复欢迎 发表评论: