JS开发者应懂的33个概念系列2&&3--原始类型 && 值类型和引用类型

基本类型:undefined, null, number,string,boolean (存放栈中)
引用类型:array,object(存放堆中)

基本类型的赋值:
var a = 10;
var b = a;

a++;
console.log(a);// 11
console.log(b);// 10
复制代码

引用类型的赋值:
var a = {};
var b = a;

a.name = 'xiaogou';
b.age = 11;

console.log(a);// {name: "xiaogou", age: 11}
console.log(b);// {name: "xiaogou", age: 11}

console.log(a === b);// true
复制代码

接下来说一说拷贝了

var a = {age: 11};
function copy(obj) {
  console.log(obj === a);// true a赋值给obj,指向同一堆地址
  obj.age = 22;
  obj = {
   age: 33
  }// obj指向了另一个地址
  return obj;
}
var b = copy(a);
console.log(a);// {age: 22} 
console.log(b);// {age: 33}
复制代码

浅拷贝的实现方法:

方法1:

function simpleClone(originObj) {
    var targetObj = {};
    for (var prop in originObj) {
        targetObj[prop] = originObj[prop];
    }
    returnd targetObj;
}
复制代码

方法2:

var targetObj = Object.assign({}, originObj);
复制代码

深拷贝的实现方法:

方法1:

// window.json存在
var targetObj = JSON.parse(JSON.stringify(originObj));
复制代码

方法2:

var lodash = require('loadsh');
var targetObj = lodash.cloneDeep(originObj);
复制代码

方法3:

// 递归拷贝
function deepClone(originObj) {
    var targetObj = originObj.constructor === Array ? [] : {};
    for (var prop in originObj) {
        var value = originObj[prop];
        // 防止造成死循环
        if (value === targetObj) {
            continue;
        }
        if (typeOf value === 'Object') {
            arguments.callee(value);
        } else {
            targetObj[prop] = value;
        }
    }
    return targetObj;
}
targetObj = deepClone(originObj);
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值