1、 NaN 是一個 number 類型
NaN是一個number類型。 而且,NaN不等於它自己。 實際上NaN不等於任何東西,驗證一個變量是否是NaN可以使用isNaN()方法來判斷。
> typeof(NaN)
"number"
> NaN === NaN
false
2 、null 是一個對象
null是一個對象。 聽起來奇怪! 對? 但這是事實。
> typeof(null)
"object"
在這種情況下,null表示沒有值。因此,null不應該是Object的實例。
> null instanceof Object
false
3 、undefined 可以被定義
undefined不是 JS 中的保留關鍵字, 你可以爲其指定值也不會報錯,如果聲明一個變量沒有賦值,默認爲undefined
> var some_var;
undefined
> some_var == undefined
true
> undefined = 'i am undefined'
4 0.1 + 0.2 不等於 to 0.3
在JavaScript中,0.1 +0.2 == 0.3返回false。 事實是,javascript 將浮點數存儲爲二進制。
> 0.1 + 0.2
0.30000000000000004
> 0.1 + 0.2 == 0.3
false
5、 Math.max() 比 Math.min() 小
Math.max() > Math.min()返回false的事實看起來是錯誤的,但實際上它是正確的。
如果沒有參數傳給min()或max(),那麼它將返回以下值。
> Math.max()
-Infinity
> Math.min()
Infinity
6 、018 - 045 = -19
在JavaScript中,前綴0會把任何數字轉換成八進制。但是,八進制中不使用8,任何包含8的數字都將被無聲地轉換爲常規的十進制數字。
> 018 - 045
-19
因此,018-019實際上等於十進制表達式18-37,因爲045是八進制,但018是十進制。
7、 函數可以自執行
只需創建一個函數,並在調用其他函數時立即調用它,並使用()語法
> (function() { console.log('I am self executing'); })();
I am self executing
8 括號的位置問題
`return` 語句後面沒有東西的時候它什麼都不返回。 實際上,JS 後面 `return` 添加一個 `;`。
> function foo() {
return
{
foo: 'bar'
}
}
> foo();
undefined
> function foo() {
return {
foo: 'bar'
}
}
> foo();
{foo: "bar"}
9 、沒有整數數據類型
在 JS 中,沒有int(整數)數據類型。 所有數字均爲Number類型。 實際上它將int數的浮點值存儲在內存上。
10、 sort() 函數自動類型轉換
sort()函數自動將值轉換爲字符串,這就會導致奇怪的事情發生。
> [1,5,20,10].sort()
(4) [1, 10, 20, 5]
但是,它可以通過比較來解決:
> [1,5,20,10].sort(function(a, b){return a - b});
(4) [1, 5, 10, 20]
11、 數組和對象的和
> !+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]
9
> {} + []
0
> [] + {}
"[object Object]"
> [] + []
""
> {} + {}
"[object Object][object Object]"
> {} + [] == [] + {}
true
> !+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]
9
> {} + []
0
> [] + {}
"[object Object]"
> [] + []
""
> {} + {}
"[object Object][object Object]"
> {} + [] == [] + {}
true
點此鏈接領取:自己是一名從事了多年開發的web前端老程序員,今年年初我花了一個月整理了一份最適合2020年學習的前端學習乾貨,想分享給每一位喜歡前端的小夥伴