一、恣意範例轉換為字符串
1、x.toString(S要大寫)
這類要領能夠將number,boolean,object轉化為字符串,然則沒法轉換null,undefined這兩種數據範例
(1).toString()
"1"
true.toString()
"true"
var obj={}
(obj).toString()
"[object Object]"
2、String(x)(S要大寫)
String(x)是一個全局函數,功用更強大能夠轉換基礎上一切範例為字符串
String(1)
"1"
String(null)
"null"
String(undefined)
"undefined"
String(true)
"true"
String(obj)
"[object Object]"
3、” + x OR x + ”
這是最簡樸最便利的一種要領,把x加上一個空字符串就能夠疾速將其他範例轉換成字符串
1 + ''
"1"
null + ''
"null"
undefined + ''
"undefined"
true + ''
"true"
obj + ''
"[object Object]"
二、恣意範例轉換為布爾
1、Boolean(x)(B要大寫)
能夠轉換一切範例為布爾範例
Boolean(1)
true
Boolean(null)
false
Boolean(undefined)
false
Boolean(obj)
true
Boolean('s')
true
2、!! + x
這是一種最便利最快的體式格局來使其他範例轉換為布爾範例
!!1
true
!!null
false
!!undefined
false
!!obj
true
!!'s'
true
布爾範例中有五個falsy值,分別是:NaN, 0, null, undefined, ”。
falsy是在Boolean 高低文中認定可轉換為false的值.
對象數據範例無論是空對象照樣其他對象,只假如對象轉換為布爾值就是true
三、恣意範例轉換為数字
1、Number(x)(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
這是將其他範例轉換成整數範例,背面的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
剖析一個字符串並返回一個浮點數
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能夠轉換成数字
'1'-0
1
's'-0
NaN
'02s'-0
NaN
5、+ x
在要轉換的範例前面加上+能夠轉換成数字,並非取絕對值
+ '1'
1
+ '-1'
-1
+ 's'
NaN
+ '1s'
NaN
+ obj
NaN
四、內存圖
瀏覽器分派內存給每一個頁面,每一個頁面也分派內存給js引擎,js引擎將內存分為代碼區和數據區,數據區又分為stack區和heap區,簡樸數據範例都貯存在stack區,龐雜數據範例貯存在heap區,並在stack區貯存heap區對象的地點,經由過程stack的援用來訪問heap區的對象,複製也只是在stack區複製一個heap的地點
渣滓接納:頁面用完的內存,瀏覽器再分給別的頁面,假如一個對象沒有被援用,它就是渣滓,將被接納
內存走漏:渣滓沒法被清算,在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,如許的範例就是淺拷貝