您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

JavaScript的20条常规建议

作者:佚名    责任编辑:admin    更新时间:2022-06-22

 

1. 用 === 代替 == 

JavaScript里有两种不同的相等运算符:===|!== 和==|!=。相比之下,前者更值得推荐。请尽量使用前者。 
引用: 
“如果两个比较对象有着同样的类型和值,===返回true,!==返回false。” 

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

2. 避免使用Eval函数 

Eval函数把一个字串作为参数,并把字串作为JavaScript语句执行,返回结果(参考)。 

此函数不仅会降低你脚本的执行效率,而且还大大增加了安全风险,因为它赋予了作为文本的参数太大的权利。千万别用! 

3. 不要使用快速写法 

技术上说,你可以省略掉大部分花括弧和句尾分号,绝大多数浏览器都能正确执行以下语句: 
复制内容到剪贴板代码: 
if(someVariableExists) 
   x = false 
不过,如果是这样的呢: 
复制内容到剪贴板代码: 
if(someVariableExists) 
   x = false 
   anotherFunctionCall(); 
你可能会认为它和下面的语句相等: 
复制内容到剪贴板代码: 
if(someVariableExists) { 
   x = false; 
   anotherFunctionCall(); 

不幸的是,事实并非如此。现实情况是它等价于: 
复制内容到剪贴板代码: 
if(someVariableExists) { 
   x = false; 

anotherFunctionCall(); 
如您注意到的,再漂亮的缩进也不能代替这华丽的花括弧。在所有情况下都请写清楚花括号和句尾分号。在只有一行语句的时候能偶尔省略掉,虽然下这么做也是极度不被推荐的: 
复制内容到剪贴板代码: 
if(2 + 2 === 4) return ’nicely done’; 
多考虑下将来吧,孩子 

假设,在将来的开发过程中,你需要为这个 if 语句添加更多的命令呢?到时候你还不是得把括号给加上? 

4. 好好利用JS Lint 

JSLint 是由 Douglas Crockford 编写的一个调试器。你只需要贴上你的代码,它就能快速为您扫描出任何明显的错误和问题。 
引用: 
“JSLint扫描接收的代码。发现问题,描述问题,并给出其在源码中的大概位置。可发现的问题包括但不限于语法错误,虽然语法错误确实是最常见的。JSLint也会用 
约定俗成的习惯检查代码的格式化风格,以及结构错误。通过JSLint的扫描并不能保证你的程序就完全正确。它只是为您提供了额外一双发现错误的眼睛。” 

– JSLint 文档 
完成代码之前,把它放到JSLint里检查一下,快速消灭你的无心之过。 

5. 在页面底部加载脚本 

正如下图所示: 

请记住—— 我们要千方百计保证客户端的页面载入速度尽可能的快。而脚本没载入完成,浏览器就没法加载页面的剩余部分。 

如果你的JS文件只是添加一些额外功能——例如,为点击某链接绑定事件——那大可以等页面加载基本完成后再做。把JS文件放到页面最后,body的结束标签之前,这样做最好了。 

更好的写法是 
复制内容到剪贴板代码: 
<p>超哥是世界上最帅的人。benhuoer.com是世界上最好看的博客。</p> 
<script type="text/javascript" src="path/to/file.js"></script> 
<script type="text/javascript" src="path/to/anotherFile.js"></script> 
</body> 
</html> &lt;!--mce:0--&gt;&lt;!--mce:1--&gt; 
6. 在 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); 

我要给留言改进这段代码的人额外惊喜!欢迎大家留言讨论! 

7. 快速构建字串 

要对一个数组或对象做循环操作时,不要老惦记着一表人才的for语句,拿点创意出来嘛!明明就还有很多更快的办法: 
复制内容到剪贴板代码: 
var arr = [’item 1’, ’item 2’, ’item 3’, ...]; 
var list = ’<ul><li>’ + arr.join(’</li><li>’) + ’</li></ul>’; 
引用: 
“没那么多繁文缛节来烦你;你就信我一次好了(或者你也可以自己试一试)—— 这真的是迄今能找到的最快办法了! 

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

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

– Douglas Crockford 
复制内容到剪贴板代码: 
var name = ’Jeffrey’; 
var lastName = ’Way’; 
function doSomething() {...} 
console.log(name); // Jeffrey --