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 相关文章推荐
jQuery动画animate方法使用介绍
May 06 Javascript
javascript中不等于的代码是什么怎么写
Dec 29 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
jQuery查找节点并获取节点属性的方法
Sep 09 Javascript
vue服务端渲染的实例代码
Aug 28 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
vue实现树形菜单效果
Mar 19 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 Javascript
Vue最新防抖方案(必看篇)
Oct 30 Javascript
Vue的props父传子的示例代码
May 20 Javascript
JS新手入门数组处理的实用方法汇总
Apr 07 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
python中requests模块的使用方法
2015/04/08 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python可迭代对象操作示例
2019/05/07 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
教师推荐信范文
2013/11/24 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL