美文网首页
JS 里的类型

JS 里的类型

作者: astak3 | 来源:发表于2019-01-07 22:14 被阅读0次

    JS 里的类型

    number类型转
    stringtoString、String()全局函数、加上空字符串
    boolean:Boolean()全局函数、一个!取反,两个取反在取反string类型转number:Number()全局函数、parseInt()、parseFloat()、+-0boolean:Boolean()全局函数、一个!取反,两个取反在取反boolean类型转number:Number()全局函数、+-0stringtoString、String()全局函数、加上空字符串null类型转number:Number()全局函数、+-0string:String()全局函数、加上空字符串boolean:Boolean()全局函数、一个!取反,两个取反在取反
    undefined类型转
    string:String()全局函数、加上空字符串
    boolean:Boolean()全局函数、一个!取反,两个取反在取反object类型转stringtoSting、String()全局函数、加上空字符串boolean:Boolean()全局函数、一个!取反,两个取反在取反
    null
    number

    falsy值:0NaN''nullundefinedfalse
    console.log()利用toString()方法
    console.log((1).toString)

    内存

    简单类型的数据存储在栈内存中
    复杂类型的数据存储在堆内存中,栈内存中存储堆内存中的

    浅拷贝和深拷贝

    浅拷贝:只拷贝堆内存中的地址,如果我们重新赋值,原值会改变;简单类型拷贝都是深拷贝;
    深拷贝:把栈内存中的内容重新拷贝了一份,堆内存中存储的地址也将变化;如果 b 拷贝 a,改变 b,a 不变是深拷贝;改变 b,a 也跟着变是浅拷贝。

    var a = {n:1}
    var b = a
    a.x = a = {n:2}     //a.x 中 a 是确定的,是{n:1}的引用;后面 a = {n:2},a 变成{n:2}的引用,但 a.x 中的 a 是确定的,所以在{n:1}中又加上了{x:{n:2}}
    console.log(a.x)    //undefined
    console.log(b.x)    //{n:2}
    

    深拷贝方法:
    方法一:

    var obj = {
        age:10,
        friend:{
            name:'xiaoming',
            age:12,
            hobby:{
                sport:'football',
                foot:'apple'
            }
        }
    }
    function copy(object){
        var newObj = {}
        for(var key in object){
            if(typeof object[key] === 'string' || typeof object[key] === 'number' || typeof object[key] === 'boolean' || object[key] === undefined || object[key] === null){
                newObj[key] = obj[key]
            }else{
                newObj[key] = copy(key)
            }
        }
        return newObj
    }
    
    var obj2 = copy(obj)
    

    如果这样写,对象中的简单类型是深拷贝,而复杂类型是简单拷贝

    var obj = {
        age:10,
        friend:{
            name:'xiaoming',
            age:12,
            hobby:{
                sport:'football',
                foot:'apple'
            }
        }
    }
    function copy(object){
        var newObj = {}
        for(var key in object){
            newObj[key] = obj[key]
        }
        return newObj
    }
    var obj2 = copy(obj)
    

    方法二:

    var obj = {
        age:10,
        friend:{
            name:'xiaoming',
            age:12,
            hobby:{
                sport:'football',
                foot:'apple'
            }
        }
    }
    var obj2 = JSON.parse(JSON.stringify(obj))
    

    循环引用

    var a = {}
    a.self = a
    

    垃圾回收

    如果一个对象没有被引用,它就是垃圾,将被引用

    var fn = function(){}   //fn 被赋值 null 后,这个函数不是垃圾
    document.body.onclick = fn
    fn = null
    

    相关文章

      网友评论

          本文标题:JS 里的类型

          本文链接:https://www.haomeiwen.com/subject/pntmrqtx.html