资讯专栏INFORMATION COLUMN

JS 里的类型

calx / 2387人阅读

摘要:中是确定的,是的引用后面,变成的引用,但中的是确定的,所以在中又加上了深拷贝方法方法一如果这样写,对象中的简单类型是深拷贝,而复杂类型是简单拷贝方法二循环引用垃圾回收如果一个对象没有被引用,它就是垃圾,将被引用被赋值后,这个函数不是垃圾

JS 里的类型

number类型转

`string`:`toString`、String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

string 类型转

`number`:Number()全局函数、parseInt()、parseFloat()、`+`、`-0`
`boolean`:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

boolean类型转

`number`:Number()全局函数、`+`、`-0`
`string`:`toString`、String()全局函数、加上空字符串

null类型转

`number`:Number()全局函数、`+`、`-0`
`string`:String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

undefined类型转

`string`:String()全局函数、加上空字符串
`boolean:Boolean()全局函数、一个`!`取反,两个`!`取反在取反

object类型转

`string`:`toSting`、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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96588.html

相关文章

  • JS 里的数据类型转换

    摘要:的数据类型转换一中的数据类型中的数据类型一共有六种,即,,,,,。数据类型指的是数字,包括整型和浮点数。如布尔类型只有和,用于条件判断。数据类型的相互转换任意数据类型转字符串特殊用法任意数据类型转数字任意数据类型转布尔值五个值 JS的数据类型转换 一、js中的数据类型Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object。 ...

    RaoMeng 评论0 收藏0
  • JS里的数据类型

    摘要:有七种数据类型注意没有类型也没有类型。年,布尔冒着大雨步行两英里走到讲台,身着打湿的衣服为学生们授课。其妻错误地相信疾病需要用致病因子施救,因为布尔是淋雨水而感冒的,妻子于是用桶子装水淋到他身上。年,月日,布尔死于肺部积水。 JS有七种数据类型:number string boolean symbol undefined null object注意:没有 array 类型也没有 fun...

    MockingBird 评论0 收藏0
  • JS里的数据类型转换

    摘要:一任意类型转换为字符串要大写这种方法可以将,,转化为字符串,但是无法转换,这两种数据类型要大写是一个全局函数,功能更强大可以转换基本上所有类型为字符串这是最简单最便捷的一种方法,把加上一个空字符串就可以快速将其他类型转换成字符串二任意类型转 一、任意类型转换为字符串 1、x.toString(S要大写) 这种方法可以将number,boolean,object转化为字符串,但是无法转换...

    CloudDeveloper 评论0 收藏0
  • 一篇文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    J4ck_Chan 评论0 收藏0
  • 一篇文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    lakeside 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<