Javascript类型。试图了解它如何在引擎盖下工作

问题描述:

我发现了一些有关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

这已经已经回答了很多次,这里发生了什么事的快速大纲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]