《JavaScript高級程序設計》總結(一)——值類型和引用類型

值類型

存放在棧內存中,簡單來講就是簡單的變量a的值等於xxxbash

舉個栗子:ui

var a = 11  //a就是一個值類型,它存儲在棧內存中,直接存儲着變量值和名字
複製代碼

引用類型

就比較複雜一點了,它會在堆內存中開闢一個空間,存儲具體的值,而在棧內存中存儲的是指向該值得地址spa

舉個栗子`code

//obj就是一個引用類型,它的引用地址存儲在棧內存中,堆內存中存儲着實際的值
var obj = {
    name:'cesium',
    type:'3D'
}

複製代碼

那麼當值類型和引用類型發生賦值呢,會發生什麼呢?

來思考一下:cdn

var a = 11
        var b,d
        b = a
        var c = {
            name:'cesium',
            type:'3D'
        }
        d = c
        d.name = 'openlayer'
        //a,b,c,d分別打印什麼呢?
        console.log(a)
        console.log(b) 
        console.log(c)
        console.log(d)
複製代碼

結果以下:對象

能夠看到a的值賦給b後再改變b的值,b變爲了12,而a依然是11,c的值賦給d,d改變了name,c也跟着變了,這是爲何呢,咱們來看圖blog

那麼咱們怎麼解決這個問題呢 使用object.assign()來從新分配對象就好內存

// 被引用的對象
    var c = {
            name:'cesium',
            type:'3D'
    }
    // 新的對象從舊的對象賦值
    d = Object.assign({},c)
    // 只改變新對象的值
    d.name = 'openlayer'
    console.log("打印c")
    console.log(c)
    console.log("-------------")
    console.log("打印d")
    console.log(d)
複製代碼

這樣d就不會影響到原值了string

相關文章
相關標籤/搜索