JavaScript可变性与不可变性

一、可变性

/*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 ]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值