js中数据类型的检测
(1)检测原始值
原始值类型有:字符串、数字、布尔值、null和undefined。
对于字符串,typeof返回“string”
对于数字,typeof返回“number”
对于布尔值,typeof返回“boolean”
对于undefined,typeof返回"undefined"
基本用法:if(typeof name === "string"){}
typeof将其用于一个未声明的变量也不会报错,未定义的变量和值为undefined的变量通过typeof都将返回"undefined"
最后,typeof null会返回“object”,所以检测null时用恒等 === 或!==
(2)检测引用值
引用值也称对象。内置引用类型有:Object、Array、Date、Error,用typeof显得力不从心,会返回"object"。
所以检测某个引用值的最好方法是使用instanceof运算符。它不仅检测构造这个对象的构造器,还检测原型链。
基本用法: var now = new Date(); if(now instanceof Date){}
(3)检测函数
函数也是引用类型。
不好的写法:if(myFunc instanceof Function){}
好的写法:if(typeof myFunc === "Function"){}
注意:在IE8和更早的IE浏览器中,DOM节点中的函数会返回'object".。
(4)检测数组
Douglas Crockford首先推荐使用“鸭式辨型”来检测sort()方法是否存在。
function isArray(value){return typeof value.sort === "function" }
最终,又有一种更优雅的方案:
function isArray(value){return Object.prototype.toString.call(value) === "[object Array]"}
(5)检测属性
var object = {
count:0,
relatede:null
}
好的写法:
if("count" in object){}
不好的写法:检测假值
if(object["count"]){}
但是in会检测到原型链,如果只检测实例对象,则用hasOwnProperty()方法
基本用法:if(object.hasOwnProperty("related")){}
更推荐使用in。