第一次筆記匯總
// 基本數據類型:number string boolean null undefined symbol BigInt
?// 引用數據類型:object(普通對象、數組對象、正則對象、日期對象...) function /
* * JS中的數據類型檢測:
?* + tyepof [value] 檢測數據類型的運算符
?*??+ [example] instanceof [class] 檢測某一個實例是否屬于這個類
?* + [example].constructor===[class] 檢測實例和類關系的,從而檢測數據類型
?* + Object.prototype.toString.call([value]) 檢測數據類型 * * typeof的細節點:
?* + typeof 檢測的結果首先是一個字符串,字符串中包含了對應的數據類型(例如:"number"、"string"、"boolean"、"undefined"、"object"、"function"、"symbol"、"bigint")
?* + 特殊的檢測結果:
?* + NaN / Infinity 都是數字類型的,檢測出來的結果是 "number"
?* + typeof null 的結果是 "object"(這個是瀏覽器的BUG:所有的值在計算中都已二進制編碼存儲,瀏覽器中把前三位是000的當做對象,而null的二進制前三位就是000,所以被識別為對象,但是它不是對象,它是空對象指針,是基本類型值)
?* + typeof 普通對象/數組對象/正則對象... 結果都是"object",這樣就無法基于typeof區分是普通對象還是數組對象等了
*/// =>百度和騰訊的面試題
// console.log(typeof []); //=>"object"http:// console.log(typeof typeof typeof []); //=>"string" 由于typeof返回的結果永遠是一個字符串(字符串中包含了對應的類型),所以連續出現兩個及兩個以上typeof檢測的時候,最后結果都是 "string"
// 已知有一個變量x,但是我們無法確認其數據類型,我們需要有一個判斷操作:當x的類型是對象的時候(什么對象都可以),則處理對應的事情
// if (typeof x == "object") { //=>null檢測結果也會是"object",所以結果是"object"不一定是對象,還可能是null呢// // ...// }
//衍生出:if (x != null && typeof x == "object")
?//瀏覽器的底層渲染機制
####數據類型的區別:
基本數據類型是按值操作,值存儲在棧內存中;引用數據類型是按照堆內存的地址來操作,我們需要把對象的鍵值對存儲在堆內存中,我們操作的是堆內存的引用地址;