2016-09-19 59 views
0

我發現了一些有關Javascript的奇怪的東西。例如,當我在一個Shell節點中運行(只需鍵入節點),有一些我不明白的語句。Javascript類型。試圖瞭解它如何在引擎蓋下工作

> [] + [] 
    ''       (because [] is converted to an empty string ?) 
    > {} + [] 
    0       (why 0 ?) 
    > x = ['10', '10', '10']  (this is ok) 
    ['10', '10', '10'] 
    > x.map(parseInt) 
    [ 10, NaN, 2 ]    (really weird) 

我想了解Javascript引擎蓋下是如何工作的理解,爲什麼我得到這些結果(特別是最後一個)

+3

在'Tricky使用案例'部分的'map()'的mdn文檔中提到了最後一個示例:https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Reference/Global_Objects/Array/map。總之,問題來自可選的功能參數。 – httpNick

+0

如果您想了解事物設計的工作原理,ECMAScript規範是您需要查看的地方。現在,這是常見問題的積累。 – 2016-09-19 21:41:18

回答

4

這已經已經回答了很多次,這裏發生了什麼事的快速大綱on:

> [] + [] 
    = String([]) + String([]) 
    = [].join() + [].join() 
    = '' + '' 

> {} + [] 
    = {/*empty block */}; +[] 
    = Number([]) 
    = Number(String([])) 
    = Number('') 
    = 0 

> x = ['30', '20', '10'] 
> x.map(parseInt) 
    = [ 
     parseInt('30', 0), 
     parseInt('20', 1), 
     parseInt('10', 2) 
    ] 
    = [10, NaN, 2]