# 类型、堆栈,与深浅拷贝

# 原始类型

javascript的基本类型为5种:

  • Undefined
  • Null
  • Boolean
  • Number
  • String

String 类型的独特之处在于,它是唯一没有固定大小的原始类型。可以用字符串存储 0 或更多的 Unicode 字符,由 16 位整数表示

# 引用类型

引用类型通常叫做类(class),遇到引用值,所处理的就是对象。

**注意:**从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。

Javascript 中对象有:

  • Object 对象
  • Boolean 对象
  • Number 对象
  • String 对象

# 堆栈关系与深浅拷贝

# 堆栈关系

原始类型数据直接按值存储在栈中,每种类型数据占用的内存空间大小是确定的,由系统自动分配和释放。

引用类型数据存放在堆中,其地址指针存放在栈中

# 浅拷贝

var arr1 = [1,2,5,8]; 
var arr2 = arr1 ; 
var str1 = arr1[2]; 
console.log(arr2);//1,2,5,8
console.log(str1);//5
arr2[4] = 99; 
str1 = 6; 
console.log(arr1);//1,2,5,8,99
console.log(arr1[2]);//5

上述代码展示了传值与传址的区别,此种赋值方式也是浅拷贝,两者指向同一内存空间

# 深拷贝

var arr1 = [1,2,5,8]; 
var arr2 = []; 
for(var i=0;i<arr1.length;i++){
   arr2[i]=arr1[i];
};
console.log(arr2)//1,2,5,8
arr2[4]=99;
console.log(arr2)//1,2,5,8,99
console.log(arr1)//1,2,5,8

arr1的每个基本类型的数据都遍历一遍,依次的赋值给arr2的对应字段。避免产生因为地址引用带来的问题。

Last Updated: 12/15/2020, 4:37:33 PM