基元数据类型:boolean、int、uint、number、string
两种复杂数据类型:array、object
当数组元素全部是基元数据类型时,即全部是值类型时,是没有浅复制和深复制的区别。
当数组元素全部是复杂数据类型,即引用类型时,复制有2种选择,浅复制和深复制。
当数组元素部分是基元数据,部分是复杂数据时,这时候,对于基元数据类型的元素,采用哪种复制方式效果都一样。
只有对于复杂数据元素,才有浅复制和深复制的区别。
浅复制:调用原数组的slice或concat方法,不传任何参数。浅复制生成的新数据,各个元素存放的只是引用。2个数组中
相同位置的元素存放的引用指向同一个对象,如果对该元素操作,等于就是操作引用指向的对象。如果对象状态发生变化,
也会影响到另一个数组中对应位置的元素。
深复制:生成的新数组,其所有元素都是真正的原数据元素的备份,这个时候相同位置的元素,存放的是不同的引用,指向不同的对象。但是这2个对象的状态是完全一致的。
**==运算符,对于引用类型,判断的是变量持有对象的引用是否相同,而不是内容相同。对于值类型,是通过value来判断的。
操作数组中的每个元素:
foreach (遍历操作): 操作数组中的每一个元素,回调函数不需要返回值。
filter(过滤):将符合条件的元素提出来,构成一个新的数组返回。回调函数返回单个新数组元素。
map(映射器):根据回调函数操作数组每个元素,并利用回调函数的结果生成新的数组。回调函数返回单个新数组元素。
some(有一个满足则为真):只要有一个元素能让回调函数返回true,则some()返回true,否则为false.回调函数返回单个元素比较结果。
every(全员满足才为真):必须所有元素都让回调函数返回true,every()才返回true,否则为false.回调函数返回单个元素比较结果。