JavaScript实用技巧总结
前言
总结一下最近接触到的JavaScript语法糖,与大家共享。
每块糖都有详细的说明和示例,就不多说了。
准确的类型检查
1 /* 2 * @function: 3 * 类型检查示例 4 * 通过此方法,可以检查某个变量是否为期望的数据类型 5 * @params: 6 * obj 需要检查的变量,必选 7 * config 数据类型白名单,可选,默认为全部类型 8 * @return: 9 * true 表示检查通过,false 未通过 10 * @examples: 11 * typeCheck("str"); //return true 12 * typeCheck({},{"[object Array]": 1}); //return false 13 */ 14 function typeCheck(obj,config){ 15 var hasOp = Object.prototype.hasOwnProperty, 16 toStr = Object.prototype.toString, 17 _config = config || { 18 "[object Object]": 1, 19 "[object Array]": 1, 20 "[object Regex]": 1, 21 "[object String]": 1, 22 "[object Number]": 1, 23 "[object Boolean]": 1, 24 "[object Function]": 1, 25 "[object Undefined]": 1, 26 "[object Null]": 1 27 }; 28 29 return hasOp.call(_config,toStr.call(obj)); 30 }
优雅的添加原型方法
1 /* 2 * @description: 3 * 优雅的添加原型方法 4 * 在公共作用域执行此代码片段即可 5 */ 6 if(typeof Function.prototype.method !== "function") { 7 Function.prototype.method = function(name,fn){ 8 this.prototype[name] = fn; 9 return this; 10 }; 11 } 12 13 /* 14 * 使用示例 15 */ 16 //定义一个“测试类” 17 function testFn(){ 18 19 } 20 21 //添加测试类的成员方法 22 testFn.method("add",function(a,b){ 23 return a + b; 24 }).method("sub",function(a,b){ 25 return a - b; 26 }); 27 28 //实例化 29 var testObj = new testFn(); 30 31 //调用成员方法 32 testObj.add(1,5); //return 6 33 testObj.sub(7,2); //return 5
快捷创建命名空间
1 /* 2 * @function: 3 * 创建命名空间 4 * @params: 5 * ex 命名空间表达式,例如:NSROOT.service.impl 6 * 此表达式必须从根节点开始写起 7 * @return: 8 * 返回Object,此Object是表达式的最后一个节点 9 * @others: 10 * 如果您不喜欢NSROOT这个命名,简单的查找替换即可 11 */ 12 var NSROOT = NSROOT || {}; 13 14 NSROOT.namespace = function(ex){ 15 var _ex = ex || "", 16 nsArray = _ex.split("."), 17 parentNode = NSROOT, 18 _s = "", 19 i = 0; 20 21 //判断命名空间是否从根节点开始 22 if(nsArray[0] !== "NSROOT"){ 23 throw("命名空间必须从根节点开始!"); 24 } 25 26 //去掉root节点 27 nsArray = nsArray.slice(1); 28 29 for(i = 0;i<nsArray.length;i++){ 30 _s = nsArray[i]; 31 if(parentNode[_s] === undefined){ 32 parentNode[_s] = {}; 33 } 34 parentNode = parentNode[_s]; 35 } 36 37 return parentNode; 38 }; 39 40 /* 41 * 使用示例 42 */ 43 //创建新的命名空间 44 var impl = NSROOT.namespace("NSROOT.service.impl"); 45 alert(impl === NSROOT.service.impl); //return true 46 47 //创建已有的命名空间,不覆盖原来的数据 48 NSROOT.namespace("NSROOT.service.impl"); 49 alert(impl === NSROOT.service.impl); //return true