摘要:JavaScript检测类型,参考冴羽的博客再次修改
typeof 适合基本类型及 function 检测,遇到 null 有 bug ;
instanceof 测某个对象的原型链是否包含某个构造函数的 prototype 属性(基本类型没有原型链),它是基于原型链运作的;
constructor 指向的是最初创建者,而且容易伪造,不适合做类型判断;
toString 适合检测基本类型和内置对象
示例
1 | // typeof |
当toString方法被调用的时候,下面的步骤会被执行:
1.如果this值是undefined,就返回[object Undefined]
2.如果this的值是null,就返回[object Null]
3.让O成为ToObject(this)的结果
4.让class成为O的内部属性[[Class]]的值
5.最后返回由 “[object “ 和 class 和 “]” 三个部分组成的字符串
注意:在IE6中(还有用IE6的吗),null和undefined会被Object.prototype.toString识别成[object Object]
封装检测函数
写一个能检测各种类型的函数type,如果是基本类型,就使用typeof检测,引用类型就使用toString检测。鉴于typeof 的结果是小写,希望所有的结果都是小写
1 | var class2type = {}; |
可以对常用的判断直接封装,比如isFunction:
1 | function isFunction(obj) { |
如此理解axis.js就更容易了:
1 | (function (root, factory) { |
使用方法:
1 | axis.isArray([]); // true |