首先來提問乙個:typeof
是否能正確判斷型別?
答案是:不可以,因為由於歷史原因,在判斷原始型別時,typeof null
會等於object
。而且對於物件來說,除了函式,都會轉換成object
。例子如下:
typeof 1 //'number'
typeof "1" //
'string'
typeof
null
//typeof //
'object'
typeof {} //
'object'
typeof window.alert //
'function'
再來提問乙個,instanceof
是否能正確判斷型別?
答案是:還是不可以,雖然instanceof
是通過原型鏈來判斷的,但是對於物件來說,array
也會被轉換成object
,而且也不能區分基本型別string
和boolean
。例如:
functionfunc() {}
const func = new
func()
console.log(func
instanceof func) //
true
const obj ={}
const arr =
obj
instanceof object //
true
arr instanceof object //
true
arr instanceof array //
true
const str = "abc"const str2 = new string("abc")
str
instanceof string //
false
str2 instanceof string //
true
所以該怎麼辦呢?這時候我們可以使用:object.prototype.tostring.call()
因為每個物件都有乙個tostring()
方法,當要將物件表示為文字值或以預期字串的方式引用物件時,會自動呼叫該方法。預設情況下,從object
派生的每個物件都會繼承tostring()
方法。如果此方法未在自定義物件中被覆蓋,則tostring()
返回[object type]
,其中type
是物件型別。所以就有以下例子:
object.prototype.tostring.call(new date()) //[object date]
object.prototype.tostring.call("1") //
[object string]
object.prototype.tostring.call(1) //
[object numer]
object.prototype.tostring.call(undefined) //
[object undefined]
object.prototype.tostring.call(null) //
[object null]
所以綜合上述知識點,我們可以封裝出以下通用型別判斷方法:
var type = function(data) ;
使用方法如下:
type("a") //string
type(1) //
number
type(window) //
window
type(document.queryselector("h1")) //
element
js判斷資料型別
1 typeof 形如 var x xx typeof x string 返回型別有 undefined string number boolean function object 缺點 對於object型別不能細分是什麼型別 優點 對空null的判斷 undefined 的應用 2 instanc...
js判斷資料型別
了解js的都知道,有個typeof 用來判斷各種資料型別,有兩種寫法 typeof typeof 如下例項 typeof 2 輸出 number typeof null 輸出 object typeof 輸出 object typeof 輸出 object typeof function 輸出 fu...
js判斷資料型別
1 判斷是否為陣列型別 2 判斷是否為字串型別 3 判斷是否為數值型別 isnan 變數 如果為true就是數字型別 注意這個函式一般針對數字型別來判斷是否值為nan,若變數為非數字型別,則先轉化為數字型別再做判斷,用此函式時,別忘考慮空串和空格 這倆轉化為數字是0 4 判斷是否為日期型別 5 判斷...