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 相关文章推荐
JavaScript 三种不同位置代码的写法
Oct 25 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
JQuery中DOM实现事件移除的方法
Jun 13 Javascript
详解WordPress开发中get_current_screen()函数的使用
Jan 11 Javascript
js判断所有表单项不为空则提交表单的实现方法
Sep 09 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
Bootstrap3 内联单选和多选框
Dec 29 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
Vue3 源码导读(推荐)
Oct 14 Javascript
用webAPI实现图片放大镜效果
Nov 23 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中session过期时间设置及session回收机制介绍
2014/05/05 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
js中有关IE版本检测
2012/01/04 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
python显示生日是星期几的方法
2015/05/27 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python turtle库的画笔控制说明
2020/06/28 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
怎样自定义一个异常类
2016/09/27 面试题
市场开发与营销专业求职信
2013/12/31 职场文书
活动总结报告怎么写
2014/07/03 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
面试复试通知单
2015/04/24 职场文书
初中家长意见
2015/06/03 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android