JS開發者應懂的33個概念系列2&&3--原始類型 && 值類型和引用類型

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

基本類型的賦值:

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:bash

function simpleClone(originObj) {
    var targetObj = {};
    for (var prop in originObj) {
        targetObj[prop] = originObj[prop];
    }
    returnd targetObj;
}
複製代碼

方法2:ui

var targetObj = Object.assign({}, originObj);
複製代碼

深拷貝的實現方法:

方法1:spa

// window.json存在
var targetObj = JSON.parse(JSON.stringify(originObj));
複製代碼

方法2:code

var lodash = require('loadsh');
var targetObj = lodash.cloneDeep(originObj);
複製代碼

方法3:cdn

// 遞歸拷貝
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);
複製代碼
相關文章
相關標籤/搜索