underscore.js 中一些 JavaScript 经常使用类型检查方法,以及一些工具类的判断方法。javascript
首先咱们先来谈一谈数组类型的判断。先贴出我本身封装好的函数。
java
第一: 在ES5里面有一个检测数组的函数,就是Array.isArray(); (毕竟原生的才是最屌的)可是若是老版本的浏览器不支持ES5呢。那怎么办 因此咱们这个时候要想其余的办法。
web
来回忆下 instanceof 运算符的使用方式。a instanceof b,若是返回 true,表示 a 是 b 的一个实例。那么若是 a instanceof Array 返回 true,是否是就说明 a 是 数组类型呢?跟 instanceof 师出同门的还有 constructor,是否一样能够判断呢?数组
由于每一个 frame 都有一套本身的执行环境,跨 frame 实例化的对象彼此不共享原型链。若是打印 a instanceof window.frames[0].Array,那么结果就是 true 了。
因此正确的是使用Object.prototype.toString.call var a = [0, 1, 2]; console.log(a instanceof Array); // true 就是数组? console.log(a.constructor === Array); // true 数组?
(obj) === "[object Array]";有原生的ES5是最好 因此就使用第一个。
underscore把function和obj都当成对象,可是要除去null。 根据typeof来返回复杂类型。浏览器
再看 'Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error' 这些类型的判断,其实均可以用 Object.prototype.toString.call 来判断,因此写在了一块儿: 可是 IE9下面没法判断Arguments。app
今天就跟你们聊一聊 underscore.js 中一些 JavaScript 经常使用类型检查方法,以及一些工具类的判断方法。函数