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读取中文COOKIE的解决办法
Feb 15 Javascript
js操作二级联动实现代码
Jul 27 Javascript
基于jQuery的图片大小自动适应实现代码
Nov 17 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
多种方法实现load加载完成后把图片一次性显示出来
Feb 19 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
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
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
vue-cli常用设置总结
2018/02/24 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
详解python进行mp3格式判断
2016/12/23 Python
python实现k-means聚类算法
2018/02/23 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
电脑教师的自我评价
2013/12/18 职场文书
物业总经理岗位职责
2014/02/28 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
捐款感谢信
2015/01/20 职场文书
邀请函样本
2015/02/02 职场文书
综合测评个人总结
2015/03/03 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
红色电影观后感
2015/06/18 职场文书
导游词之湖北武当山
2019/09/23 职场文书