你不知道的JavaScript(二)

charliemei發表於2018-03-13

第三章 原生函式

JS有很多原生函式,為基本的資料型別值提供了封裝物件,String,Number,Boolean等。我們可以通過{}.call.toString()來檢視所有typeof返回object的物件的內建屬性[[class]],這個屬性無法直接訪問。我們基本型別呼叫的方法和屬性都是通過封裝物件去訪問的,例如var a = “abc”; a.length//3,但是有一點需要注意的是new Boolean(false)//true,為false封裝物件時,它是一個真值(即總是返回true),平時在用到封裝物件中的基本型別值的時候,JS會發生隱式拆封。

第四章 強制型別轉換

強制型別轉換是JS裡難以掌握的,但是在實際應用中它又是很有用處的,我們十分有必要去深入理解和合理運用它。型別轉換有顯式和隱式之分,後者就是強制型別轉換,例如var a = 42; var b = a + “”;//“42”,這裡數字a被轉換為了字串b。

非字串轉換為字串,在沒有自行定義的情況下,普通物件呼叫toString方法返回內部的[[Class]]值,JSON.Stringfy函式在將物件序列化為字串時,如果定義了toJSON方法就會首先呼叫該方法,用返回值進行序列化,在陣列中如果遇到undefined,空function,那麼會在對應位置返回null以保證單元位置不變。

在將非數字值轉換為數字時就會進行ToNumber操作,false轉換為0,true轉換為1,undefined轉換為NaN,null轉換為0,對於物件來說,會首先呼叫valueOf,沒有就呼叫toString來返回基本型別,然後再強制轉換為數字值,如果均不返回數字,則會報錯。 轉換為布林值時,從邏輯上說,出現在假值列表上的才為假值,+0,-0,infinite,null,undefined,””,NaN等,要特別注意的是這些假值封裝的物件是真值(所有物件都是真值),除了””以外的字串也都是真值。

~這個符號能有奇妙的功能,~X可以視為-(X+1)。通常用+X來把X轉換為數字,用X+””來將X轉換為字串,用X|0來將X取整。

對於+運算子,先是呼叫toString進行字串拼接,如果不行就用valueOf轉換為數字,進行加法操作。

對於比較運算,數字和字串比較先轉化為數字,如果有布林型別就將布林型別轉換為數字,字串或數字和物件比較,先把物件用toString,valueOf轉換為字串或者數字。

相關文章