一、任意類型轉(zhuǎn)換為字符串
1、x.toString(S要大寫)
這種方法可以將number,boolean,object轉(zhuǎn)化為字符串,但是無法轉(zhuǎn)換null,undefined這兩種數(shù)據(jù)類型
(1).toString()
"1"
true.toString()
"true"
var obj={}
(obj).toString()
"[object Object]"
2、String(x)(S要大寫)
String(x)是一個全局函數(shù),功能更強大可以轉(zhuǎn)換基本上所有類型為字符串
String(1)
"1"
String(null)
"null"
String(undefined)
"undefined"
String(true)
"true"
String(obj)
"[object Object]"
3、'' + x OR x + ''
這是最簡單最便捷的一種方法,把x加上一個空字符串就可以快速將其他類型轉(zhuǎn)換成字符串
1 + ''
"1"
null + ''
"null"
undefined + ''
"undefined"
true + ''
"true"
obj + ''
"[object Object]"
二、任意類型轉(zhuǎn)換為布爾
1、Boolean(x)(B要大寫)
可以轉(zhuǎn)換所有類型為布爾類型
Boolean(1)
true
Boolean(null)
false
Boolean(undefined)
false
Boolean(obj)
true
Boolean('s')
true
2、!! + x
這是一種最便捷最快的方式來使其他類型轉(zhuǎn)換為布爾類型
!!1
true
!!null
false
!!undefined
false
!!obj
true
!!'s'
true
布爾類型中有五個falsy值,分別是:NaN, 0, null, undefined, ''。
falsy是在Boolean 上下文中認(rèn)定可轉(zhuǎn)換為false的值.
對象數(shù)據(jù)類型無論是空對象還是其他對象,只要是對象轉(zhuǎn)換為布爾值就是true
三、任意類型轉(zhuǎn)換為數(shù)字
1、Number(x)(N要大寫)
除了要轉(zhuǎn)換的類型本來就是由數(shù)字的組成之外,其他的轉(zhuǎn)換一律變成NaN
Number('1')
1
Number('s')
NaN
Number(obj)
NaN
Number('s1')
NaN
Number('1s')
NaN
Number('+1')
1
Number('-1')
-1
2、parseInt(x,10)MDN
這是將其他類型轉(zhuǎn)換成整數(shù)類型,后面的10表示的是十進制,取值范圍為2~37之間
parseInt('011',10)
11
parseInt('0x11',10)
0
parseInt('011',36)
37
parseInt('0x11')
17
parseInt('08')
8
parseInt('011',2)
3
3、parseFloat(x)MDN
解析一個字符串并返回一個浮點數(shù)
parseFloat('3.14')
3.14
parseFloat('314e-2')
3.14
parseFloat("0.0314E+2")
3.14
parseFloat("3.14more non-digit characters")
3.14
parseFloat("FF2")
NaN
4、x - 0
這是一種最簡單快捷的方法,字符串減去一個0可以轉(zhuǎn)換成數(shù)字
'1'-0
1
's'-0
NaN
'02s'-0
NaN
5、+ x
在要轉(zhuǎn)換的類型前面加上+可以轉(zhuǎn)換成數(shù)字,并不是取絕對值
+ '1'
1
+ '-1'
-1
+ 's'
NaN
+ '1s'
NaN
+ obj
NaN
四、內(nèi)存圖
瀏覽器分配內(nèi)存給每個頁面,每個頁面也分配內(nèi)存給js引擎,js引擎將內(nèi)存分為代碼區(qū)和數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)又分為stack區(qū)和heap區(qū),簡單數(shù)據(jù)類型都儲存在stack區(qū),復(fù)雜數(shù)據(jù)類型儲存在heap區(qū),并在stack區(qū)儲存heap區(qū)對象的地址,通過stack的引用來訪問heap區(qū)的對象,復(fù)制也只是在stack區(qū)復(fù)制一個heap的地址
垃圾回收:頁面用完的內(nèi)存,瀏覽器再分給別的頁面,如果一個對象沒有被引用,它就是垃圾,將被回收
內(nèi)存泄漏:垃圾無法被清理,在IE6上就存在這樣的bug
五、淺拷貝和深拷貝
深拷貝
var a = 1
undefined
var b = a
undefined
b = 2
2
a
1
b變不影響a,這樣就是深拷貝,例如基本類型賦值就是深拷貝
淺拷貝
var a = {
name:'a'
}
undefined
var b = a
undefined
b.name='b'
"b"
a.name
"b"
b變化會影響a,這樣的類型就是淺拷貝