JS 中有趣的事實

爲了保證的可讀性,本文采用意譯而非直譯。javascript

使用 JS 有不少有趣的地方。儘管工程師們天天都在與之打交道,但仍有一些語言沒有被開發出來。本廣將介紹一些你可能想不到的JS特性。java

NaN 是一個 number 類型

NaN是一個 number 類型。並且, NaN 不等於它本身。實際上 NaN不等於任何東西,驗證一個變量是不是 NaN 可使用 isNaN() 方法來判斷。數組

 
  1. > typeof(NaN)函數

  2. "number"spa

  3.  

  4. > NaN === NaNrest

  5. falsecode

null 是一個對象

null是一個對象。聽起來奇怪!對?但這是事實。對象

 
  1. > typeof(null)ip

  2. "object"內存

在這種狀況下, null表示沒有值。所以, null不該該是 Object的實例。

 
  1. > null instanceof Object

  2. false

undefined 能夠被定義

undefined不是 JS 中的保留關鍵字, 你能夠爲其指定值也不會報錯,若是聲明一個變量沒有賦值,默認爲 undefined

 
  1. > var some_var;

  2. undefined

  3. > some_var == undefined

  4. true

  5. > undefined = 'i am undefined'

0.1 + 0.2 不等於 to 0.3

在JavaScript中, 0.1+0.2==0.3返回 false。事實是,javascript 將浮點數存儲爲二進制。

 
  1. > 0.1 + 0.2

  2. 0.30000000000000004

  3. > 0.1 + 0.2 == 0.3

  4. false

Math.max() 比 Math.min() 小

Math.max()>Math.min()返回 false的事實看起來是錯誤的,但實際上它是正確的。

若是沒有參數傳給 min()max(),那麼它將返回如下值。

 
  1. > Math.max()

  2. -Infinity

  3. > Math.min()

  4. Infinity

018 - 045 = -19

在JavaScript中,前綴 0會把任何數字轉換成八進制。可是,八進制中不使用 8,任何包含 8的數字都將被無聲地轉換爲常規的十進制數字。

 
  1. > 018 - 045

  2. -19

所以, 018-017實際上等於十進制表達式 18-37,由於 045是八進制,但 018是十進制。

函數能夠自執行

只需建立一個函數,並在調用其餘函數時當即調用它,並使用 () 語法

 
  1. > (function() { console.log('I am self executing'); })();

  2. I am self executing

括號的位置問題

 
  1. `return` 語句後面沒有東西的時候它什麼都不返回。實際上,JS 後面 `return` 添加一個 `;`。

  2.  

  3. > function foo() {

  4. return

  5. {

  6. foo: 'bar'

  7. }

  8. }

  9. > foo();

  10. undefined

  11.  

  12. > function foo() {

  13. return {

  14. foo: 'bar'

  15. }

  16. }

  17. > foo();

  18. {foo: "bar"}

沒有整數數據類型

在 JS 中,沒有 int(整數)數據類型。全部數字均爲 Number 類型。實際上它將 int數的浮點值存儲在內存上。

sort() 函數自動類型轉換

sort() 函數自動將值轉換爲字符串,這就會致使奇怪的事情發生。

 
  1. > [1,5,20,10].sort()

  2. (4) [1, 10, 20, 5]

可是,它能夠經過比較來解決:

 
  1. > [1,5,20,10].sort(function(a, b){return a - b});

  2. (4) [1, 10, 20, 5]

數組和對象的和

 
  1. > !+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]

  2. 9

  3. > {} + []

  4. 0

  5. > [] + {}

  6. "[object Object]"

  7. > [] + []

  8. ""

  9. > {} + {}

  10. "[object Object][object Object]"

  11. > {} + [] == [] + {}

  12. true

 

https://mp.weixin.qq.com/s/RSnsLUc87P1xQRWAc6sBgQ

原文

https://dev.to/shafikshaon/interesting-facts-in-javascript-22nk

相關文章
相關標籤/搜索