检测数据类型
1.typeof 用来检测数据类型的运算符
使用typeof 检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类
例 “number” "string" "boolean" "function" "object" "undefined"
console.log(typeof typeof typeof function()); // “string”
局限性:
null->"object"
不能具体细分数组还是正则 返回结果都是“object”
=========================================================
2.instanceof 检测某一个实例是否属于该类型
var obj =[12,23];
console.log(obj.instanceof Array /RegExp ..)
局限性:
对于基本数据类来说,字面量方式创建出来的结果和实例方式创建出来的结果又一定的区别,从严格意义上来讲,只有实例创建出来的结果才是标准的对象数据类型值,也是标准类型 的一个实例。字面量创建出来的基本数据类型值 ,不是严谨的实例,但是由于js的松散性 所有可以使用 该类型原型上的方法。
1 instanceof Number //false
" " instanceof String // false
[ ] instanceof Array //true
new Number(1) instanceof Number // true
2. instanceof 的特性 只要在当前实例的原型链上 用instanceof 检测 的结果都是true
var ary=[];
arr instanceof Array //true
arr instanceof Object //true
================================================
3.constructor
检测不到Object
当类的原型重写,constructor 可能改变 所以检测可能不准确
var num =1 ;
console.log(num.constructor === Number); //true
obj.constructor === Array ...
reg.constructor === RegExp //true
reg.constructor === Object //false
===================
4.Object.prototype.toString.call() 最准确最常用用的方式
Object.prototype.toString.call() 返回[object 具体类型] 包括 null undefined
Object.prototype.toString.call(Date) //[ Date]
Object.prototype.toString.call(1) //[ Number]
Object.prototype.toString.call("sss") //[ String]
Object.prototype.toString.call(true) //[ Boolean]
Object.prototype.toString.call(null) //[ Null]
Object.prototype.toString.call(undefined) //[ Undefined]
Object.prototype.toString.call(function(){}) //[ Function]