帮助避免错误的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 日期常用的方法
Nov 11 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
Jan 13 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
JavaScript知识点整理
Dec 09 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
jQuery图片左右滚动代码 有左右按钮实例
Jun 20 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
Sep 25 Javascript
javascript实现鼠标点击生成文字特效
Dec 24 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 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内置的Math函数效率测试
2014/12/01 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
php 问卷调查结果统计
2015/10/08 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
javascript 函数调用规则
2009/08/26 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
js实现进度条的方法
2015/02/13 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
使用Python写个小监控
2016/01/27 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
庆中秋节主题活动方案
2014/02/03 职场文书
协议书样本
2014/04/23 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
通报表扬范文
2015/01/17 职场文书
委托书英文
2015/01/28 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
开学典礼校长致辞
2015/07/29 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis