內(nèi)容: 類型轉(zhuǎn)換 五個(gè)falsy值 內(nèi)存圖 垃圾回收 深淺拷貝
強(qiáng)制轉(zhuǎn)換
一. 任意類型轉(zhuǎn)Number
五種方法
- Number(x)
- parseInt(x, 10)
- parseFloat(x)
- x - 0
- +x
轉(zhuǎn)換規(guī)則 參數(shù)是 基本類型 和 對(duì)象時(shí)是不同的
基本類型
- 數(shù)值 : 不變
- 字符串: 能解析為數(shù)字 Number(''324) //324
不能解析位數(shù)字 Number('324abc') //NaN
空字符串 Number('') //0 - 布爾值 : true //1 false //1
- undefined : NaN Number(undefined) // NaN
- unll : 0 Number(null) //0
對(duì)象 : NaN
Number({a;1}) //NaN
Number([1,2,3]) //NaN
除非是包含單個(gè)數(shù)值的數(shù)組 Number([5]) //5
二. 任意類型轉(zhuǎn)String
三種方式
- String(x)
- x.toString()
- ' ' + x 芳芳推薦**
數(shù)值 : 相應(yīng)字符串 123 //'123'
- 字符串: 不變
- 布爾值:true > "true" false > "false"
- undefined : "undefined"
- null : "null"
- object對(duì)象:如果是對(duì)象,返回一個(gè)類型字符串 ; //"[object object ]"
- 如果是數(shù)組,返回?cái)?shù)組的字符串形式。
- String({a: 1}) // "[object object]"
- String([1,2,3]) // '1,2,3'
#三. 任意類型轉(zhuǎn)布爾Boolean
兩種方法
- Boolean(x)
- !! x 芳芳推薦
五個(gè)falsy值,其他都是True
NaN null undefined 0(正負(fù)) ' ' (空字符串)
所有的對(duì)象全部都是true
自動(dòng)轉(zhuǎn)換 以強(qiáng)制轉(zhuǎn)換為基礎(chǔ)
以下三種情況,JavaScript 會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,即轉(zhuǎn)換是自動(dòng)完成的,用戶不可見(jiàn)
- 1.不同類型的數(shù)據(jù)互相運(yùn)算
- 對(duì)非布爾值類型的數(shù)據(jù)求布爾值
- 3.對(duì)非數(shù)值類型的值使用一元運(yùn)算符(即+和-)
建議在預(yù)期為布爾值、數(shù)值、字符串的地方,全部使用Boolean、Number和String函數(shù)進(jìn)行顯式轉(zhuǎn)換。
一. 自動(dòng)轉(zhuǎn)換為數(shù)值
除加法運(yùn)算符,其他運(yùn)算符都會(huì)把運(yùn)算轉(zhuǎn)為數(shù)值。
'5'-'2' // 3 '5' * [] // 0 '5' * '2' //10
false/ '5' // 0 true -'1' //0 'abc' - 1//NaN
false - 1 //-1 '1' - 1 // 0 undefined + 1 // NaN
unll + 1 //1 + 'abc' // NaN - "abc" //NaN
二 . 自動(dòng)轉(zhuǎn)換為布爾值 Boolean
條件部分轉(zhuǎn)為布爾
五個(gè)falsy
undefined NaN null 0 ' '
方法 : ① !!X (推薦) ②Boolean(x)
三.自動(dòng)轉(zhuǎn)為字符串
自動(dòng)轉(zhuǎn)換主要發(fā)生在字符串的加法運(yùn)算中
方法
- 1 ' ' + x(芳芳推薦)
- 2 window .String()
- 3 x.toString()
深復(fù)制是什么鬼
var a = 1
var b = a
b = 2 //這個(gè)時(shí)候改變 b
a 完全不受 b 的影響
那么我們就說(shuō)這是一個(gè)深復(fù)制
對(duì)于簡(jiǎn)單類型的數(shù)據(jù)來(lái)說(shuō),賦值就是深拷貝。
對(duì)于復(fù)雜類型的數(shù)據(jù)(對(duì)象)來(lái)說(shuō),才要區(qū)分淺拷貝和深拷貝。
這是一個(gè)淺拷貝的例子
var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true
因?yàn)槲覀儗?duì) b 操作后,a 也變了
什么是深拷貝了,就是對(duì) Heap 內(nèi)存進(jìn)行完全的拷貝。
var a = {name: 'frank'}
var b = deepClone(a) // deepClone 還不知道怎么實(shí)現(xiàn)
b.name = 'b'
a.name === 'a' // true
內(nèi)存圖 與 垃圾回收

轉(zhuǎn)換1.jpg

轉(zhuǎn)換2.jpg