一、類型轉(zhuǎn)換
1. 七種類型的轉(zhuǎn)換
number | string | bollean | symbol | null | undefined | object | |
---|---|---|---|---|---|---|---|
number | 1. X. toString 2. 與''相加 3. String(X) |
1. Boolean(X)函數(shù) 2. !!(取反兩次) |
|||||
string | 1. Number(X) 2. parseInt('123', 10) 3. parseFloat('1.234') 4. '1' - 0 5. + '1' |
1. Boolean(X)函數(shù) 2. !!(取反兩次) |
|||||
bollean | 1. x - 0 2. +x |
X. toString 2. 與''相加 3. String(X) |
|||||
symbol | x | ||||||
null | 1. x - 0 2. + x 結(jié)果為0 |
1. 與''相加 2. String(X) |
1. Boolean(X)函數(shù) 2. !!(取反兩次) |
||||
undefined | 1. x - 0 2. + x 結(jié)果為NaN |
1. 與''相加 2. String(X) |
1. Boolean(X)函數(shù) 2. !!(取反兩次) |
||||
object | 1. x - 0 2. + x 結(jié)果為NaN |
X. toString 2. 與''相加 3. String(X) 結(jié)果為{object: Object} |
1. Boolean(X)函數(shù) 2. !!(取反兩次) |
2. 轉(zhuǎn)成boolean的五個(gè)falsy值
number | string | null | undefined | |
---|---|---|---|---|
false | 0/NaN | '' | null | undefined |
注意:所有object轉(zhuǎn)換成boolean都是true狠角,包括空對象敛惊。
二精堕、 內(nèi)存圖
1. JS七種數(shù)據(jù)類型在內(nèi)存中的存儲(chǔ)位置
基本類型存儲(chǔ)在棧內(nèi)存中,而對象則存在堆內(nèi)存中议蟆,棧內(nèi)存存儲(chǔ)的只是一個(gè)指向該堆內(nèi)存的一個(gè)地址闷沥。
image.png
2. 初始化各種類型變量時(shí)究竟在內(nèi)存里干了什么
var a = 1
var b = 2
var o = {
name: 'frank',
age: 19
}
var c = true
o.gender = 'male'
var o2 = { name: 'jack', age: 29}
o2 = o
內(nèi)存圖
3. 當(dāng)把一個(gè)對象賦值給另一個(gè)對象是發(fā)生了什么
o2 = o
僅僅是在棧內(nèi)存中把o存儲(chǔ)的地址復(fù)制到o2,并不會(huì)在堆內(nèi)存中創(chuàng)建一個(gè)新的對象咐容。
o2 = o
三狐赡、內(nèi)存圖習(xí)題
image.png
image.png
image.png
- 循環(huán)引用
image.png
image.png
上圖中在a.x = a = {n:2}
賦值前,a的地址已經(jīng)定了疟丙,第二個(gè)賦“=”將a的地址改變了,而第一個(gè)“=”左邊的a的地址還是原來的34鸟雏,所以a.x是在原地址指向的對象中添加了x屬性享郊。alert(a.x)中的a是新的地址,所以是undefined孝鹊。
四炊琉、垃圾回收
如果一個(gè)對象沒有被引用,它就是垃圾又活,將被回收苔咪。
image.png
image.png
五、 淺拷貝 VS 深拷貝
有b = a
柳骄,改變b的值時(shí)a也跟著變?yōu)闇\拷貝团赏,改變b的值不影響a時(shí)即為深拷貝,基本類型的賦值均為深拷貝
深拷貝的內(nèi)存圖:
image.png