我发现不做的事情比学习应该做的更难学习。
根据我的经验,专家与中级人员之间的区别在于能够从各种看似相同的方式中做出相同的选择。
那么,谈到JavaScript 你应该做什么样的事情以及为什么?
我能够为Java找到很多这些,但由于JavaScript的典型上下文(在浏览器中)与Java非常不同,我很想看看它是什么。
答案 0 :(得分:46)
语言:
通过在全局上下文中创建大量变量来进行命名空间污染。
以“foo.onclick = myFunc”形式绑定事件处理程序(不可扩展,应该使用attachEvent / addEventListener)。
在几乎所有非JSON上下文中使用eval
几乎每次使用document.write(使用像document.createElement这样的DOM方法)
针对Object对象的原型设计(BOOM!)
这是一个很小的一个,但用'+'做大量的字符串连接(创建一个数组并加入它更有效)
参考不存在的undefined
常数
设计/部署:
(一般情况下)不提供noscript支持。
不将您的代码打包到单个资源
将内联(即正文)脚本放在身体顶部附近(阻止加载)
特定于Ajax:
未指明对用户的请求的开始,结束或错误
轮询
传递和解析XML而不是JSON或HTML(适当时)
编辑:我一直在考虑更多!
答案 1 :(得分:19)
除了那些已经提到的......
使用for..in
构造迭代数组
(迭代数组方法和索引)
使用Javascript inline,如<body onload="doThis();">
(不灵活且可防止多个事件侦听器)
使用'Function()'构造函数
(由于同样的原因eval()
很糟糕)
将字符串而不是函数传递给setTimeout
或setInterval
(内部也使用eval()
)
不依赖分号依赖隐式陈述 (拾取的坏习惯,可能导致意外行为)
使用/ * .. * /来阻止代码行
(可以干扰正则表达式文字,例如:/* /.*/ */
)
&LT;传授&GT; 当然,不使用Prototype;) &LT; /传授&GT;
答案 2 :(得分:11)
对我而言最大的不是理解JavaScript编程语言本身。
然后是浏览器运行时的那些:
最后是部署问题。
&LT;塞&GT;我有一些client-side optimization tips,其中涵盖了我上面提到的一些内容,以及更多内容,在我的博客上。&lt; / plug&gt;
答案 3 :(得分:9)
另见Crockford的"Javascript: The Good Parts"以避免各种其他事情。 (编辑:警告,他对他的一些建议有点严格,比如使用“===”而不是“==”所以带上任何粒子的盐为你工作)
答案 4 :(得分:8)
一些事情就在我的头顶。当我想到更多时,我会编辑这个列表。
答案 5 :(得分:6)
使用'with'
with(document.forms [“mainForm”]。elements){
input1.value =“垃圾”;
input2.value =“垃圾”; }
答案 6 :(得分:5)
对
的任何提及document.all
在您的代码中,除非它在特殊代码中,只是为了克服IE错误。 (咳嗽 document.getElementById()咳嗽)
答案 7 :(得分:4)
不使用基于社区的框架来执行DOM操作,事件处理等重复性任务。
答案 8 :(得分:4)
由于自动分号插入,你应该总是在语句后添加一个大括号。
例如:
function()
{
return
{
price: 10
}
}
与此有很大不同:
function(){
return{
price: 10
}
}
因为在第一个例子中,javascript会为你实际插入一个分号:
function()
{
return; // oh dear!
{
price: 10
}
}
对于需要重复执行某些操作的场合,您应该使用setTimeout而不是setInterval。
如果你使用setInterval,但是在定时器下一次滴答时,定时器中执行的函数没有完成,这很糟糕。而是使用setTimeout
使用以下模式function doThisManyTimes(){
alert("It's happening again!");
}
(function repeat(){
doThisManyTimes();
setTimeout(repeat, 500);
})();
Paul Irish视频3>上10 things I learned from the jQuery source解释了这一点
答案 9 :(得分:1)
很少进行有效的缓存: