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去字符串前后空格5种实现方法及比较
Apr 03 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
Nov 23 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
Node.js模块加载详解
Aug 16 Javascript
jQuery简单实现上下,左右滑动的方法
Jun 01 Javascript
Vue.js表单控件实践
Oct 27 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
label+input实现按钮开关切换效果的实例
Aug 16 Javascript
vue代码分割的实现(codesplit)
Nov 13 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 Javascript
vue动态设置路由权限的主要思路
Jan 13 Vue.js
认识延迟时间为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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
python和pyqt实现360的CLable控件
2014/02/21 Python
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
Python如何定义有默认参数的函数
2020/08/10 Python
详解python算法常用技巧与内置库
2020/10/17 Python
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
《风筝》教学反思
2014/04/10 职场文书
安全保证书范文
2014/04/29 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
功夫熊猫观后感
2015/06/10 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python