数据类型及深拷贝、浅拷贝

数据与变量

数据类型

类型分类

简单数据类型(基本类型)

1)布尔值Boolean: true / false

2)数值型Number: 所有数字

3)字符串String: 带引号

4)Undefined

5)Null

复杂数据类型(引用类型)

对象 Object

数组 Array

函数 Function

数据类型检测
typeOf

返回相关数据类型的字符串

可以检测 Boolean Number String Undefined Function

不能检测 Null ,返回Object

instanceOf

返回布尔值

用来检测Object的具体类型

全等号===

要检测的数据必须具有唯一性

可以检测 undefined 和 null

Object.prototype.toString.call(数据)

可以检测所有的数据类型

深拷贝与浅拷贝

深拷贝

简单数据类型存在栈中,将一个存着简单数据类型的变量赋值给另一个变量时,会复制一份值,且在内存中重新开辟一个空间,将值保存;两者相互独立,修改一个,另外一个不会跟着变;

浅拷贝

复杂数据类型的变量名存在栈中,值存在堆中,栈中的变量名通过引用地址指堆中的值;将一个存着复杂数据类型的变量赋值给另一个变量时,会赋值一份引用地址,新的变量就会指向变量,修改一个变量,就修改了堆中的值,由于都是同一个地址,指向同一个值,所以另一个也会随之变化;

复杂数据的深拷贝与浅拷贝对比

(1)浅拷贝:浅拷贝一个变化另外一个也会随着变化, 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用,

(2)深拷贝:相互独立,深拷贝一个变化另外一个不会变; 创建一个新的对象或数组,将原对象的各项属性和属性值(数组的所有元素)拷贝过来,是“值”而不是“引用”

深拷贝的实现

1 JSON序列化与反序列化

JSON.parse(JSON.string(变量)),

这也是我用得最多的

JSON.stringfy 将数据转化为简单数据类型—JSON字符串,然后通过 JSON.parse() 将它转化为普通的对象或数组

2 jQuery的extend

$.extend( [deep ], target, object )

deep: true / false,true为深拷贝,false为浅拷贝

target: 目标对象,需要被赋值的对象

object: 拷贝的数据源

这两种可以将所有复杂数据类型进行深拷贝,使用方便,尤其是 JSON

数组的深拷贝

1拼接一个空数组

Array.concat()

2 从开始截取到最后

Array.slice()

3 展开运算符

let […newArray] = oldArray

缺点:只能拷贝一级数据

经验总结

我们经常会使用到push修改数组,经常我们会遇到重新渲染页面,初始化的情况,这个时候就要考虑到数组的置空或初始化处理;不然很容易出现问题
将一个变量赋值给另一个变量是,一定要考虑到数据类型,如果是复杂数据类型,要不要深拷贝,大部分时候都需要进行深拷贝处理,不然也容易出bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值