一、js数据类型有哪些?
1、基本数据类型(值类型)
number(数值型) 整数,浮点数
string(字符串类型) 用引号包裹起来的数字或字母
Boolean(布尔类型) undefined(未定义) null(空值) symbol(es6新增的)
2、引用数据类型
Object 主要包含:Object,Array,Function
3、基本数据类型与引用数据类型的区别:
1、基本数据类型操作的是值:直接把值赋给变量
var num1 = 1;
num2 = num1;
num1 = 3;
console.log(num1) //3
console.log(num2) //1
2、复合数据类型操作的是地址:首先开辟一个新的内存空间,将对象中的属性名和属性值存进去,然后将这个内存的地址传递给变量。变量通过地址找到相应的内存空间,把空间中的属性名对应的属性值进行修改。
var obj1 = new Object({"name":"zzd"});
obj2 = obj1
obj2.name = 'oo'
console.log(obj1.name) // oo
console.log(obj2.name) // oo
二、栈堆存储
1.值类型栈存储
主要针对(number,string,boolean)三种数据,可以直接存储在栈中,大小固定,占据空间小,会被频繁使用,所以放进栈中
2.引用类型栈存储
主要针对object,array两种引用数据以及null,可以同时存储在堆和栈中,大小不固定,占据的空间大。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体
引用类型存储把值存储在堆内存中,堆内存是从下往上存储。生成唯一内存地址。然后在栈内存中把地址赋值给变量。栈内存是从上往下存储的。
三、变量计算-类型转换
1.字符串拼接
const a=1+2; // 3
const b=1+'2' // '12'
const c='true'+'100' // 'true100'
+运算中有字符串,结果就是字符串拼接
2.运算符 ==与===
===表示全等,需要判断左右两边对象或值是否类型相同并且值相等。
==表示值相等,判断操作符两边对象或值是否相等,类型可以不同,当类型不同时,可以使用number()转换为数值型
特列:null==undefined 进行运算时不进行隐式类型转换。通常把值转为Boolean值,进行条件判断
布尔类型都为false false===false 结果就为true
3.常见的falsly变量
所有基本类型中Boolean值是false的只有6个,分别是 :
0 NaN ' ' null undefined false
其他引用类型Boolean值全是true.
4.逻辑与(&&):运算规则: 左侧为truly返回右侧,左侧为fasely返回左侧。
逻辑或(||) :运算规则: 左侧为truley返回左侧,左侧为fasely返回右侧。
四、深拷贝与浅拷贝
-
深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。
-
浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象只是对原对象的一个引用
-
深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”