来自星星的码农 - 个人博客

来自星星的码农 - 个人博客

JavaScript判断数据类型

JavaScript中数据类型有:

  • 基本数据类型(值类型):String、Number、boolean、null、undefined、symbol(es6新增的)

  • 引用数据类型 (引用类型):object。包含 Function、Array、Date、RegExp、Error等都是属于 Object 类型 。

一、Object.prototype.toString.call(value)

这种方法是最准确的判断类型的方法

console.log(Object.prototype.toString.call({}));			// [object Object]
console.log(Object.prototype.toString.call([1, 2, 3])); 	// [object Array]
console.log(Object.prototype.toString.call(1)); 			// [object Number]
console.log(Object.prototype.toString.call("Hello")); 		// [object String]
console.log(Object.prototype.toString.call(true)); 			// [object Boolean]
console.log(Object.prototype.toString.call(undefined)); 	// [object Undefined]
console.log(Object.prototype.toString.call(null)); 			// [object Null]
console.log(Object.prototype.toString.call("")); 			// [object String]
console.log(Object.prototype.toString.call(function(){})); 	// [object Function]
console.log(Object.prototype.toString.call(new Date)); 		// [object Date]
二、typeof

typeof是一个运算符,返回值为表示类型的字符串。能判断的类型有:Number、String、Boolean、Undefined、Function,而对于null及数组、对象,typeof均检测出为object,不能进一步判断它们的类型。

console.log(typeof {}); 			// object
console.log(typeof [1, 2, 3]); 		// object
console.log(typeof 1); 				// number
console.log(typeof "Hello"); 		// string
console.log(typeof true); 			// boolean
console.log(typeof undefined); 		// undefined
console.log(typeof null); 			// object
console.log(typeof function() {}); 	// function
console.log(typeof new Date); 		// object
console.log(typeof ""); 			// string
三、instanceof

instanceof检测的是原型,内部机制其实就是判断对象 A 的原型链中是否有 B 的原型。

console.log({} instanceof Object); 				// true
console.log([1, 2, 3] instanceof Array); 		// true
console.log(1 instanceof Number); 				// false
console.log("Hello" instanceof String); 		// false
console.log(true instanceof Boolean); 			// false
console.log(function() {} instanceof Function); // true
console.log(new Date instanceof Date); 			// true
console.log("" instanceof String); 				// false

基本数据类型的值不能用 instanceof 判断类型,由于undefined和null没有构造函数,所以使用 instanceof 会报错!而由基本数据包装类创建的对象可以用 instanceof 判断类型。

instanceof 只能用于判断对象,基本数据类型值不能判断,所以也不能准确的判断出所有的类型!

四、constructor
console.log(({}).constructor == Object); 				// true
console.log(([1, 2, 3]).constructor == Array); 			// true
console.log((1).constructor == Number); 				// true
console.log(("Hello").constructor == String); 			// true
console.log((true).constructor == Boolean); 			// true
console.log((function() {}).constructor == Function); 	// true
console.log((new Date).constructor == Date); 			// true
console.log(("").constructor == String); 				// true

constructor能判断基本数据类型string、number、boolean和对象类型(array、function等等),但是它不能判断undefined和null。所以它判断类型值也不十分准确!