帮助避免错误的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 相关文章推荐
详解AngularJS实现表单验证
Dec 10 Javascript
js多功能分页组件layPage使用方法详解
May 19 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
Sep 23 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 Javascript
解决Vue+Element ui开发中碰到的IE问题
Sep 03 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 Javascript
微信小程序文章详情功能完整实例
Jun 03 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
php 传值赋值与引用赋值的区别
2010/12/29 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
python单线程实现多个定时器示例
2014/03/30 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python调用C++程序的方法详解
2017/01/24 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
节约电力资源的建议书
2014/03/12 职场文书
火灾现场处置方案
2014/05/28 职场文书
教师先进个人材料
2014/12/17 职场文书
李强优秀员工观后感
2015/06/16 职场文书
教师教育心得体会
2016/01/19 职场文书
终止合同协议书范本
2016/03/22 职场文书
学校就业保障协议书
2019/06/24 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
PHP新手指南
2021/04/01 PHP
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP