捕获异常

捕获异常:处理可能出现的异常,当发生错误后,我们对它进行处理,不让程序崩溃。

异常处理 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的更多相关文章

  1. JSON.parse()的异常怎么处理;

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 异常 try catch finally return 执行关系 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. python3下scrapy爬虫(第九卷:scrapy数据存储进JSON文件)

    将爬取数据存储在JSON文件里并不难,只需修改pipelines文件 直接看代码: 来看下结果: 中文字符恶心的很 之后我会在后卷中做出修改

  4. 【javascript基础】 原生JSON.parse解析异常问题

    [问题背景]用jQ,ajax返回json,返回的字符串如:{name:"suntiger035"},status:200,readyState:4,代码无任何问题,结果,succe ...

  5. js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别

    JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...

  6. JSON.parse() 和 JSON.stringify()的简单介绍

    参考地址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse ht ...

  7. ZH奶酪:JavaScript中的JSON.stringify() and JSON.parse()

    JSON.stringify() JSON.stringify()可以将任意的JavaScript值序列化成JSON字符串. 语法 JSON.stringify(value[, replacer [, ...

  8. JSON.parse()——json字符串转JS

    JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象. 语法 JSON.parse(text[, ...

  9. JSON.parse() 报错和一些解决方法

    js 报错 Unexpected end of JSON input,Unexpected token u in JSON at position 0 JSON 通常用于与服务端交换数据. 在接收服务 ...

  10. json.stringfy()和json.parse()

    json.stringfy()将对象.数组转换成字符串:json.parse()将字符串转成json对象. json.stringfy(): 语法:  JSON.stringify(value [, ...

随机推荐

  1. 快速量产低功耗 4G 定位方案?Air201 模组来搞定!

    今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获. 寻寻觅觅低功耗4G定位方案? 一个Air201就够了! --定位准.体积小.功耗低,助力行业客户快速量产! 01 ...

  2. OpenWRT/iStoreOS 不从头编译内核安装4G LTE网卡 Quectel EM05-CE记录

    我的机器是x86装了iStoreOS,有4G网卡Quectel EM05 https://www.quectel.com/cn/product/lte-em05 主要参考资料如下 https://ww ...

  3. 基于Ubuntu搭建Pwn调试环境

    Pwn环境配置 本文演示使用干净的Vmware下安装的的 Ubuntu 18.04 LTS镜像 配置以下Pwn环境: OS(系统)配置 VMware Tools net-tools open-vm-t ...

  4. Java中使用FFmpeg拉取RTSP流

    在Java中使用FFmpeg拉取RTSP流并推送到另一个目标地址是一个相对复杂的任务,因为Java本身并没有直接处理视频流的功能.但是,我们可以借助FFmpeg命令行工具来实现这个功能.FFmpeg是 ...

  5. Avalonia UI 中 Styles 与 ControlTheme 的区别

    目录 目录 介绍 使用方式 全局主题 (Global Theme) 局部主题 (Local Theme) 控件主题 (ControlTheme) 问题描述 问题分析 问题1 区别 问题2 重写Temp ...

  6. .net core想到哪写道哪之hello world

    今天,我们来创建一个helo world,讲一讲.Net 6最新的顶级语句的问题. 在.Net 6中最大的变化应该就是多了个顶级语句. 这玩意是个啥呢,它让C#看起来像个脚本语言了,一个Hello W ...

  7. js 计算过去和未来的时间距离现在多少天

    计算传入的任意一时间.计算出这个时间距离现在还有多少天!或者计算过去的时间距离现在已经过去了多少天! 返回值有两种! 1.负值 代表过去了多少天 2.正值 代表距离设定的时间还有多少天 说明:距离设定 ...

  8. 一款 IDEA 必备的 JSON 处理工具插件 — Json Assistant

    Json Assistant 是基于 IntelliJ IDEs 的 JSON 工具插件,让 JSON 处理变得更轻松! 主要功能 完全支持 JSON5 JSON 窗口(多选项卡) 选项卡更名 移动至 ...

  9. 德承工控机DA-1000 RS-485串口设置

    由于一般情况下调试串口常使用RS-485转USB接口来进行调试,但是USB接口在长时间的调试下,接口容易松动,通讯也比较不稳定容易中断,所以改为DB9接口的RS-485来调试,稳固不松脱.抗干扰能力强 ...

  10. Git使用备忘录

    定义 分布式版本控制工具 Git四个工作区域 工作区(Working Directory):就是你平时存放项目代码的地方 暂存区(Stage/Index):用于临时存放你的改动,事实上它只是一个文件, ...