1. 程式人生 > >(22)進階:JS 裡的型別

(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