除了那些已经提到的...
使用
for..in
构造遍历数组(迭代数组方法和索引)
我发现,不做的事情比应该做的事情更难学。
[根据我的经验,使专家与中级人员脱颖而出的是从各种看似等效的方式中进行相同选择的能力。
因此,当涉及到JavaScript 您不应该做什么样的事情以及为什么?
我能够找到许多针对Java的代码,但是由于JavaScript(在浏览器中)的典型上下文与Java的上下文非常不同,所以我很想知道结果如何。
语言:
通过在全局上下文中创建大量足迹来污染名称空间。
以'foo.onclick = myFunc'的形式绑定事件处理程序(不可扩展,应使用attachEvent / addEventListener)。
几乎在所有非JSON上下文中使用eval
几乎每次使用document.write(使用诸如document.createElement之类的DOM方法)]] >>
对象对象原型(BOOM!)
这个很小,但是用'+'进行大量字符串连接(创建数组并将其连接起来效率更高)]]
引用不存在的undefined
常量
设计/部署:
(通常)不提供noscript支持。
不将您的代码打包到单个资源中
在主体顶部附近放置内联(即主体)脚本(它们加载了块)
特定于Ajax:
不向用户指示请求的开始,结束或错误
轮询
传递和解析XML而不是JSON或HTML(在适当情况下)
其中许多是来自Addy Osmati的《 Learning JavaScript Design》一书:https://www.oreilly.com/library/view/learning-javascript-design/9781449334840/ch06.html
编辑:我一直在想更多!
除了那些已经提到的...
使用for..in
构造遍历数组(迭代数组方法和索引)
像<body onload="doThis();">
使用内联Javascript(僵化并阻止多个事件侦听器)
使用'Function()'构造函数(由于同样的原因,eval()
不好,所以不好]
将字符串而不是函数传递给setTimeout
或setInterval
((内部也使用eval()
)
依靠不使用分号的隐式语句(养成不良习惯,并可能导致意外行为)
使用/ * .. * /来屏蔽代码行(可能会干扰正则表达式文字,例如:/* /.*/ */
)>
当然,不使用Prototype;) evangelism>
对我来说最大的是不了解JavaScript编程语言本身。
然后还有用于浏览器运行时的那些:
最后是部署问题。
另请参阅Crockford的"Javascript: The Good Parts",以了解其他需要避免的其他事项。 ([edit:
我头上有几件事。当我想到更多时,将编辑此列表。
对'with'的任何使用
with(document.forms [“ mainForm”]。elements){input1.value =“垃圾”;input2.value =“垃圾”;}
任何参考
document.all
在您的代码中,除非
不使用基于社区的框架来执行重复性任务,例如DOM操作,事件处理等。
由于自动插入分号,因此您应始终在语句后加上大括号。
例如,此:
function()
{
return
{
price: 10
}
}
与此有很大不同:
function(){ return{ price: 10 } }
因为在第一个示例中,javascript会为您插入一个分号,而实际上您将为此留给您:
function() { return; // oh dear! { price: 10 } }
将setInterval用于可能长时间运行的任务。
在需要重复执行某些操作的情况下,应使用setTimeout而不是setInterval。
如果使用setInterval,但是在下一个计时器计时时,计时器中执行的功能尚未完成,这很糟糕。而是使用setTimeout
使用以下模式function doThisManyTimes(){
alert("It's happening again!");
}
(function repeat(){
doThisManyTimes();
setTimeout(repeat, 500);
})();
[Paul Irish在他的10 things I learned from the jQuery source视频中对此做了很好的解释
很少进行有效缓存:
很少进行有效缓存:
除了那些已经提到的...
使用for..in
构造遍历数组(迭代数组方法和索引)
对我来说最大的是不了解JavaScript编程语言本身。
我头上有几件事。当我想到更多时,将编辑此列表。
对'with'的任何使用
with(document.forms [“ mainForm”]。elements){input1.value =“垃圾”;input2.value =“垃圾”;}
任何参考
document.all
在您的代码中,除非
不使用基于社区的框架来执行重复性任务,例如DOM操作,事件处理等。