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动态更改一张位图的src与Attr的使用
Jul 31 Javascript
javascript中创建对象的几种方法总结
Nov 01 Javascript
input禁止键盘及中文输入,但可以点击
Feb 13 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
JavaScript中的闭包
Feb 24 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
vue.js实现只弹一次弹框
Jan 29 Javascript
ES6中new Function()语法及应用实例分析
Feb 19 Javascript
Javascript call及apply应用场景及实例
Aug 26 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做到页面注册审核
2017/03/02 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
Python处理JSON数据并生成条形图
2016/08/05 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
python查看列的唯一值方法
2018/07/17 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python多线程并发实例及其优化
2019/06/27 Python
Python tkinter三种布局实例详解
2020/01/06 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
说出一些常用的类,包,接口
2014/09/22 面试题
公务员职业生涯规划书范文  
2014/01/19 职场文书
大学生心理活动总结
2014/07/04 职场文书
2014年消防工作总结
2014/11/21 职场文书
婚礼父母答谢词
2015/01/04 职场文书
525心理健康活动总结
2015/05/08 职场文书
无保留意见审计报告
2015/06/05 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
Tomcat配置访问日志和线程数
2022/05/06 Servers