帮助避免错误的Javascript陷阱清单


Posted in Javascript onMay 31, 2009

翻译讲究"信\雅\达",我就谈不上了.希望能把文章的意思不要弄错就行.

编程的陷阱(gotcha)是指计算机系统中的意想不到的文档特征而不是bug.这些陷阱使得初学者远离javascript编程.在我看来,因为所有的浏览器都能运行javascript使得它是使用最广泛的语言之一,但它也是最少人研究的.让我们从一个基础的示例开始.

1.浮点运算

这可能是挫败一些对javascript不熟悉并准备执行一些数学运算的人的主要原因.

  1. <script>  
  2. alert(0.02 / 0.1);  //0.19999999999999998   
  3. alert(1.14 * 100);  //113.99999999999999    ;)  
  4. </script> 

Math.round()就能在这里派上用场.

2.加号操作符的重载

"+"加号运算符即能做算术运算,又能够做字符串的连接.如果正确的使用它是很便利的.让我们看一看.

  1. <script>  
  2. var msg, one="1";  
  3. msg = 2 + "1"// msg = "21"  
  4. msg = 2 + one; // msg = "21"  
  5. msg = 1 + 1 + 1 + " musketeers"// msg = "3 musketeers"  
  6. msg = "Bond " + 0 + 0 + 7; //msg = "Bond 007"    
  7. </script> 

上述行为是因为这些运算都是从左到右执行的.类型的转换是基于其中的字符串或数字.

3.行尾插入分号

javascript 自动在行尾插入分号";",让我们来看看这在一个简单的示例中的情况.

  1. <script>  
  2. function returnSame(a){  
  3.    return                 //Inserts semi-colon to convert to return;  
  4.    a                      //a becomes a; - Unreachable  
  5. }  
  6. alert(returnSame(2));  //Output is undefined  
  7. </script> 

当在创建对象或使用对象的值的时候这个神奇的分号能使事情变得更复杂.

4.typeof操作符

typeof 是一个一元操作符,运算结果往往并不是如预期的那样.令人吃惊的是对"null"的运算结果是"object"

  1. <script>  
  2. var obj={};  //object created using object literal  
  3. var arr=[];  //array created by array literal  
  4. alert(typeof(obj));   //object  - Good  
  5. alert(typeof(arr));   //object  - Bad  
  6. alert(typeof(null));  //object  - Ugly!  ;) 
  7. </script>

它仅仅能查找对象的原始类型.

5. false, null, undefined, NaN, Infinity

尽管他们看起来相似,但他们代表着不通的意思.javascript有3种基本数据类型数字numbers, 字符串strings 和布尔 boolean,除此之外还有两个不重要的数据类型"undefine"和"null".按照"=="运算符运算,null和undefine是相等的.

  1. <script>  
  2. var a;  
  3. alert (a);    //undefined  
  4. alert (1/0);  //Infinity  
  5. alert (0/0);  //NaN  
  6. 0/0 == 0/0;   //false - a NaN != NaN  
  7. alert (b);    //error  
  8. </script> 

6.字符串只替换第一个匹配的字符

与PHP或其他程序语言不同,默认情况下,javascript的字符替换只替换第一个出现的匹配的字符.

  1. <script>  
  2. var nospace = "I dont need spaces".replace(" ","_");  
  3. alert(nospace);    //I_dont need spaces   - Only first occurence  
  4. var nospace = "I dont need spaces".replace(/ /g,"_");  
  5. alert(nospace);    //I_dont_need_spaces  
  6. </script> 

 7.parseInt 函数

parseInt 用来将一个字符串转换为整数类型.这个函数能传入两个参数,第二个参数是指定多少进制的.这里十进制用 10 指定.如果没有指定进制,则parseInt函数自己会试图找到合适的进制.如果是这样,以0开头的字符串将会转换为8进制.

  1. <script>  
  2. var str = "017";  
  3. var strInt = parseInt(str);      //strInt = 15  ;)  
  4. var strInt = parseInt(str,10);   //strInt = 17  
  5. </script> 
Javascript 相关文章推荐
javascript 学习笔记(一)DOM基本操作
Apr 08 Javascript
Array.prototype.concat不是通用方法反驳[译]
Sep 20 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
JS是按值传递还是按引用传递
Jan 30 Javascript
基于jquery实现的自动补全功能
Mar 12 Javascript
JavaScript阻止浏览器返回按钮的方法
Mar 18 Javascript
jQuery固定元素插件scrolltofixed使用指南
Apr 21 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 Javascript
概述VUE2.0不可忽视的很多变化
Sep 25 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
vue如何限制只能输入正负数及小数
Jul 04 Javascript
JS 文字符串转换unicode编码函数
May 30 #Javascript
Javascript 日期对象Date扩展方法
May 30 #Javascript
Jquery 基础学习笔记之文档处理
May 29 #Javascript
Jquery 基础学习笔记
May 29 #Javascript
javascript AutoScroller 函数类
May 29 #Javascript
关于JavaScript的一些看法
May 27 #Javascript
广告切换效果(缓动切换)
May 27 #Javascript
You might like
header()函数使用说明
2006/11/23 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
python实现sublime3的less编译插件示例
2014/04/27 Python
Python实现的快速排序算法详解
2017/08/01 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python自动化办公操作PPT的实现
2021/02/05 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
幼儿园小班教学反思
2014/02/02 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
员工年度工作总结2015
2015/05/18 职场文书
不同意离婚答辩状
2015/05/22 职场文书
办公室日常管理制度
2015/08/04 职场文书
2019广播稿怎么写
2019/04/17 职场文书
详解Redis复制原理
2021/06/04 Redis