思慮良久,終於要動筆寫「前端百題斬」了,雖然是百題斬,但目前僅「 js、瀏覽器和網絡」部分就肯定了100個高能知識點。寫該系列文章的初衷是「 讓每位前端工程師掌握高頻知識點,爲工做助力」。但願朋友們關注公衆號「 執鳶者」,用知識武裝本身的頭腦。
typeof
是一個運算符,其有兩種使用方式:(1)typeof(表達式)
;(2)typeof 變量名
;返回值是一個字符串,用來講明變量的數據類型;因此能夠用此來判斷number
,string
,object
,boolean
,function
,undefined
,symbol
這七種類型,每種狀況返回的內容以下表所示:
類型 | 結果 |
---|---|
String | 'string' |
Number | 'number' |
Boolean | 'boolean' |
Undefined | 'undefined' |
Object | 'object' |
function函數 | 'function' |
Symbol | 'symbol' |
typeof
方法雖然很好用,但該方法有必定的侷限性: 對於對象、數組、null
返回的值是object
。好比typeof(window)
,typeof(document)
,typeof(null)
返回的值都是object
,這是爲何呢?這就要從底層提及。js在底層存儲變量的時候,會在變量的機器碼的低位1-3位存儲其類型信息:
000
:對象;010
:浮點數;100
:字符串;110
:布爾值;1
:整數;特例:javascript
(1)null
全部機器碼均爲0
前端
(2)undefined
:用 −2^30
整數來表示java
typeof
就是經過機器碼判斷類型,因爲null的全部機器碼均爲0,該機器碼和對象同樣,所以直接被看成對象來看待,因此經過typeof
就不可以判斷區分對象還有null
了。
說了這麼多,尚未進行驗證,下面就逐一驗證一下:
// 字符串 console.log(typeof('lili')); // string // 數字 console.log(typeof(1)); // number // 布爾值 console.log(typeof(true)); // boolean // undefined console.log(typeof(undefined)); // undefined // 對象 console.log(typeof({})); // object // 數組 console.log(typeof([])); // object // null console.log(typeof(null)); // object // 函數 console.log(typeof(() => {})); // function // Symbol值 console.log(typeof(Symbol())); // symbol
instanceof
運算符用於檢測構造函數的prototype
屬性是否出如今某個實例對象的原型鏈上,返回值爲布爾值,用於指示一個變量是否屬於某個對象的實例。其語法以下所示:
object instanceof constructor
instanceof
主要的實現原理就是隻要右邊變量的prototype
在左邊變量的原型鏈上便可。所以,instanceof
在查找的過程當中會遍歷左邊變量的原型鏈,直到找到右邊變量的prototype
,若是查找失敗,則會返回false
.步驟以下所示:
上面講述了instanceof的簡單使用和其原理,下面簡單使用一下並驗證一下該原理:
const arr = [1, 2]; // 判斷Object的prototype有沒有在數組的原型鏈上 console.log(arr instanceof Object); // true // 數組arr的原型 const proto1 = Object.getPrototypeOf(arr); console.log(proto1); // [] // 數組arr的原型的原型 const proto2 = Object.getPrototypeOf(proto1); console.log(proto2); // [] // Object的prototype console.log(Object.prototype); // 判斷arr的原型是否與Object的prototype相等 console.log(proto1 === Object.prototype); // false // 判斷arr的原型的原型是否與Object的prototype相等 console.log(proto2 === Object.prototype); // true
1.若是以爲這篇文章還不錯,來個分享、點贊吧,讓更多的人也看到數組
2.關注公衆號執鳶者,與號主一塊兒斬殺前端百題。瀏覽器