1、JS中判断数据类型可以使用typeof,如:
console.log(typeof(2)) //"number"
console.log(typeof("abc")) //"string"
console.log(typeof(true)) //"boolean"
console.log(typeof(undefined)) //"undefined"
console.log(typeof(function fun(){})) //"function"
console.log(typeof(null)) //"object"
console.log(typeof([1,2,3,4,5]))//"object"
console.log(typeof({})) //"object"
可以看出:typeof只能区分基本类型,即:number、string、boolean、undefined、function、object,对于null、array、object来说使用typeof会统一返回“object”,要想区分对象、数组、函数是不行的,但是使用Object.prototype.toString.calll(obj)来判断某个对象属于某种内置类型。
2、使用Object.prototype.toString.calll(obj)来判断某个对象属于某种内置类型,如:
//判断基本类型
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
//判断原生引用类型——数组类型
console.log(Object.prototype.toString.call([]));//[object Array]
//判断原生引用类型——函数类型
console.log(Object.prototype.toString.call(function(){}));//[object Function]
//判断原生引用类型——日期类型
console.log(Object.prototype.toString.call(new Date));//[object Date]
//判断原生引用类型——正则表达式类型
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
//判断原生引用类型——对象类型
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
//判断原生引用类型——自定义类型
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]
可以看出:这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如:
console.log(person instanceof Person); // true
3、判断原生JSON对象
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON); // [object JSON]
结果为 [object JSON] 说明JSON是原生的,否则不是;另外需要注意的是:Object.prototype.toString()本身是允许被修改的,前边的方法都是以toString()方法未被修改作为前提的。
网友评论