2016-09-19 4 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

последний пример вы упоминается в документации MDN для 'карты()' в разделе «Tricky использование Case»: https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Reference/Global_Objects/Array/map. Таким образом, проблема возникает из необязательных параметров функции. – httpNick

+0

Спецификация ECMAScript - это место для поиска, если вы хотите знать, как все работает. Прямо сейчас, это накопление часто задаваемых вопросов. –

ответ

4

Это было уже отвечал много раз, вот краткий набросок того, что происходит на:

> [] + [] 
    = 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]