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

Javascript type. Trying to understand how it works under the hood

我发现了一些关于 Javascript 的奇怪事情。例如,当我 运行 在节点 Shell 中(通过键入节点)时,有一些我不理解的语句。

    > [] + []
    ''                           (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 是如何工作的,以了解为什么我会得到这些结果(尤其是最后一个)

这个问题已经回答了很多次,这里是对正在发生的事情的简要概述:

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