发表于: 2020-06-05 22:42:13
1 2187
JS中的基本类型和引用类型
js数据类型种类
ES5 7 种 ES6 8 种
基础类型
Number 整数或浮数 如 : 1 包含特殊值(-Infinity、+Infinity、NaN)
String 一串表示文本值的字符序列 如 : '1'
Boolean 布尔类型 只有 true 和 false
undefined 未定义的数据类型 只有一个值 underfined
Null 表示一个空对象指针 只包含一个值:null
Symbol ES6新增 一种实例是唯一且不可改变的数据类型
谷歌67版本中出现 bigInt 指安全存储、操作大整数 (但是很多人不把这个做为一个类型)
引用类型
Object 包含了Data、function、Array等
基本类型和引用类型的区别
在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值。
原始值指的就是代表原始数据类型(基本数据类型)的值,
引用值指的就是复合数据类型(引用数据类型)的值。
原始值与引用值对应存在两种结构的内存即栈和堆。
基本类型具有不可变性, 基本类型是储存在栈内存内,
引用类型是可以改变的,引用值是用来引用存储在堆中的对象,引用出来的对象是存放在堆中的。
也就是说,存储在变量处的值(即指向对象的变量,存储在栈中)是一个指针,指向存储在堆中的实际对象.
深浅拷贝
当改变newArray的值时 array的值同时改变
就是因为newArray浅拷贝了array的指针
新旧对象共享同一块内存
深拷贝的方法 方法较多根据使用场景来定 拷贝的深浅,被拷贝对象的嵌套层级
数组 前提:内部没有嵌套对象
for循环
slice concat
Array.from
ES6拓展运算符
对象
for循环
利用JSON
ES6拓展运算符
这也就引申到学习angualr框架时 使用ngOnChanges生命钩子无法被触发
OnChanges只对输入的不可变对象起作用。
在Angular中,典型的不可变对象是string类型
这也就可以理解为何angular使用@Input接收父组件传递的值时,
如果传递的类型为对象时,数据更改由于被监测的事对象的指针,指针未更改,没有触发angular的变更检测
(angualr变更检测机制个人还未了解很深,这里只是个人的理解,如有错误欢迎师兄指正)
评论