JS数据类型
基本类型(值类型)
1.基本数据类型(值类型)占用的空间是固定的,保存在栈中(当方法被执行时,都会开启一个属于自己的内存栈,这个方法定义的基本数据类型都会依次放进去内存栈中,随着方法的执行,内存栈也将自然的销毁。)
2.保存和复制的是值本身。
3.可以使用typeof来检测值的类型
一共有七种基本数据类型
- String
- Number
- Boolean
- null
- undefined
- bigint
- symbol
引用类型
1.引用类型占用的空间是不固定的,保存在堆中(当我们在程序中创建一个对象时,这个对象将保存到运行时的数据区中,以便反复利用,这个数据区就叫堆内存),对象不会随着方法的结束而摧毁,只有在没有被引用时才会被引擎的垃圾回收机制回收。
2.保存和复制的是一个指向对象的指针。
3.使用instanceof来判断。
4.使用new()方法构造出来的对象是引用类型。
三种引用类型
- Object
- Array
- Function
浅拷贝和深拷贝
由于引用类型复制的是内存地址,修改变量时既是修改内存地址中的数据,这样的修改容易产生我们预料不到的错误。
1 function copy (obj){ 2 obj.age = 18; 3 retun obj 4 } 5 6 const person={ 7 name: 'Joe', 8 age: 20 9 } 10 11 const changePerson = copy(person); 12 console.log(person); //{name:'Joe', age:18} 13 console.log(changPerson); //{name:'Joe' , age:18}
可以看出obj在函数内已经被修改,影响到原有的对象。
1 function copy (obj){ 2 const newObj = JSON.parse(JSON.stringify(obj)) 3 newObj.age = 18; 4 retun newObj 5 } 6 7 const person={ 8 name: 'Joe', 9 age: 20 10 } 11 12 const changePerson = copy(person); 13 console.log(person); //{name:'Joe', age:20} 14 console.log(changPerson); //{name:'Joe' , age:18}
JSON.sringify
将对象变为一个字符串,然后再通过JSON.parse
将字符串变回对象。通过该操作会生成一个新的对象进行深拷贝。