JavaScript编程中容易出BUG的几点小知识


Posted in Javascript onJanuary 31, 2015

JavaScript是如今最受欢迎的编程语言之一,但受欢迎同时就是该语言自身的各种特性带来的副作用,无论该语言多美妙,每天还是有成千上万的程序员弄出一堆bug。先不要嘲笑别人,或许你也是其中之一。

给你一个例子,下面是几个简短的完全有效的JS片段(你可以在你的控制台上试验一下):

typeof NaN === 'number' // true

 

Infinity === 1/0        // true
0.1 + 0.2 === 0.3       // false,前面加括号也一样
"3" + 1                 // '31'  

"3" - 1                 // 2

你还相信自己的JavaScript吗?

1、JS最小的值

Number.MIN_VALUE > 0; //true

Number.MIN_VALUE用于JavaScript可以表达的最小值,为5e-324,然而是JS中最接近0的一个数

2、字符串连接

("foo" + + "bar") === "fooNaN"  //true

"why I am " + typeof + ""       // why I am number

JS解析成“foo” + (+ “bar”), 这将会把 “bar” 转成一个数字

3、parseInt 函数

parseInt('06'); // 6

parseInt('08'); // 0  注意,谷歌新版已修正

parseInt(null, 24) === 23 // true

4、null是不是object

typeof null  // object

null instanceof Object  // false

5、return返回内容

function myjson()

{

   return

   [

     2

   ]

}
myjson();  // undefined

return返回的内容必须和return在同一行

6、奇怪的数字

 012  == 12  // false

'012' == 12  // true

 "3" + 1     // '31'

 "3" - 1     // 2

0.1 + 0.2 == 0.3 // false

0.1 + 0.7 == 0.8 // false

0.2 + 0.7 == 0.9 // false

9999999999999999 // 10000000000000000

9999999999999999-1 //10000000000000000

111111111111111111111 // 111111111111111110000

7、诡异的参数

function hello(what) {

     alert(arguments[0]);    //vicky

     what = "world";

     return "Hello, " + arguments[0] + "!";

}
hello("vicky"); //"Hello, world!"

8、让人头大的等号

NaN === NaN;   // false

[] == false;   // true

"" == false;   // true

null == false; // false

[] == ![]      // true
window.window == window  // true

window.window === window // false,有些浏览器是true

window == document       // true,有些浏览器是false
("0" && {}) == 0 // false

(0 && {}) == 0   // true

0 == "0"         // true

[] == 0          // true
Javascript 相关文章推荐
Javascript select下拉框操作常用方法
Nov 09 Javascript
XHTML下,JS浮动代码失效的问题
Nov 12 Javascript
jsp+javascript打造级连菜单的实例代码
Jun 14 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
Jul 04 Javascript
JS命名空间的另一种实现
Aug 09 Javascript
JS交换变量的方法
Jan 21 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
JavaScript中的原始值和复杂值
Jan 07 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
Nov 01 Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 Javascript
微信上传视频文件提示(推荐)
Nov 22 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 #Javascript
JavaScript判断变量是否为空的自定义函数分享
Jan 31 #Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
Dec 24 #Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 #Javascript
jQuery知识点整理
Jan 30 #Javascript
浅谈jquery回调函数callback的使用
Jan 30 #Javascript
jQuery修改class属性和CSS样式整理
Jan 30 #Javascript
You might like
谈谈PHP语法(4)
2006/10/09 PHP
PHP程序员编程注意事项
2008/04/10 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
vuejs简单验证码功能完整示例
2019/01/08 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python实现简单的代理服务器
2015/07/25 Python
彻底理解Python list切片原理
2017/10/27 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
教师岗位聘任书范文
2014/03/29 职场文书
合伙经营协议书范本
2014/04/18 职场文书
幼儿老师求职信
2014/06/30 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
2014国庆节标语口号
2014/09/19 职场文书
市场营销计划书范文
2015/01/16 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
2015年防汛工作总结
2015/05/15 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记