JavaScript常用小技巧小结


Posted in Javascript onDecember 29, 2014

前言

     总结一下最近接触到的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
Javascript 相关文章推荐
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
js 编写规范
Mar 03 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
May 03 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
JavaScript中的this机制
Jan 30 Javascript
vue中mint-ui环境搭建详细介绍
Apr 06 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
jQuery中:gt选择器用法实例
Dec 29 #Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 #Javascript
JavaScript中的值类型详细介绍
Dec 29 #Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 #Javascript
JavaScript中的console.assert()函数介绍
Dec 29 #Javascript
jQuery中:eq()选择器用法实例
Dec 29 #Javascript
根据配置文件加载js依赖模块
Dec 29 #Javascript
You might like
牡丹941资料
2021/03/01 无线电
PHP中for与foreach的区别分析
2011/03/09 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
微信小程序url传参写变量的方法
2018/08/09 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
python批量修改xml属性的实现方式
2020/03/05 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
护士自我鉴定总结
2014/03/24 职场文书
吨的认识教学反思
2014/04/27 职场文书
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers