JS里的數據類型轉換

一、恣意範例轉換為字符串

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,如許的範例就是淺拷貝

    原文作者:梁廣銘
    原文地址: https://segmentfault.com/a/1190000015440749
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞