1.最后一个逗号
如这段代码,注意最后一个逗号,按语言学角度来说应该是不错的(python的类似数据类型辞典dictionary就允许如此)。IE会报语法错误,但语焉不详,你只能用人眼从几千行代码中扫描。
<script>
vartheObj={
city:"Boston",
state:"MA",
}
</script>
2.this的引用会改变
如这段代码:
<inputtype="button"value="Gotcha!"id="MyButton">
<script>
varMyObject=function(){
this.alertMessage="Javascriptrules";
this.ClickHandler=function(){
alert(this.alertMessage);
}
}();
document.getElementById(”theText”).onclick=MyObject.ClickHandler
</script>
并不如你所愿,答案并不是”JavaScriptrules”。在执行MyObject.ClickHandler时,代码中红色这行,this的引用实际上指向的是document.getElementById("theText")的引用。可以这么解决:
<inputtype="button"value="Gotcha!"id="theText">
<script>
varMyObject=function(){
varself=this;
this.alertMessage=“Javascriptrules”;
this.OnClick=function(){
alert(self.value);
}
}();
document.getElementById(”theText”).onclick=MyObject.OnClick
</script>
实质上,这就是JavaScript作用域的问题。如果你看过,你会发现解决方案不止一种。
3.标识盗贼
在JavaScript中不要使用跟HTML的id一样的变量名。如下代码:
<inputtype="button"id="TheButton">
<script>
TheButton=get("TheButton");
</script>
IE会报对象未定义的错误。我只能说:IEsucks.
4.字符串只替换第一个匹配
如下代码:
<script>
varfileName="Thisisatitle".replace("","_");
</script>
而实际上,结果是”This_isatitle“.在JavaScript中,String.replace的第一个参数应该是正则表达式。所以,正确的做法是这样:
varfileName="Thisisatitle".replace(//g,"_");
【JavaScript的9个陷阱及评点分析】相关文章: