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 相关文章推荐
js控制div及网页相关属性的代码
Dec 19 Javascript
javascript window.confirm确认 取消对话框实现代码小结
Oct 21 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
Aug 01 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
js的flv视频播放器插件使用方法
Jun 23 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
Apr 18 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 Javascript
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
微信小程序scroll-view实现字幕滚动
Jul 14 Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
jquery实现购物车基本功能
Oct 25 jQuery
认识延迟时间为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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
python如何实现视频转代码视频
2019/06/17 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
如何用JQuery进行表单验证
2013/05/29 面试题
经理聘任证明
2015/03/02 职场文书
天气温馨提示语
2015/07/14 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript