数据类型检测方法

typeof

typeof操做符是检测基本类型的最佳工具。数组

"undefined" — 未定义 typeof unddfined
"boolean"   — 布尔值 typeof boolean
"string"    — 字符串 typeof string
"number"    — 数值 typeof unddfined number
"object"    — 对象或null  typeof object/null
"function"  — 函数 typeof function
复制代码

Instanceof

instanceof用于检测引用类型,能够检测到它是什么类型的实例。
instanceof 检测一个对象A是否是另外一个对象B的实例的原理是:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。若是在,则返回true,若是不在则返回false。不过有一个特殊的状况,当对象B的prototype为null将会报错(相似于空指针异常).bash

var sXzaver = new String("Xzavier"); 
console.log(sXzaver instanceof String);   //  "true"
var aXzaver = [1,2,3]; 
console.log(aXzaver instanceof Array);   //  "true"
检测数组在ECMA Script5中定义了一个新方法Array.isArray()
复制代码

Constructor

constructor属性返回对建立此对象的数组函数的引用。能够用于检测自定义类型函数

'xz'.constructor == String // true
(123).constructor == Number // true
(true).constructor == Boolean // true
[1,2].constructor == Array // true
({name:'xz'}).constructor == Object // true
(function(){}).constructor == Function // true
(new Date()).constructor == Date // true
(Symbol()).constructor == Symbol // true
(/xz/).constructor == RegExp // true
复制代码

constructor不适用于null和undefined。除了这些原生的,constructor还可验证自定义类型。工具

function Xzavier(){}
var xz = new Xzavier();
xz.constructor == Xzavier;  // true 
复制代码

Object.prototype.toString.call(obj)

推荐使用:Object.prototype.toString.call(obj)ui

原理:调用从Object继承来的原始的toString()方法

Object.prototype.toString.call('xz'); //"[object String]"
Object.prototype.toString.call(123);  //"[object Number]"
Object.prototype.toString.call(true); //"[object Boolean]"
Object.prototype.toString.call([1,2]); //"[object Array]"
Object.prototype.toString.call({name:'xz'}); //"[object Object]"
Object.prototype.toString.call(function(){}); //"[object Function]"
Object.prototype.toString.call(null); //"[object Null]"
Object.prototype.toString.call(undefined); //"[object Undefined]"
Object.prototype.toString.call(); //"[object Undefined]"
Object.prototype.toString.call(new Date()); //"[object Date]"
Object.prototype.toString.call(/xz/);  //"[object RegExp]"
Object.prototype.toString.call(Symbol()); //"[object Symbol]"

var obj = {name:"Xzavier", age:23};
var a = [1,2,3];

function isType(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}
isType(obj);  // "Object" 
isType(a)  // "Array"  
复制代码
相关文章
相关标签/搜索