javascript的一些bug
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 函数
1 parseInt('06'); // 6 2 parseInt('08'); // 0 注意,谷歌新版已修正 3 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在同一行
/******** ********* /
博客:http://www.cnblogs.com/roucheng/
/ ******* *********/
6、奇怪的数字
012 == 12 // false '012' == 12 // true "3" + 1 // '31' "3" - 1 // 2 0.1 + 0.2 === 0.3 // false 9999999999999999 // 10000000000000000 111111111111111111111 // 111111111111111110000
7、诡异的参数
function hello(what) { alert(arguments[0]); //vicky what = "world"; return "Hello, " + arguments[0] + "!"; } hello("vicky"); //"Hello, world!"
8、让人头大的等号
1 NaN === NaN; // false 2 [] == false; // true 3 "" == false; // true 4 null == false; // false 5 [] == ![] // true 6 7 window.window == window // true 8 window.window === window // false,有些浏览器是true 9 window == document // true,有些浏览器是false 10 11 ("0" && {}) == 0 // false 12 (0 && {}) == 0 // true 13 0 == "0" // true 14 [] == 0 // true