對Js有一定了解的盆友肯定都知道instanceof 並且還很常用,比如說用[1, 2, 3] instanceof Array 來判斷是否是數組。所以我們可能會簡單的以為他就是一個用來判斷typeof無法判斷的復雜數據類型的。但是,有些時候instaneof似乎並不是我們想象的那么簡單。比如:
1 123 instanceof Number
2 new Number(123) instanceof Number 3 Number(123) instanceof Number
思考一下上面的三個表達式返回什么呢?(在心里默默地思考一下你的答案,會不會是 true false true呢? 哈哈,那你還真就掉坑里了呢~)
咦~為什么是這樣勒?(沒有這種疑問的童鞋我的這篇博客可能滿足不了你了~嘻嘻)
事實上,instanceof的使用定義為
意思也就是說instanceof這個運算符是用來測試一個對象的原型鏈上是否有該原型的構造函數,即instanceof左表達式要是一個對象,右側表達式要是一個構造函數,並且左側是右側實例化出來的對象才會返回true
這樣理解之后我們在來看看上面的代碼:第一個 首先左側為Number類型,並不是一個對象,更不是由Number實例化出來的(基本包裝類型),所以為false
第二個 左側使用Number構造實例化對象 右側為Number構造 ,所以為true
第三個 左側沒有使用new所以並不是使用構造函數實例化 而是使用Number這個函數返回了一個數字, 所以為false
這樣,我們就基本了解了instanceof的用法啦~