• 技术文章 >web前端 >js教程

    JavaScript基本编码模式小结_基础知识

    2016-05-16 17:53:21原创406
    无论编写任何程序都会接触到编码风格,设计模式等概念,编码风格一般侧重于书写规范,而设计模式则偏向于程序架构设计。本文中笔者整理的这些“模式”包含了编写JavaScript代码时一些常用的方法或者小技巧,可以帮助初学JavaScript的同学迅速提升代码质量。当然,在此之前首先要保证规范的书写习惯,在此之上可以再将本文介绍的知识点运用到代码编写中,则可以大大提升代码质量。
    下面是笔者整理的一些点,没有什么逻辑顺序,想到哪儿写到哪儿了,不足之处欢迎大家补充指正。
    1. 变量定义
    复制代码 代码如下:

    // 一般写法
    var a = 0;
    var b = 1;
    var c = 'xxx';
    // 推荐写法
    var a = 0,
    b = 1,
    c = 'xxx';

    2. 尽量使用字面量
    复制代码 代码如下:

    // 一般写法
    var obj = new Object();
    obj.a = 'aa';
    obj.b = 'bb';
    obj.c = 'cc';
    var arr = new Array();
    // 推荐写法
    var obj = {
    a: 'aa',
    b: 'bb'
    };
    var arr = [];
    function getXX(index){
    return ['aa', 'bb', 'xx', 55, 'xxb'](index);
    }
    function getMessage(code){
    return {
    404: 'xxx',
    500: 'xxx'
    }[code];
    }

    3. 正则字面量
    复制代码 代码如下:

    var regex = new RegExp('someting');
    // 当正则表达式可能变化时才使用构造函数
    var cls = 'someclass',
    regex = new RegExp(cls + '\\s*', 'ig'); // only for dynamic regexs
    // 其他情况均使用字面量
    var regex = /someting/ig;

    4. 设置默认值
    复制代码 代码如下:

    // Default values
    var arg = arg || 'default'; // fallback
    document.getElementById('test').onclick = function(event){
    var event = event || window.event;
    };
    function getX(a){
    return a+1 || 'default';
    }

    5. 条件判断
    复制代码 代码如下:

    // Conditions
    answer = obj && obj.xx && obj.xx.xxx;
    // 连续判断
    if(obj && obj.xx && obj.xx.xxx){
    // do something
    }
    if(obj.xx){
    // do something
    }
    if(!obj){
    // do something
    }
    // 使用全等判断
    if(a === b){
    // do something
    }
    // 尽量不检测浏览器,仅检测要使用的特性是否支持
    if(document.getElementById){
    // ability detect
    }

    6. 三元操作符
    复制代码 代码如下:

    // Ternary
    check ? value1 : value2;
    // 三元操作符更简洁
    var foo = (condition) ? value1 : value2;
    function xx(){
    if(condition){
    return value1;
    }else{
    return value2;
    }
    }
    function xx(){
    return (condition) ? value1 : value2;
    }
    // 格式化三元操作符
    foo = predicate ? "one" :
    predicate ? "two" :
    "default"; // format

    7. 插入迭代值
    复制代码 代码如下:

    // Insert iteration
    var name = value[i];
    i++;
    // 直接将迭代值插入
    var name = value[i++];

    8. DOM操作
    复制代码 代码如下:

    // DOM Operation
    el.style.display = 'none'; // offline
    // operation
    el.style.display = 'block';
    // 使用文档碎片操作更好
    var fragment = document.createDocumentFragment(); // better
    el.innerHTML = ''; // fast remove all children, but may leaks memory
    el.innerHTML = 'xxx'; // ok, use it!
    // 小心处理NodeList
    var images = document.getElementsByTagName('img'); // be careful! dynamic list

    9. 事件代理
    复制代码 代码如下:

    // 使用事件代理,在更外层的元素上监听事件
    document.getElementById('list').onclick = function(evt){
    var evt = evt || window.event,
    target = evt.target || evt.srcElement;
    if(target.id === 'btn1'){
    // do something
    }
    }

    10. 命名空间
    复制代码 代码如下:

    // An Object as a Namespace
    var MYAPP = {};
    MYAPP.dom.get = function(id){};
    MYAPP.style.css = function(el, style){};
    MYAPP.namespace('event');

    11. 链式操作
    复制代码 代码如下:

    // Chaining operation: return this
    function setValue(el, value){
    el.value = value;
    return this;
    }
    var obj = new MYAPP.dom.Element('span');
    obj.setText('hello')
    .setStyle('color', 'red')
    .setStyle('font', 'Verdana');

    12. 私有作用域
    复制代码 代码如下:

    // Function
    (function(){
    var _private = 'cant see me';
    })();
    (function($){
    $('#xxb').click(function(){ });
    })(jQuery);

    13. 配置对象
    复制代码 代码如下:

    // Configure Object
    function foo(id, conf, null , null){
    // do somethin
    }
    foo('bar', {
    key1 : 1,
    key2 : 2
    });

    14. 类型转换
    复制代码 代码如下:

    // Type Conversion
    +'010' === 10;
    Number('010') === 10;
    parseInt('010', 10) === 10;
    10 + '' === '10';
    +new Date() // timestamp
    +new Date;

    15. 扩展原型
    复制代码 代码如下:

    // 仅在需要向前兼容时才使用,其他情况不建议扩展原型对象
    Array.prototype.forEach = function(){
    // only for forward compatible
    };

    16. 循环优化
    复制代码 代码如下:

    // 缓存
    for(var i=0, j = document.getElementsByTagName('a').length; i0; i--){
    // maybe faster
    }
    // 据说是最快的
    while(i--){
    // maybe fastest
    }

    17. 尽量使用新特新
    复制代码 代码如下:

    Array.forEach();
    getElementsByClassName();
    querySlectorAll();
    // 首先检测是否支持新特性,能用就用
    if(document.getElementsByClassName){
    // use
    }else{
    // your implementations
    }

    18. 惰性载入
    复制代码 代码如下:

    // 只判断一次,再次调用该函数则无需判断
    function lazyDef(){
    if(condition1){
    lazyDef = function(){ };
    }else if(condition2){
    lazyDef = function(){ };
    }
    return lazyDef();
    }

    19. 私有函数与公共方法
    复制代码 代码如下:

    var MYAPP = {};
    MYAPP.dom = (function(){
    var _setStyle = function(el, prop, value){
    console.log('setStyle');
    };
    return {
    setStyle: _setStyle
    };
    })();
    // 当 MYAPP.dom.setStyle 不慎被覆写时,_setStyle在内部仍然可用

    20. 调试
    复制代码 代码如下:

    // 尽量使用,可以传入多个参数,最后输出拼接后的字符串
    console.log('xx','xx','...');
    console.dir(someObj);
    console.dirxml(someDom);
    console.time('timer');
    console.warn('xxx');
    // 封装可以保证不小心发布出去也不会导致问题,但报错时行号可能有问题
    function msg(msg){
    if(console && console.log){
    console.log(msg); // wrong line number
    }
    }

    基本上目前想到的只有这些,欢迎大家补充讨论:)
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:基本编码
    上一篇:jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)_jquery 下一篇:网页源代码保护(禁止右键、复制、另存为、查看源文件)_javascript技巧
    PHP编程就业班

    相关文章推荐

    • map在jquery中的用法是什么• 完全掌握JavaScript之DOM与BOM的区别与用法• 带你学习JavaScript中的File API、Streams API和Web Cryptography API• 深入了解JavaScript引擎如何执行JS代码• 深入了解node​中怎么使用redis集群功能【配置详解】

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网