的文章首先要了解js的基本基本数据类型:Object,undefined,null,Boolean,Number,String,Symbol(ES6新加入)Object包括:Array,Date,RegExpFunction和Function的重要区别是:将基本类型赋值给一个变量,变量的标识符和值存储在内存中的堆栈(Stack)中。引用类型变量的标识符在栈上,变量的值在内存的堆(Heap)中。举个通俗的例子:基本类型是你在内存栈中有一个咖啡店和钥匙,引用类型是你只有咖啡店的钥匙。可以去内存堆中找到对应的咖啡店地址,keyring有一个标签,说这个key对应的是哪个store,这个标签就是指针。图:数据类型图:引用类型深拷贝问题如果不知道什么是深拷贝和浅拷贝,请先去谷歌,自己在Chrome调试控制台操作。本文只解释为什么JS会出现这样的问题。出现这个结果的原因是第二步将a赋给b只是把a的地址赋给了b(注意数组是引用类型),此时改变b实际上是改变堆中的a和b集合指向的地址的值。通俗地说:a和b都拿到了同一家咖啡店的钥匙。这时,咖啡厅里多放了一个杯子。自然而然,两人合用的咖啡店里就有这个杯子。所以有时候我们为了避免浅拷贝,会使用一些方法来实现深拷贝。关于ES6中的const,有些后台人员甚至前端人员会误认为const赋值是常量。其实const并不是说变量的值不能改变,而是变量指向的内存地址中存放的数据一定不能改变。对于简单类型的数据(数字、字符串、布尔值),值存储在变量指向的内存地址,因此相当于一个常量。但是对于复合类型的数据(主要是对象和数组),变量指向的内存地址只是一个指向实际数据的指针,const只能保证指针是固定的(即总是指向另一个固定的address)(此段引用自阮一峰)const只是将标签(指针)固定在key上,所以:小白第一次写技术文章,如有错误请多多指教,谢谢!参考文献[深入理解JS引用类型的基本类型][5][阮一峰ES6教程][6]
