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