【JavaScript】JS 里的数据类型转换和内存图

类型转换&五个falsy值

先来看一下js里面的七种数据类型:
number string boolean null undefined object symbol。
那么这些类型之间是如何转换呢?

//number 转string
var n = 1
n.toString()     // '1'
1 + '' // '1'     老司机经常用这种方法 . 加号发现左右任意一边有字符串,他就会尝试把另外一边变成字符串
String(n) // '1'
//boolean转string
var b = true
b.toString() //'true'
true + '' //'true'
String(true) //'true'

//null 和 undefined 没有toString方法
null + '' // 'null'
undefined + '' // 'undefined'
String(null) // 'null'
String(undefined) // 'undefined'

//object 转string
var o = {
	name: 'zhangsan'
}
object.toString() // '[object Object]'

object+'' //'[object Object]'
String(object) //'[object Object]'
//其他类型转boolean
Boolean(1)    //true
Boolean(0)   //false
Boolean('')  //false
Boolean(' ') //true
Boolean(null)   //false
Boolean(undefined) //false
Boolean({}) //true
Boolean({name: 'zhangsan'})  //true

老司机的方法:
!!1 //true
!!0 //false
!!'' //false
!!' ' //true
!!{} //true
!!undefined //false
!!null //false
重点, JS里面只有这五种数据转成bool是false,背下来!!

0
NaN 前两个的是数字类型
‘’ 空字符串
null
undefined

//转为number
Number('1')  //1
parseInt('1', 10)   //以十进制转成1
parseFloat('1.23')  //1.23
//更骚的方法
'1' - 0   //1
'1.23 ' - 0 // 1.23

JS内存图

先来看一下js里面存放数据的两种内存:
在这里插入图片描述
如图所示,一种是栈内存,一种是堆内存,栈内存存放基本的数据类型,堆内存存放复杂数据类型object。
想一下当我们声明一个变量时,他在内存中是如何存放的?

var a = 1
var b = 2

他们在堆内存中是这样的:
在这里插入图片描述
当我们执行:
b = a 时放生了什么?

!!!js会把a里面存的值给b

内存图成了这样:
在这里插入图片描述
那么对象时如何存放的呢?
是在栈内存中存放堆内存的地址

var o1 = {name: 'zhangsan'}
var o2 = {name: 'lisi'}

看这两个对象的内存图:
在这里插入图片描述
当我们执行: o2 = o1时会发生什么?
和上面基本类型做的事情完全一样!!!!:

!!!js会把a里面存的值给b(吧右边的值给左边)

o2里面存放的地址会变成address:100
然后因为地址为106的对象没有人用,js引擎会在适当的时间干掉这个对象,垃圾回收

在这里插入图片描述

看一个题目:
在这里插入图片描述

答案如下图所示:
a和b刚开始指向同一个对象,地址是101,
执行b={name:‘b’}之后b指向了这个新出来的对象

!!!js会把新对象的值存放在b里面,也就是地址301(吧右边的值给左边)

在这里插入图片描述

再看一个题目:
在这里插入图片描述

答案如下图:
在这里插入图片描述

再看一个题目:
在这里插入图片描述

答案如下图:
在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值