91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js中如何實現賦值、淺拷貝和深拷貝

發布時間:2021-09-29 09:05:14 來源:億速云 閱讀:165 作者:小新 欄目:開發技術

這篇文章主要介紹js中如何實現賦值、淺拷貝和深拷貝,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1、js內存

js內存,或者說大部分語言的內存都分為棧和堆。基本數據類型的變量值分配在棧上,引用數據類型的變量值分配在堆上,棧中只是存儲具體堆中對象的地址。

2、賦值

對于基本數據類型,賦值操作是拷貝,即新舊變量不會相互影響。

var a = 1;
var b = a;
b = 2;
console.log(b); // 2

對于引用數據類型,賦值操作只是在棧中新增一個指向堆中對象的變量,即復制引用地址。新舊變量之間會互相影響,即在新變量上改變對象值,舊變量對應值也會改變。

var a = {
    name: "mike"
};
var b = a;
b.name = "jack";
console.log(a); // {name: "jack"}

3、淺拷貝

對于基本數據類型和不具有嵌套對象的數據,均是拷貝操作,新舊變量之間不會相互影響。

var a = {
    name: "mike"
};
var b = {};
b.name = a.name;
b.name = "jack";
console.log(a) // {name: "mike"}

但是對于具有嵌套對象的數據,淺拷貝只拷貝第一層對象,深層次的值仍然是復制引用地址。

var a = {
    name: "mike",
    language: {
        first: "english",
        second: "chinese"
    }
};
var b = {};
b.name = a.name;
b.name = "jack";
b.language = a.language;
b.language.first = "japanese"
console.log(a) // { language : {first: "japanese", second: "chinese"}}

js實現淺拷貝,思想:遍歷target的每個屬性,將起屬性名和值賦值給新變量。
如果你明白了賦值的含義,那么在代碼的第四行,當此時的target[key]的值是對象的時候,通過賦值賦予新變量,本質上是復制引用數據類型在堆中的地址,就不難理解為什么淺拷貝對于是否是嵌套對象的有不同結果了。

function shallowCopy(target) {
    let result = {};
    for (const key in target) {
        result[key] = target[key];
    }
    return result;
}

4、深拷貝

深拷貝是完完全全的拷貝,新舊變量之間不會相互影響。
對于參數是否是對象有不同的處理方法,如果是對象,對于對象的每個屬性和值賦值然后遞歸處理; 否則直接返回。

function clone(target) {
    if (typeof target === "object") {
        //判斷是否是數組
        let result = Array.isArray(target)? [] : {};
        for (const key in target) {
            result[key] = clone(target[key]);
        }
        return  result;
    } else {
        return target;
    }
}

以上是“js中如何實現賦值、淺拷貝和深拷貝”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

临桂县| 建宁县| 广东省| 建德市| 澄迈县| 兰溪市| 嵊州市| 南陵县| 土默特左旗| 东海县| 伊宁县| 富裕县| 化德县| 嵩明县| 沛县| 杭锦旗| 名山县| 丹棱县| 临夏县| 德昌县| 闻喜县| 昆明市| 吕梁市| 汉寿县| 拉萨市| 彰武县| 青河县| 策勒县| 英吉沙县| 台湾省| 喀什市| 环江| 红桥区| 台南县| 瑞丽市| 峡江县| 巩义市| 新建县| 永嘉县| 浦北县| 韩城市|