这与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
循环迭代数组元素或类似数组的对象答案 0 :(得分:2)
不要干涉核心类型。永远不要把东西粘在Array.prototype上 - 你不知道还有谁在做这件事,以及这些事情可能会如何互动。
仅在重要时检查显式类型。鸭子打字是一个很好的概念。
我想第二次使用匿名函数来避免污染全球范围。特别是当你像我一样使用jQuery工作时,使用这样的模板真的很有用:
(function($) {
/* Lots of code */
})(jQuery);
答案 1 :(得分:0)
对基元使用显式强制转换,例如Number(),String(),Boolean()
真的?我避免像瘟疫那样的人。你对此有何看法?
答案 2 :(得分:0)
这适用于所有语言:
避免深度嵌套,这是不可接受的,很难阅读。有一些技巧,例如在循环中,您可以在下一次迭代中进行早期break
或continue
,而不是将所有内容包装在if
内。
答案 3 :(得分:0)
始终使用jslint 。
一开始有点令人沮丧,但它很有用。
Jslint会告诉您是否违反了一项或多项“最佳做法”。
还要考虑使用支持jslint的IDE。我可以推荐WebStorm或Sublime Text 2(这些我自己测试过,他们非常支持jslint)。