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将字符串变回对象。通过该操作会生成一个新的对象进行深拷贝。

posted @ 2021-11-08 14:26  公吧菜腿  阅读(36)  评论(0编辑  收藏  举报