使用typeof檢測
- var num = 123; "number"
- var str = 'abcdef'; "string"
- var bool = true; "boolean"
- var arr = [1, 2, 3, 4]; "object"
- var json = {name:'wenzi', age:25}; "object"
- var func = function(){ console.log('this is function'); } "function"
- var und = undefined; "undefined"
- var nul = null; "object"
- var date = new Date(); "object"
- var reg = /[1]{5,20}$/; "object"
- var error= new Error(); "object"
檢測:typeof num;返回"number"
使用instanceof檢測
- 要求開發者明確地確認物件為某特定型別: num instanceof number 返回false
- num, str和bool沒有檢測出他的型別
使用constructor檢測
constructor本來是原型物件上的屬性,指向建構函式。
- Tom.constructor==Person,
- num.constructor==Number,
- str.constructor==String,
- bool.constructor==Boolean,
- arr.constructor==Array,
- json.constructor==Object,
- func.constructor==Function,
- date.constructor==Date,
- reg.constructor==RegExp,
- error.constructor==Error 除了undefined和null,其他型別的變數均能使用constructor判斷出型別,不過使用constructor也不是保險的,因為constructor屬性是可以被修改的,會導致檢測出的結果不正確
使用Object.prototype.toString.call檢測
如:Object.prototype.toString.call(num) 返回'[object Number]'
- 可以使用Object.prototype.toString.call(arr)=="object Array"來檢測變數arr是不是陣列
a-zA-Z ↩︎