《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

相关文章
相关标签/搜索