帮助避免错误的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变量声明的知识点
Oct 28 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
JavaScript中的数学运算介绍
Dec 29 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
jQuery应用之jQuery链用法实例
Jan 19 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
Jan 05 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
使用jQuery实现掷骰子游戏
Oct 24 jQuery
JavaScript缺少insertAfter解决方案
Jul 03 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 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学习 计数器实例代码
2008/06/15 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Tensorflow 多线程设置方式
2020/02/06 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
人力资源部培训专员岗位职责
2014/01/02 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
英语故事演讲稿
2014/04/29 职场文书
锅炉工岗位职责
2015/02/13 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js
instantclient客户端 连接oracle数据库
2022/04/26 Oracle