捕获异常

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

异常处理 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. 【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?

    说明:本文所涉及的AI运动识别.计时.计数能力,都是基于云智「Ai运动识别引擎」实现.云智「Ai运动识别」插件识别引擎,可以为您的小程序或Uni APP赋于原生.本地.广覆盖.高性能的人体识别.姿态识 ...

  2. ubuntu apache默认没开启rewrite 如何开启

    注意看到 /etc/apache2/apache2.conf # Include module configuration:IncludeOptional mods-enabled/*.loadInc ...

  3. dotnet学习笔记-专题04-配置的读取和写入-01

    配置的读取和写入 读取配置的类,包括手动从json中读取配置.将json配置与配置类绑定.从控制台读取配置.从环境变量读取配置 using System.Diagnostics; using Micr ...

  4. 使用JAVA建立稳定的多线程服务器

    侯光敏 (wearebug@etang.com), 简介: 本文详细的介绍了使用Java语言建立一套多线程服务器的过程,该服务器使用对象传递消息,在线程中使用队列机制,使服务器的性能大大提高了.这套服 ...

  5. MySQL 8.0 为什么会放弃查询缓存?

    什么是查询缓存? 查询缓存就是将一次查询结果存储在内存中,假如下一次查询结果在内存中,就直接在内存中读取. 设计初衷 当然是提高性能,通过缓存来减少解析器.优化器.存储引擎的执行时间. MySQL查询 ...

  6. Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象问题的解决方法

    1 Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象 1.1 问题场景   在JavaScript中遍历目录,使用for.. in循环时,无法获取到 ...

  7. Vue.js 过渡 & 动画

    1.前言 Vue动画/过渡的本质: 在通过v-if/v-show指令插入/移除/显示/隐藏某个标签元素时,在这个标签上包裹一个transition标签,Vue会为这个标签动态添加css类名,为这些类名 ...

  8. 使用 httputils + protostuff 实现高性能 rpc

    1.先讲讲 protostuf protostuf 一直是高性能序列化的代表之一.但是用起来,可难受了,你得先申明 protostuf 配置文件,并且要把这个配置文件转成类.所以必然要学习新语法.新工 ...

  9. C#/.NET/.NET Core技术前沿周刊 | 第 17 期(2024年12.09-12.15)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  10. 埃尼阿克ENIAC与计算机发展,及信息技术发展史

    一.埃尼阿克ENIAC 第二次世界大战期间,国军方为了研发新型的大炮和导弹,设立了"弹道研究实验室".实验室为了计算炮弹弹道,用了200多人加班加点进行计算,速度依感无法达到军方要 ...