本文内容主要为 1.使用引用类型数据,常出现的错误及处理办法 2.开发中遇到的特定场景问题,解决办法
js中的8种数据类型:
null,undefined,boolean,number,string,symbol,object,bigInt
symbol函数解决命名冲突: juejin.cn/post/702114…
BigInt大整数类型: juejin.cn/post/684490…
基本数据类型:
null,undefined,boolean,number,string,symbol
引用类型
对象类型:object、 function、Array、Date、RegExp
两种数据类型的特点:
- 基本数据类型: 值不可变,javascript中的原始值(undefined、null、布尔值、数字和字符串)是不可更改的
- 引用数据类型:引用类型是可以直接改变其值的
引用类型带来的问题:
如下场景:
我理解前端工作主要是拿数据做展示,数据源本身不应该被改动?;如以下场景
- 对于传入组件的属性,不要直接修改;
- 接口返回值,不符合自己要的结构,不要直接修改;
那现在要修改从原始数据中引用出的数据,要如何处理?
例如:图片上传的需求,对要上传的图片需要添加风控 + ocr识别的;
解决办法
解决办法就是打断变量之间的引用关系:通过深拷贝或者浅拷贝的方式来进行解决;
深拷贝:针对我们引用的数据只需要使用第一层,而不会去使用更深层的数据;
- 通过自定义的deeepclone实现;
- 引用lodash或者其他库中实现的deepClone
- JSON.parse(JSON.stringify(arr)) 但有如下副作用
浅拷贝:
针对数组几种浅拷贝:
只有一层的数组,并且其值是简单类型的话:
- 数组展开扩展运算符 ...
- concat
- slice
复杂类型:
针对对象的浅拷贝
- object.assign
- 扩展运算符...