JavaScript常用小技巧小结

  前言

  总结一下最近接触到的JavaScript语法糖,与大家共享。

  每块糖都有详细的说明和示例,就不多说了。

  准确的类型检查

  

复制代码 代码如下:

  /*

  * @function:

  *   类型检查示例

  *   通过此方法,可以检查某个变量是否为期望的数据类型

  * @params:

  *   obj 需要检查的变量,必选

  *   config 数据类型白名单,可选,默认为全部类型

  * @return:

  *   true 表示检查通过,false 未通过

  * @examples:

  *   typeCheck("str"); //return true

  *   typeCheck({},{"[object Array]": 1}); //return false

  */

  function typeCheck(obj,config){

  var hasOp = Object.prototype.hasOwnProperty,

  toStr = Object.prototype.toString,

  _config = config || {

  "[object Object]": 1,

  "[object Array]": 1,

  "[object Regex]": 1,

  "[object String]": 1,

  "[object Number]": 1,

  "[object Boolean]": 1,

  "[object Function]": 1,

  "[object Undefined]": 1,

  "[object Null]": 1

  };

  return hasOp.call(_config,toStr.call(obj));

  }

  优雅的添加原型方法

  

复制代码 代码如下:

  /*

  * @description:

  *   优雅的添加原型方法

  *   在公共作用域执行此代码片段即可

  */

  if(typeof Function.prototype.method !== "function") {

  Function.prototype.method = function(name,fn){

  this.prototype[name] = fn;

  return this;

  };

  }

  /*

  * 使用示例

  */

  //定义一个“测试类”

  function testFn(){

  }

  //添加测试类的成员方法

  testFn.method("add",function(a,b){

  return a + b;

  }).method("sub",function(a,b){

  return a - b;

  });

  //实例化

  var testObj = new testFn();

  //调用成员方法

  testObj.add(1,5);  //return 6

  testObj.sub(7,2);  //return 5

  快捷创建命名空间

  

复制代码 代码如下:

  /*

  * @function:

  *   创建命名空间

  * @params:

  *   ex 命名空间表达式,例如:NSROOT.service.impl

  *   此表达式必须从根节点开始写起

  * @return:

  *   返回Object,此Object是表达式的最后一个节点

  * @others:

  *   如果您不喜欢NSROOT这个命名,简单的查找替换即可

  */

  var NSROOT = 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];

  }

  return parentNode;

  };

  /*

  * 使用示例

  */

  //创建新的命名空间

  var impl = NSROOT.namespace("NSROOT.service.impl");

  alert(impl === NSROOT.service.impl);  //return true

  //创建已有的命名空间,不覆盖原来的数据

  NSROOT.namespace("NSROOT.service.impl");

  alert(impl === NSROOT.service.impl);  //return true