JavaScript的9个陷阱及评点分析


Posted in Javascript onMay 16, 2008

1. 最后一个逗号

如这段代码,注意最后一个逗号,按语言学角度来说应该是不错的(python的类似数据类型辞典dictionary就允许如此)。IE会报语法错误,但语焉不详,你只能用人眼从几千行代码中扫描。

<script>
  var theObj = {
        city : "Boston",
        state : "MA",
  }
</script> 
2. this的引用会改变

如这段代码:

<input type="button" value="Gotcha!" id="MyButton" >
<script>
var MyObject = function () {
    this.alertMessage = "Javascript rules";
    this.ClickHandler = function() {
        alert(this.alertMessage );
  }
}();
document.getElementById(”theText”).onclick =  MyObject.ClickHandler
</script>
并不如你所愿,答案并不是”JavaScript rules”。在执行MyObject.ClickHandler时,代码中红色这行,this的引用实际上指向的是document.getElementById("theText")的引用。可以这么解决:

<input type="button" value="Gotcha!" id="theText" >
<script>
var MyObject = function () {
    var self = this;
    this.alertMessage = “Javascript rules”;
    this.OnClick = function() {
        alert(self.value);
    }
}();
document.getElementById(”theText”).onclick =  MyObject.OnClick
</script>
实质上,这就是JavaScript作用域的问题。如果你看过,你会发现解决方案不止一种。

3. 标识盗贼

在JavaScript中不要使用跟HTML的id一样的变量名。如下代码:

<input type="button" id="TheButton">
<script>
    TheButton = get("TheButton");
</script>
IE会报对象未定义的错误。我只能说:IE sucks.

4. 字符串只替换第一个匹配

如下代码:

<script>
    var fileName = "This is a title".replace(" ","_");
</script>
而实际上,结果是”This_is a title“. 在JavaScript中,String.replace的第一个参数应该是正则表达式。所以,正确的做法是这样:

var fileName = "This is a title".replace(/ /g,"_");

Javascript 相关文章推荐
jquery text()要注意啦
Oct 30 Javascript
javascript写的日历类(基于pj)
Dec 28 Javascript
flash遮住div问题的正确解决方法
Feb 27 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
vue项目首屏打开速度慢的解决方法
Mar 31 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
Vue多选列表组件深入详解
Mar 02 Vue.js
认识延迟时间为0的setTimeout
May 16 #Javascript
用函数式编程技术编写优美的 JavaScript_ibm
May 16 #Javascript
Javascript模块模式分析
May 16 #Javascript
Dom加载让图片加载完再执行的脚本代码
May 15 #Javascript
直接生成打开窗口代码,不必下载
May 14 #Javascript
地震发生中逃生十大法则
May 12 #Javascript
通过修改referer下载文件的方法
May 11 #Javascript
You might like
第十四节 命名空间 [14]
2006/10/09 PHP
PHP使用数组实现队列
2012/02/05 PHP
php发送post请求函数分享
2014/03/06 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
利用python获取Ping结果示例代码
2017/07/06 Python
python实现自动发送邮件
2018/06/20 Python
python 实现矩阵按对角线打印
2019/11/29 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
大专学生推荐信范文
2013/11/19 职场文书
倡议书范文格式
2014/05/12 职场文书
计生专干事迹
2014/05/28 职场文书
毕业典礼邀请函
2015/01/31 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python