异常try-catch-finally与存储和JSON.parse
捕获异常
捕获异常:处理可能出现的异常,当发生错误后,我们对它进行处理,不让程序崩溃。
异常处理 try-catch-finally
try{
// 可能出现异常的:代码1
}catch(err){
// 当代码发生异常后,会执行这里,异常对象会传递给 err
// 代码不发生异常,则不会执行这里
// 代码2
console.log('异常对象', err)
} finally{
// 可以省略,无论是否发生异常,都会执行这里
// 代码3
console.log('finally')
}
使用try-catch 处理常见异常[ctcm升级]
let obj = {}
try{
// 因为 JSON.parse 有可能会报错。obj的值可能是一个数组,对象,null
obj = JSON.parse(localStorage.getItem('aa'))
// 操作这个obj一定要注意,因为有可能是个null
}catch(err){
// 报错之后怎么处理
obj ={}
}
console.log('obj', obj)
手动抛出异常
不仅浏览器会自动给我们抛出异常,我们还可以手动抛出异常。
语法是 throw 异常对象[这个异常对象可以是一个数字,数组,对象]
但是我们为了规范,一般会 throw new 错误类型
下面就是常见的错误类型
throw new SyntaxError("语法错误")
throw new TypeError("类型错误")
手动抛出异常错误
try{
JSON.parse("{name:123}")
}catch(err){
throw new SyntaxError('语法错误')
}
错误类型有哪些?
1,SyntaxError 表示语法错误
2,TypeError 类型错误
3,ReferenceError 引用错误
4,RangeError 范围错误
5,URIErrorURI 错误
这些错误对象都是继承Error的【重要】
TypeError 类型错误
let numberValue = 1
// 报错 Uncaught TypeError[类型错误]
a.find(item => {
console.log('item', item)
})
语法错误
// VM41:1 Uncaught SyntaxError[表示语法错误]
JSON.parse("{name:123}")
ReferenceError 引用错误
try {
console.log(str);
} catch (err) {
console.error('捕获到引用错误:', err);
}
RangeError 范围错误
try {
let numArray = new Array(-1);
} catch (err) {
console.error('捕获到范围错误:', err);
}
URIError错误
try {
decodeURIComponent('%');
} catch (err) {
console.error('捕获到 URI 错误:', err);
}
抛出异常时后面的代码将不会在执行了
try{
JSON.parse("{name:123}")
}catch(err){
throw new SyntaxError('语法错误')
console.log('1111')
}
console.log('222')
会输出111 和 222 吗?
回答:不会。因为抛出了异常,后面的代码不会执行了
抛出异常后面的代码将不会执行,但是会执行finally
try{
JSON.parse("{name:123}")
}catch(err){
throw new SyntaxError('语法错误')
console.log('1111')
} finally{
console.log('finally')
}
console.log('222')
输出的是 finally
localStorage,sessionStorage获取本地不存在key输出的是什么? [小常识]
回答:输出的是null,
let str = localStorage.getItem('aa')
console.log('str', str) // 输出 null
let arr = sessionStorage.getItem('bb')
console.log('arr', arr) // 输出 null
JSON.parse转化null得到的是什么?[小常识]
回答:得到的也是 null
JSON.parse转化'[]'得到的是什么?[小常识]
console.log('obj', JSON.parse('[]')) // 输出的是 []
JSON.parse转化'{}'得到的是什么?[小常识]
console.log('obj', JSON.parse('{}')) // 输出的是 {}
JSON.parse转化""得到的是什么?
console.log('obj', JSON.parse('""'))// 输出的是 ""空字符串
JSON.parse转化'123'得到的是什么?[小常识]
console.log('str', JSON.parse('1212')) // 输出的是 123
这个输出多少?[小常识]
console.log('obj', JSON.parse("{a:123}"))
会报错,因为不是JSON格式
本地存储,要考虑是否使用 try-catch ?[小常识]
一般来说,做好写上
本地存储,是否要考虑一下用户有好几个账号这样的情况?[ctcm升级]
在兼容性问题上,通常考虑 null, undefined, NaN, 0, '', '0'
异常try-catch-finally与存储和JSON.parse的更多相关文章
- JSON.parse()的异常怎么处理;
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 异常 try catch finally return 执行关系 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- python3下scrapy爬虫(第九卷:scrapy数据存储进JSON文件)
将爬取数据存储在JSON文件里并不难,只需修改pipelines文件 直接看代码: 来看下结果: 中文字符恶心的很 之后我会在后卷中做出修改
- 【javascript基础】 原生JSON.parse解析异常问题
[问题背景]用jQ,ajax返回json,返回的字符串如:{name:"suntiger035"},status:200,readyState:4,代码无任何问题,结果,succe ...
- js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别
JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...
- JSON.parse() 和 JSON.stringify()的简单介绍
参考地址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse ht ...
- ZH奶酪:JavaScript中的JSON.stringify() and JSON.parse()
JSON.stringify() JSON.stringify()可以将任意的JavaScript值序列化成JSON字符串. 语法 JSON.stringify(value[, replacer [, ...
- JSON.parse()——json字符串转JS
JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象. 语法 JSON.parse(text[, ...
- JSON.parse() 报错和一些解决方法
js 报错 Unexpected end of JSON input,Unexpected token u in JSON at position 0 JSON 通常用于与服务端交换数据. 在接收服务 ...
- json.stringfy()和json.parse()
json.stringfy()将对象.数组转换成字符串:json.parse()将字符串转成json对象. json.stringfy(): 语法: JSON.stringify(value [, ...
随机推荐
- 快速量产低功耗 4G 定位方案?Air201 模组来搞定!
今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获. 寻寻觅觅低功耗4G定位方案? 一个Air201就够了! --定位准.体积小.功耗低,助力行业客户快速量产! 01 ...
- OpenWRT/iStoreOS 不从头编译内核安装4G LTE网卡 Quectel EM05-CE记录
我的机器是x86装了iStoreOS,有4G网卡Quectel EM05 https://www.quectel.com/cn/product/lte-em05 主要参考资料如下 https://ww ...
- 基于Ubuntu搭建Pwn调试环境
Pwn环境配置 本文演示使用干净的Vmware下安装的的 Ubuntu 18.04 LTS镜像 配置以下Pwn环境: OS(系统)配置 VMware Tools net-tools open-vm-t ...
- Java中使用FFmpeg拉取RTSP流
在Java中使用FFmpeg拉取RTSP流并推送到另一个目标地址是一个相对复杂的任务,因为Java本身并没有直接处理视频流的功能.但是,我们可以借助FFmpeg命令行工具来实现这个功能.FFmpeg是 ...
- Avalonia UI 中 Styles 与 ControlTheme 的区别
目录 目录 介绍 使用方式 全局主题 (Global Theme) 局部主题 (Local Theme) 控件主题 (ControlTheme) 问题描述 问题分析 问题1 区别 问题2 重写Temp ...
- .net core想到哪写道哪之hello world
今天,我们来创建一个helo world,讲一讲.Net 6最新的顶级语句的问题. 在.Net 6中最大的变化应该就是多了个顶级语句. 这玩意是个啥呢,它让C#看起来像个脚本语言了,一个Hello W ...
- js 计算过去和未来的时间距离现在多少天
计算传入的任意一时间.计算出这个时间距离现在还有多少天!或者计算过去的时间距离现在已经过去了多少天! 返回值有两种! 1.负值 代表过去了多少天 2.正值 代表距离设定的时间还有多少天 说明:距离设定 ...
- 一款 IDEA 必备的 JSON 处理工具插件 — Json Assistant
Json Assistant 是基于 IntelliJ IDEs 的 JSON 工具插件,让 JSON 处理变得更轻松! 主要功能 完全支持 JSON5 JSON 窗口(多选项卡) 选项卡更名 移动至 ...
- 德承工控机DA-1000 RS-485串口设置
由于一般情况下调试串口常使用RS-485转USB接口来进行调试,但是USB接口在长时间的调试下,接口容易松动,通讯也比较不稳定容易中断,所以改为DB9接口的RS-485来调试,稳固不松脱.抗干扰能力强 ...
- Git使用备忘录
定义 分布式版本控制工具 Git四个工作区域 工作区(Working Directory):就是你平时存放项目代码的地方 暂存区(Stage/Index):用于临时存放你的改动,事实上它只是一个文件, ...