网络编程
位置:首页>> 网络编程>> JavaScript>> JavaScript的陷阱

JavaScript的陷阱

作者:秦歌 来源:随网之舞 发布时间:2008-10-28 19:52:00 

标签:陷阱,编程,javascript

这本来是翻译Estelle Weyl的《15 JavaScript Gotchas》,里面介绍的都是在JavaScript编程实践中平时容易出错或需要注意的地方,并提供避开这些陷阱的方法,总体上讲,就是在认清事物本质的基础样要坚持好的编程习惯,其实这就是Douglas Crockford很久以前提出的JavaScript风格要素问题了,有些内容直接是相同的,具体请看《Javascript风格要素(1)》《Javascript风格要素(2)》。在翻译的过程中,我又看到了贤安去年翻译的《JavaScript的9个陷阱及评点》,其内容又有些交叉在一起,所以我就在现有翻译的基础上做了一个简单的拼合,并依据自己的理解增加了一些注释和解释。

  1. 区分大小写:变量名、属性和方法全部都区分大小写

  2. 不匹配的引号、圆括号或花括号将抛出错误

  3. 条件语句:3个常见陷阱

  4. 换行:一直用分号结束语句来避免常见的换行问题

  5. 标点法:在对象声明的尾部逗号将导致出错

  6. HTML id 冲突

  7. 变量作用域:全局变量对局部变量

  8. 函数重载:当重载不存在时,覆盖函数

  9. 区分string.replace()函数不是全局的

  10. parseInt应该包含两个参数

  11. “this”和绑定问题

  12. 为参数设置默认值,以免你遗漏它们

  13. for each循环是用于对象而不是数组

  14. switch语句需要点技巧

  15. 总是在检查undefined前检查null

  16. 时间处理陷阱

区分大小写

变量名和函数名都是区分大小写的。就像配错的引号一样,这些大家都知道。但是,由于错误是不作声的,所以这是一个提醒。为自己选择一个命名规则,并坚持它。而且,记住JavaScript中的原生函数和CSS属性都是骆驼拼写法(camelCase)

getElementById(’myId’) != getElementByID(’myId’); getElementById(’myId‘) != getElementById(’myID‘); document.getElementById('myId').style.Color;

不匹配的引号、圆括号或花括号

避免陷入不匹配的引号、圆括号或花括号陷阱的最好方式是编码时一直同时写出打开和关闭这两个元素符号,然后在其中间加入代码。开始:

var myString = ""; function myFunction(){ if(){ }}alert(parseInt(var1)*(parseInt(var2)+parseInt(var3)));

每当你打开一个元素,请关闭它。当你添加了关闭圆括号后,你再把函数的参数放进圆括号中。如果有一串圆括号,统计所有打开的圆括号和所有关闭的圆括号,并且确保这两个数字相等。

条件语句(3个陷阱)

  1. 所有的条件语句都必须位于圆括号中。执行语句主体不管是一句还是多句都强烈建议用花括号包围起来,这样能避免很多因修改或嵌套而产生的潜在错误。

    if(var1 == var2){}
  2. 不要犯无意地使用赋值运算符的错误:把第二个参数的值赋给第一个参数。因为它是一个逻辑问题,它将一直返回true且不会报错。

    if(var1 = var2){}
  3. JavaScript是弱类型,除了在switch语句中。当JavaScript在case比较时,它是非弱类型。

    var myVar = 5;if(myVar == '5'){ alert("hi");  }switch(myVar){ case '5': alert("hi"); }

换行

当心JavaScript中的硬换行。换行被解释为表示行结束的分号。即使在字符串中,如果在引号中包括了一个硬换行,那么你会得到一个解析错误(未结束的字符串)。

var bad  = '<ul id="myId">  <li>some text</li>  <li>more text</li>  </ul>'; var good = '<ul id="myId">' + ‘<li>some text</li>‘ + ‘<li>more text</li>‘ + ‘</ul>’;

前面讨论过的换行被解释为分号的规则并不适用于控制结构这种情况:条件语句关闭圆括号后的换行并不是给其一个分号。

一直使用分号和圆括号,那么你不会因换行而出错,你的代码易于阅读,且除了那些不使用分号的怪异源码外你会少一些顾虑:所以当移动代码且最终导致两个语句在一行时,你无需担心第一个语句是否正确结束。

多余的逗号

在任何JavaScript对象定义中,最后一个属性决不能以一个逗号结尾。Firefox不会出错,而IE会报语法错误。

var theObj = {        city : "Boston",        state : "MA",  }

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com