▲ 点击上方蓝字关注我 ▲
文 / 景朝霞
来源公号 / 朝霞的光影笔记
ID / zhaoxiajingjing
目录:0 / 搭架子:utils.js1 / toType 检测数据类型2 / isFunction 检测是否为函数3 / isWindow 检测是否为window对象4 / isArrayLike 检测是否为类数组5 / isPlainObject 检测是否为纯对象6 / isEmptyObject 检测是否为空对象7 / isNumberic 检测是否为数字8 / 总的代码8个方法:utils.js,没有注释
0 / 搭架子:utils.js
以下代码是从jQuery中截取的,再封装成自己的一个小小的库:utils.js
//【utils.js】 (function () {
//...CODE /* 暴露API */ var utils = {
// 需要实现的方法有: toType: toType, //=> 检测数据类型 isFunction: isFunction, //=> 检测是否为函数 isWindow: isWindow, //=> 检测是否为window对象 isArrayLike: isArrayLike, //=> 检测是否为类数组 isPlainObject: isPlainObject, //=> 检测是否为纯对象 isEmptyObject: isEmptyObject, //=> 检测是否为空对象 isNumeric: isNumeric //=> 检测是否数字 }; if (typeof window !== "undefined") {
window._ = window.utils = utils; } if (typeof module === "object" && typeof module.exports === "object") {
module.exports = utils; } })();
△ 咱需要实现的那些方法
运算符优先级
1 / toType 检测数据类型
(function () {
var class2type = {}; var toString = class2type.toString; //=> 调用 Object.prototype.toString 检测数据类型的 // 建立数据类型检测的映射表 {'[obejct Array]':'array',....} var mapType = "Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "); mapType.forEach(function (name) {
class2type["[object " + name + "]"] = name.toLocaleLowerCase(); }); /** * 检测数据类型 * @param {*} obj * @returns */ function toType(obj) {
if (obj == null) {
//=> obj是:null、undefined,转成字符串 return obj + ""; } /* ① 基于字面量创建的基本数据类型值,直接 typeof 检测即可 ② 剩余的由 Object.prototype.toString来检测类型 => 从映射表里面找到的话,就返回结果即可 => 在映射表里没有找到,都返回了"object" */ // Support: Android <=2.3 only (functionish RegExp) return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj; } /* 暴露API */ var utils = {
toType: toType }; //...CODE })();
△ toType 检测数据类型