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 相关文章推荐
window.parent与window.openner区别介绍
Apr 12 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
javascript函数命名的三种方式及区别介绍
Mar 22 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
Sep 21 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
Mar 23 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
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+MySQL的聊天室设计
2006/10/09 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
php遍历CSV类实例
2015/04/14 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
javascript不同页面传值的改进版
2008/09/30 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python实现图像拼接
2020/03/05 Python
keras输出预测值和真实值方式
2020/06/27 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
全陪导游欢迎词
2014/01/17 职场文书
安全生产标语
2014/06/06 职场文书
基层工作经验证明样本
2014/11/16 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书