一、可变性
/*1、对数组b添加元素,除了改变b本身外,a也改变了*/
let a = [1,2,3];
let b = a;
b.push(4,5);
console.log(a);//[ 1, 2, 3, 4, 5 ]
console.log(b);//[ 1, 2, 3, 4, 5 ]
二、不可变性:
如何实现不可变性呢????
1、借助第三方库:如immutable.js或者Mori.js
2、采用如下方法:
2-1 使用Object.assign(target,source)
let a = [1,2,3];
let b = Object.assign([],a);
b.push(4,5,6)
console.log(a);// [ 1, 2, 3 ]
console.log(b);//[ 1, 2, 3, 4, 5, 6 ]
2-2 使用操作符:展开语法(...)
let a = [1,2,3];
let b = [...a,4,5,6]
console.log(a);//[ 1, 2, 3]
console.log(b);//[ 1, 2, 3, 4, 5, 6 ]
注意:通过该方式实现数组合并,属于浅拷贝。
// a3和a4是用两种不同方法合并而成的新数组,
// 但是它们的成员都是对原数组成员的引用,这就是浅拷贝。
const a1 = [{foo: 1}];
const a2 = [{bar: 2}];
const a3 = a1.concat(a2);
const a4 = [...a1, ...a2];
console.log(a3[0] === a1[0]);//true
console.log(a4[0] === a1[0]);//true
console.log(a1); //[{foo: 1}]
console.log(a2); //[{bar: 2}]
console.log(a3); //[{ foo: 1}, {bar: 2}]
console.log(a4); //[{foo: 1}, {bar: 2}]
a1[0].foo = 1205; //修改成员属性
console.log(a1); //[{foo: 1205}]
console.log(a2); //[{bar: 2}]
console.log(a3); //[{foo: 1205}, {bar: 2}]
console.log(a4); //[{foo: 1205}, {bar: 2}]
2-3 通过map function
let a = [1,2,3,4];
let b = a.map(function (item) {
if(item%2 ==0){
return item;
}else{
return '';
}
})
console.log(a);//[ 1, 2, 3, 4 ]
console.log(b);//[ '', 2, '', 4 ]
2-4 通过filter function
let a = [1,2,3,4];
let b = a.filter(function (item) {
return item%2 !=0
})
console.log(a);//[ 1, 2, 3, 4 ]
console.log(b);//[ 1, 3 ]