• JavaScript新手的实用建议


    1. 用 === 代替 ==

    JavaScript里有两种不同的相等运算符:===|!==和==|!=。相比之下,前者更值得推荐。请尽量使用前者。

    “如果两个比较对象有着同样的类型和值,===返回true,!==返回false。”

    - JavaScript: The Good Parts

    不过,如果使用==和!=,在操作不同数据类型时, 你可能会遇到一些意想不到的问题。在进行相等判断前,JavaScript会试图将它们转换为字符串、数字或 Boolean量。

    2. 在 For 语句外部声明变量

    当需要执行冗长的for语句时,不要让JavaScript引擎每次都重复那些没有必要的操作。例如:

    这样不好

    for(var i = 0; i < someArray.length; i++) {
     var container = document.getElementById('container');
     container.innerHtml += 'my number: ' + i;
     console.log(i);
    }
    

    这段代码每次都重新定义数组长度,每次都在遍历DOM寻找container元素 —— 太傻了!

    这样好多了

    var container = document.getElementById('container');
    for(var i = 0, len = someArray.length; i < len;  i++) {
     container.innerHtml += 'my number: ' + i;
     console.log(i);
    }
    

    3. 快速构建字串

    要对一个数组或对象做循环操作时,不要老惦记着一表人才的for语句,拿点创意出来嘛!明明就还有很多更快的办法:

    var arr = ['item 1', 'item 2', 'item 3', ...];
    var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';

    “没那么多繁文缛节来烦你;你就信我一次好了(或者你也可以自己试一试)—— 这真的是迄今能找到的最快办法了!

    用点土办法,也别管它背后究竟发生了什么抽象的东西,通常土办法都比那些优雅的办法要快捷得多!”

    - James Padolsey, james.padolsey.com

    8. 减少全局变量

    “把你踩在全局的那些乱七八糟的脚印都归于一人名下,能显著降低与其他应用、小工具或JS库冲突的可能性。”

    - Douglas Crockford

    var name = 'Jeffrey';
    var lastName = 'Way';
    
    function doSomething() {...}
    
    console.log(name); // Jeffrey -- or window.name
    

    更好的写法

    var DudeNameSpace = {
     name : 'Jeffrey',
     lastName : 'Way',
     doSomething : function() {...}
    }
    
    console.log(DudeNameSpace.name); // Jeffrey
    

    注意看,我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的

    4. 试试渐进增强

    一定要记得为未启用JavaScript的情况提供替代方案。大家可能会认为,“大部分我的访客都启用了JavaScript的,我才不用担心”。这样的话,你可就大错特错了!

    你有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了?(你可以下载 Web Developer ToolBar 轻松完成这项任务。)禁用之后你的网站可能就彻底失去了可用性!经验之谈:开发初期总是按照没有JavaScript来设计你的网站,之后再进行渐进地功能增强,小心翼翼地改变你地布局。

    5. 不要使用with语句

    初识之下,“with”语句似乎还挺好用的。它用于设置代码在特定对象中的作用域。其基本用法是提供深入到对象中处理元素的快速写法。例如:

    with (being.person.man.bodyparts) {
     arms = true;
     legs = true;
    }
    

    – 等价于 —

    being.person.man.bodyparts.arms = true;
    being.person.man.bodyparts.legs= true;
    

    不幸的是,测试表明,若你要为对象插入新成员,with的表现非常糟糕,它的执行速度非常缓慢。替代方案是声明一个变量:

    var o = being.person.man.bodyparts;
    o.arms = true;
    o.legs = true;

    6. 使用 {},而不用New Object()

    在JavaScript有多种方式能新建对象。最传统的方法是 new 语句,如下:

    var o = new Object();
    o.name = 'Benhuoer';
    o.lastName = 'Yang';
    o.someFunction = function() {
     console.log(this.name);
    }
    

    不过,这一方法读起来却比较糟糕。我强烈建议你采用下面这种在文字样式上更为强健的写法:

    更好的写法

    var o = {
     name: 'Jeffrey',
     lastName = 'Way',
     someFunction : function() {
     console.log(this.name);
     }
    };
    

    注意,如果你想新建一个空对象,用 {} 就能行:

    var o = {};
    

    “对象字面符(Objects literals)帮助我们写出支持很多特性,同时又关联性强、简明直接的代码。没必要直接调用新建语句,然后再费心维护声明变量和传递变量的语句之间的正确顺序,等等。” – dyn-web.com

    7. 使用[],而不用New Array()

    新建数组时的同类型运用。

    行得通的写法

    var a = new Array();
    a[0] = "Joe";
    a[1] = 'Plumber';
    

    更好的写法

    var a = ['Joe','Plumber'];
    

    “在JavaScript编程中经常遇到的一个错误是,该用数组时却用了对象,该用对象时却用了数组。规则其实很简单:当属性名是小的连续整数时,你应该使用数组。其他情况,使用对象。” – Douglas Crockford

    8. 使用Firebug的“Timer”功能优化你的代码

    想要轻松地快速了解某项操作的用时吗?使用Firebug的timer功能来记录结果好了。

    function TimeTracker(){
     console.time("MyTimer");
     for(x=5000; x > 0; x--){}
     console.timeEnd("MyTimer");
    }

    9. 自决的函数

    相比于调用函数,让函数在页面载入或者某一父函数被调用时自动执行,是十分简单方便的做法。你只需要把你的函数包在父辈之内,然后添上一个额外的括号,本质上这括号就触发了你定义的函数(了解更多)。

    (function doSomething() {
     return {
     name: 'jeff',
     lastName: 'way'
     };
    })();

    10. Crockford 的 JSON.Parse

    尽管 JavaScript 2会内建JSON处理器,但写这篇文章之时,我们还是需要自己实现。Douglas Crockford,JSON的创建者,已经为我们创作出能直接使用的处理器了。您可以在这里下载

    导入这段代码,你就能新建 JSON 全局对象,然后处理你的 .json 文件。

    var response = JSON.parse(xhr.responseText); 
    
    var container = document.getElementById('container');
    for(var i = 0, len = response.length; i < len; i++) {
     container.innerHTML += '<li>' + response[i].name + ' : ' + response[i].email + '</li>';
    }
    

    关于JSON,请查看更多介绍

     

  • 相关阅读:
    GNU安装
    camera链接
    右键terminal
    Angular cli 常见问题
    Angular路由复用策略RouteReuseStrategy
    angular5 websocket 服务
    promise 极简版封装
    js a 标签 通过download 实现下载功能
    angular6 升级到 angular7+ 最新Ng-zorro
    最新IDEA永久激活
  • 原文地址:https://www.cnblogs.com/Alight/p/2865694.html
Copyright © 2020-2023  润新知