检测原始值
对于字符串,typeof
| 使用typeof运算符 | |
|---|---|
| 字符串 | "string" |
| 数字 | "number" |
| 布尔值 | "boolean" |
| undefined | "undefined" |
| null | "object" |
检测引用值
这个时候使用typeof运算符已经力不从心了,因为所有对象都会返回"object"
| 使用typeof运算符 | |
|---|---|
| { } | "object" |
| [ ] | "object" |
| new Date() | "object" |
| new RegExp() | "object" |
检测引用值的类型最好的方法是使用instanceof运算符,它不仅能检测构造这个对象的构造器,还能检测原型链,而每个对象都继承自Object,因此每个对象的value instanceof Object都会 返回true
语法:value instanceof constructor
| 使用instanceof运算符 | 比较 | 输出 |
|---|---|---|
| { } | object | true |
| [ ] | Array | true |
| new Date() | Date | true |
| new RegExp() | RegExp | true |
检测函数
从技术上讲,javascript中的函数是引用类型,同样存在Function构造函数,每个函数都是其实例。
例如: 函数 instanceof Function 结果为true
检测函数的最好方法是使用typeof,因为它可以跨帧使用
检测属性
不好的写法: object[name],object[name]!=null,object[name]!=undefined
以上写法其实是检测值是什么,而不是检测值是否存在,所以当属性值为假值时会出错,最好的方法是使用in运算符
如果想检查实例对象的某个属性是否存在,则使用hasOwnProperty()方法,实例中存在这个属性则返回true,只存在于原型里则返回false