typeof 和 instanceof 都能判斷數據類型,但是它們之間有什么區別呢,淺談如下
typeof
用於判斷數據類型,返回值為以下7種類型
1.symbol(ES6新增)
2.string
3.boolean
4.number
5.function
6..object (注意:typeof 在判斷 null、array、object以及函數實例(new + 函數)時,都是返回 object)
7.undefined
instanceof(只能判斷對象類型)
官方解釋:用於檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上。
通俗地講:用來檢測某個對象是誰的實例
所以我們就知道instanceof 是對象運算符。這里的實例就牽扯到了對象的繼承,它的判斷就是根據原型鏈進行搜尋,如果對象 obj1 的原型鏈上存在另一個對象obj2的原型屬性,
那么,表達式(obj1 instanceof obj2)返回值為 true,否則返回 false。
所以 instanceof 的返回值 為 true 或者 false
實例詳解:
總結
區別:
1. typeof 能判斷的類型有: number,boolean,string,undefined,object,function。
但是不能判斷 null,array,object和函數實例(new + 函數),都是返回object
2.instanceof 能夠對不同的對象實例進行判斷,如null,array等,返回值為布爾值,
所以 instanceof 對對象(array、object、function)判斷更加細致清晰。
但是:instanceof 不能判斷出基本數據類型(string、number、boolean、undefined、null)的值的類型!
共同點:
判斷類型都各自的不足,都不能完全准確的判斷出所有類型!!!