javascript中对变量类型的判断方法

221 阅读1分钟

使用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 = /^[a-zA-Z]{5,20}$/;  "object"
var error= new Error();  "object"

检测:typeof num;返回"number"

使用instanceof检测

  • 要求开发者明确地确认对象为某特定类型: num instanceof number 返回false
  • num, strbool没有检测出他的类型

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

除了undefinednull,其他类型的变量均能使用constructor判断出类型,不过使用constructor也不是保险的,因为constructor属性是可以被修改的,会导致检测出的结果不正确

使用Object.prototype.toString.call检测

如:

Object.prototype.toString.call(num) 

返回'[object Number]'

可以使用Object.prototype.toString.call(arr)=="object Array"来检测变量arr是不是数组