博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 里的类型
阅读量:7005 次
发布时间:2019-06-27

本文共 2249 字,大约阅读时间需要 7 分钟。

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 = aa.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)    //undefinedconsole.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 = fnfn = null

转载地址:http://hsytl.baihongyu.com/

你可能感兴趣的文章
javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)
查看>>
html传参数
查看>>
nodemanager启动失败
查看>>
spring整合mybatis是如何配置事务的?
查看>>
打印报表
查看>>
POJ 2756 Autumn is a Genius 大数加减法
查看>>
redis+mysql
查看>>
Redis(二):Redis的九大应用场景
查看>>
sonarqube 指定jdk
查看>>
js中window.onload 与 jquery中$(document.ready()) 測试
查看>>
jsoncpp的生成和使用
查看>>
HBase shell 命令。
查看>>
android SIM Switch功能和配置
查看>>
字符串处理函数
查看>>
Ordered Broadcast有序广播
查看>>
Tcpdump的用法
查看>>
python学习:Dmidecode系统信息(一)
查看>>
iview给radio按钮组件加点击事件
查看>>
Buildroot make网卡interfaces文件被修改
查看>>
阿里云对象存储 OSS,不使用主账号,使用子账号来访问存储内容
查看>>