整理以及总结一下,回溯下基础。javascript
ECMAScript中具备两种数据类型的值,分别是 基本类型值和引用类型值。java
在ECMAScript中,基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象。es6
基本数据类型:undefined(未定义的值的默认值) null(还没有存在的对象) boolean(true or false) number(数字) string(字符串)。
基本类型的值不能添加属性。数组
var str = 'I am basic'; str.type='basic';//it is wrong!!!
这五种数据类型是按值访问的,也就是操做的是保存在变量中实际的值,改变了就是改变了。
引用类型:这种类型就是在操做的时候,操做的是其自身的引用,而不是实际的对象。固然这一块还要再细化一点,当操做动做是复制时,操做的是对象的引用。当操做动做是添加时,操做的是实际的对象。函数
下面说说一些操做以及开发中的注意点工具
基本类型:就是复制,copy,你会获得两个如出一辙的东西,而且这两个之间是相互独立的post
var a = 111; var b = a; a+=10; console.log(a);//121 console.log(b);//111
引用类型:引用类型在接受到复制操做这个命令时,也是会把变量对象中的值复制一份放到一个新的空间中。可是,这个值并非真正的值,而是一个指针或者说是路径,它指向了存储在堆中的一个对象。复制以后的这两个变量只是两个指针,指向同一个地方。
这样的话,改变一个,另外一个也得变化。指针
var a ={}; var b=a; a.age=18; console.log(b.age);//18
因此在平常开发中,常常会用到对象的赋值操做,这里直接用‘=’可能会引发没必要要的一些bug,这里通常用一些方法避免掉。code
arrB=arrA.slice(0)
arrB=arrA.concat()
var arrA=[1,2,3]; var [...arrB]=arrA; console.log(arrB)//[1,2,3]
这里用上了es6的扩展运算符,原理就是先拆掉再放进数组里。对象
var objB=JSON.parse(JSON.stringify(objA))
var objA={'name':'11','age':'22'} var {...objB}=objA;
是的,这样也能够的。。。
这样开发中能够根据须要复制的数据来选择相对简单方便的方法。
很是基础的知识点了,可是开发中不注意也会引发没必要要的麻烦,同时在平常开发中能够针对不一样的需求提早写好工具函数,统一块儿来。方法多不必定是好事,群魔乱舞。