js数据类型有哪些
基本数据类型: Number、String、Boolean、Undefined、Null、Symbol(es6新增独一无二的值) 和 BigInt(es10新增);
引用数据类型: Object。包含Object、Array、 function、Date、RegExp
栈堆存储
栈内存是存储基本数据类型的 堆内存是存储引用数据类型的
特点:栈内存是从上往下存储的
堆内存是从下往上存储
变量计算-类型转换:
1. 字符串拼接
+运算中有字符串,结果就是字符串拼接
2. ==与===
==
二等表示值相等,类型可以不相等
===
三等表示全等,类型相同且值相等
Number()转换成Number类型在进行判断。例外规则,null==undefined,null/undefined进行运算时不进行隐式类型转换。通常把值转为Boolean值,进行条件判断。Boolean(null)===Boolean(undefined)>false===false 结果为true
3. if语句和逻辑运算
- truly变量和fasely
一个!是取反
两个!! 是如果是true就是truly 如果是false就是falsely
falsely变量一共有6种 引用类型Boolean值全是true.
if语句中的判断
if条件是单个值时,如果是truly值,条件成立, 如果是falsely值,条件不成立
逻辑判断:
逻辑与(&&)运算规则: 左侧为truly返回右侧,左侧为fasely返回左侧。
逻辑或( | | )运算规则: 左侧为truley返回左侧,左侧为fasely返回右侧
深拷贝和浅拷贝的区别
浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”拷贝过来,是“值”而不是“引用”
浅拷贝实现
1 .直接遍历
2 .slice() 方法返回一个从已有的数组中截取一部分元素片段组成的新数组
3 .concat() concat() 方法用于连接两个或多个数组 他可以返回新数组
深拷贝实现
1.循环遍历
2.ES6的Object.assign 用于对象的合并,将源对象的属性,复制到目标对象,并返回合并后的target
3.ES6扩展运算符 用于取出参数对象的所有可遍历属性,拷贝到当前对象之中