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中的Location地址对象
Jan 16 Javascript
JavaScript基本编码模式小结
May 23 Javascript
Javascript图像处理思路及实现代码
Dec 25 Javascript
JavaScript闭包实例讲解
Apr 22 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
May 28 Javascript
理解javascript回调函数
Dec 28 Javascript
使用javascript插入样式
Mar 14 Javascript
9种改善AngularJS性能的方法
Nov 28 Javascript
vue+express 构建后台管理系统的示例代码
Jul 19 Javascript
JS桶排序的简单理解与实现方法示例
Nov 25 Javascript
javascript前端实现多视频上传
Dec 13 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
写给小白看的JavaScript异步
2017/11/29 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
详解python中的文件与目录操作
2017/07/11 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
基于树莓派的语音对话机器人
2019/06/17 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
会计找工作求职信范文
2013/12/09 职场文书
高中美术教学反思
2014/01/19 职场文书
医德考评自我评价
2014/09/14 职场文书
出差报告范文
2014/11/06 职场文书
入党介绍人意见2015
2015/06/01 职场文书