(22)进阶:JS 里的类型

类型转换

      任意类型转换字符串

      1.String(x)

   2.x.toString()

3.x + ''

任意类型转换数字

  1.Number(x)
  2.parseInt(x, 10) 10就是十进制的意思
  3.parseFloat(x) 转换为浮点数
  4.x - 0
  5.+x

任意类型转布尔

   1.Boolean(x)
   2.!!x

falsy包括     false     null      undefined     0       ''        ""

内存图

```javascript
var a = 1
var b = a
b = 2
请问 a 显示是几?  
```

a显示1,因为a,b的值分别是在栈内存当中的。修改b的值不会影响a的值

 

 

 

```javascript
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?
```

a.name是'a',执行b = {name: 'b'}语句会创建一个新对象,a和b引用不同的对象。

```javascript
var a = {name: 'a'}
var b = a
b.name = 'b'
请问现在 a.name 是多少?
```

a.name是'b',因为a和b是引用相同的对象。b.name = 'b'的更改会影响到a

 

```javascript
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?

a是 {name: 'a'},b=null不会影响到a。

 

深复制   

    var a = 1
    var b = a
    b = 2 //这个时候改变 b
    a 完全不受 b 的影响
    那么我们就说这是一个深复制
   对于简单类型的数据来说,赋值就是深拷贝。
   对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。

 这是一个浅拷贝的例子

     var a = {name: 'frank'}
     var b = a
     b.name = 'b'
     a.name === 'b' // true
     因为我们对 b 操作后,a 也变了

什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。

    var a = {name: 'frank'}
    var b = deepClone(a) // deepClone 还不知道怎么实现
    b.name = 'b'
    a.name === 'a' // true

 

 

obj[true]=23

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值