JavaScript常用小技巧小结
前言
总结一下最近接触到的JavaScript语法糖,与大家共享。
每块糖都有详细的说明和示例,就不多说了。
准确的类型检查
/* *@function: * 类型检查示例 * 通过此方法,可以检查某个变量是否为期望的数据类型 *@params: * obj需要检查的变量,必选 * config数据类型白名单,可选,默认为全部类型 *@return: * true表示检查通过,false未通过 *@examples: * typeCheck("str");//returntrue * typeCheck({},{"[objectArray]":1});//returnfalse */ functiontypeCheck(obj,config){ varhasOp=Object.prototype.hasOwnProperty, toStr=Object.prototype.toString, _config=config||{ "[objectObject]":1, "[objectArray]":1, "[objectRegex]":1, "[objectString]":1, "[objectNumber]":1, "[objectBoolean]":1, "[objectFunction]":1, "[objectUndefined]":1, "[objectNull]":1 }; returnhasOp.call(_config,toStr.call(obj)); }
优雅的添加原型方法
/* *@description: * 优雅的添加原型方法 * 在公共作用域执行此代码片段即可 */ if(typeofFunction.prototype.method!=="function"){ Function.prototype.method=function(name,fn){ this.prototype[name]=fn; returnthis; }; } /* *使用示例 */ //定义一个“测试类” functiontestFn(){ } //添加测试类的成员方法 testFn.method("add",function(a,b){ returna+b; }).method("sub",function(a,b){ returna-b; }); //实例化 vartestObj=newtestFn(); //调用成员方法 testObj.add(1,5); //return6 testObj.sub(7,2); //return5
快捷创建命名空间
/* *@function: * 创建命名空间 *@params: * ex命名空间表达式,例如:NSROOT.service.impl * 此表达式必须从根节点开始写起 *@return: * 返回Object,此Object是表达式的最后一个节点 *@others: * 如果您不喜欢NSROOT这个命名,简单的查找替换即可 */ varNSROOT=NSROOT||{}; NSROOT.namespace=function(ex){ var_ex=ex||"", nsArray=_ex.split("."), parentNode=NSROOT, _s="", i=0; //判断命名空间是否从根节点开始 if(nsArray[0]!=="NSROOT"){ throw("命名空间必须从根节点开始!"); } //去掉root节点 nsArray=nsArray.slice(1); for(i=0;i<nsArray.length;i++){ _s=nsArray[i]; if(parentNode[_s]===undefined){ parentNode[_s]={}; } parentNode=parentNode[_s]; } returnparentNode; }; /* *使用示例 */ //创建新的命名空间 varimpl=NSROOT.namespace("NSROOT.service.impl"); alert(impl===NSROOT.service.impl); //returntrue //创建已有的命名空间,不覆盖原来的数据 NSROOT.namespace("NSROOT.service.impl"); alert(impl===NSROOT.service.impl); //returntrue