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 相关文章推荐
Ajax+Json 级联菜单实现代码
Oct 27 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
Jun 24 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
npm全局模块卸载及默认安装目录修改方法
May 15 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
认识延迟时间为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
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
微信小程序实现简单表格
2019/02/14 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
保洁主管岗位职责
2013/11/20 职场文书
化学教师自荐信范文
2013/12/28 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
中学团支部工作总结
2015/08/13 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书