爲了保證的可讀性,本文采用意譯而非直譯。javascript
使用 JS 有不少有趣的地方。儘管工程師們天天都在與之打交道,但仍有一些語言沒有被開發出來。本廣將介紹一些你可能想不到的JS特性。java
NaN
是一個 number
類型。並且, NaN
不等於它本身。實際上 NaN
不等於任何東西,驗證一個變量是不是 NaN
可使用 isNaN()
方法來判斷。數組
> typeof(NaN)
函數
"number"
spa
> NaN === NaN
rest
false
code
null
是一個對象。聽起來奇怪!對?但這是事實。對象
> typeof(null)
ip
"object"
內存
在這種狀況下, null
表示沒有值。所以, null
不該該是 Object
的實例。
> null instanceof Object
false
undefined
不是 JS 中的保留關鍵字, 你能夠爲其指定值也不會報錯,若是聲明一個變量沒有賦值,默認爲 undefined
> var some_var;
undefined
> some_var == undefined
true
> undefined = 'i am undefined'
在JavaScript中, 0.1+0.2==0.3
返回 false
。事實是,javascript 將浮點數存儲爲二進制。
> 0.1 + 0.2
0.30000000000000004
> 0.1 + 0.2 == 0.3
false
Math.max()>Math.min()
返回 false
的事實看起來是錯誤的,但實際上它是正確的。
若是沒有參數傳給 min()
或 max()
,那麼它將返回如下值。
> Math.max()
-Infinity
> Math.min()
Infinity
在JavaScript中,前綴 0
會把任何數字轉換成八進制。可是,八進制中不使用 8
,任何包含 8
的數字都將被無聲地轉換爲常規的十進制數字。
> 018 - 045
-19
所以, 018-017
實際上等於十進制表達式 18-37
,由於 045
是八進制,但 018
是十進制。
只需建立一個函數,並在調用其餘函數時當即調用它,並使用 ()
語法
> (function() { console.log('I am self executing'); })();
I am self executing
`return` 語句後面沒有東西的時候它什麼都不返回。實際上,JS 後面 `return` 添加一個 `;`。
> function foo() {
return
{
foo: 'bar'
}
}
> foo();
undefined
> function foo() {
return {
foo: 'bar'
}
}
> foo();
{foo: "bar"}
在 JS 中,沒有 int
(整數)數據類型。全部數字均爲 Number
類型。實際上它將 int
數的浮點值存儲在內存上。
sort()
函數自動將值轉換爲字符串,這就會致使奇怪的事情發生。
> [1,5,20,10].sort()
(4) [1, 10, 20, 5]
可是,它能夠經過比較來解決:
> [1,5,20,10].sort(function(a, b){return a - b});
(4) [1, 10, 20, 5]
> !+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]
9
> {} + []
0
> [] + {}
"[object Object]"
> [] + []
""
> {} + {}
"[object Object][object Object]"
> {} + [] == [] + {}
true
https://mp.weixin.qq.com/s/RSnsLUc87P1xQRWAc6sBgQ
原文
https://dev.to/shafikshaon/interesting-facts-in-javascript-22nk