JavaScript最佳实践

时间:2009-02-01 00:00:43

标签: javascript

这与this question有些相关,但我不是要求提供有关JavaScript最佳做法的资源,而是要求您提供实际的建议。

我将从我自己的列表开始。如果您确定该建议没有争议,您可以发布答案或直接编辑问题。

我们走了:

  • 始终使用var
  • 大写构造函数的名称 - 没有别的
  • 使用===进行比较
  • 对基元使用显式强制转换,例如: Number()String()Boolean()
  • 使用typeof
  • 检查基本类型
  • 使用instanceof
  • 检查对象类型
  • 使用Object.prototype.toString()检查内置对象类型,以避免跨框架问题,例如

    Object.prototype.toString.call(obj) === '[object Array]'
    
  • 检查构造函数中的this,例如

    function MyObject() {
        if(!(this instanceof arguments.callee))
            throw new Error('constructor called with invalid `this`');
        // [...]
    }
    
  • 使用匿名函数进行命名空间不会污染全局范围,例如

    (function() {
        var noGlobalVar = 'foo';
        // [...]
    })();
    
  • 检查hasOwnProperty()循环中的for..in - 不要认为没有人与原型混淆

  • 不要使用for..in循环迭代数组元素或类似数组的对象

4 个答案:

答案 0 :(得分:2)

不要干涉核心类型。永远不要把东西粘在Array.prototype上 - 你不知道还有谁在做这件事,以及这些事情可能会如何互动。

仅在重要时检查显式类型。鸭子打字是一个很好的概念。

我想第二次使用匿名函数来避免污染全球范围。特别是当你像我一样使用jQuery工作时,使用这样的模板真的很有用:

(function($) {
    /* Lots of code */
})(jQuery);

答案 1 :(得分:0)

  
    

对基元使用显式强制转换,例如Number(),String(),Boolean()

  

真的?我避免像瘟疫那样的人。你对此有何看法?

答案 2 :(得分:0)

这适用于所有语言:

避免深度嵌套,这是不可接受的,很难阅读。有一些技巧,例如在循环中,您可以在下一次迭代中进行早期breakcontinue,而不是将所有内容包装在if内。

答案 3 :(得分:0)

始终使用jslint

一开始有点令人沮丧,但它很有用。

Jslint会告诉您是否违反了一项或多项“最佳做法”。

还要考虑使用支持jslint的IDE。我可以推荐WebStorm或Sublime Text 2(这些我自己测试过,他们非常支持jslint)。