使用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 ↩︎