JS 里的类型

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类型转换1. 转换为 字符串toString() 方法返回一个表示该对象的字符串 MDN语法:object.toS...
    半斋阅读 293评论 0 0
  • 内置类型 JS中一共有七个内置类型: number string boolean undefined null o...
    squall1744阅读 547评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,937评论 0 38
  • 堆积文字真是有趣,想象无限,一边写一边笑,它使我精神丰盈,也帮我舒缓各种压力。 ...
    王华_WH阅读 449评论 8 7
  • 作为一个行走在青春迷途中的我,我不知道向谁诉说,也不知道该如何解决。不知道怎么解决那些突如其来的失落,不知道怎...
    酱子_be6a阅读 238评论 5 2