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。所以它判断类型值也不十分准确!