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 相关文章推荐
常见JS效果之图片减速度滚动实现代码
Dec 08 Javascript
Javascript核心读书有感之类型、值和变量
Feb 11 Javascript
JavaScript实现图片DIV竖向滑动的方法
Apr 25 Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
Dec 25 Javascript
react-native使用leanclound消息推送的方法
Aug 06 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
Sep 06 Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 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
ajax缓存问题解决途径
2006/12/06 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
浅谈php命令行用法
2015/02/04 PHP
yii添删改查实例
2015/11/16 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
JQuery 常用方法基础教程
2009/02/06 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现二分查找算法实例
2015/05/26 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
什么是封装
2013/03/26 面试题
环境科学专业个人求职信
2013/09/26 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
银行授权委托书格式
2014/10/10 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
全新239军机修复记
2022/04/05 无线电
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL