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 相关文章推荐
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
Feb 13 Javascript
javascript实现10个球随机运动、碰撞实例详解
Jul 08 Javascript
jQuery实现的调整表格行tr上下顺序
Jan 10 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
Jun 12 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
Sep 28 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 Javascript
vue组件内部引入外部js文件的方法
Jan 18 Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
vue filters的使用详解
2018/06/11 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python使用folium excel绘制point
2019/01/03 Python
python 字符串常用函数详解
2019/09/11 Python
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
小学教师自我鉴定
2013/11/07 职场文书
土木工程求职信
2014/05/29 职场文书
委托公证书格式
2015/01/26 职场文书
刑事申诉状范文
2015/05/20 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang