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

时间:2016-09-19 21:31:48

标签: javascript typing

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

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

1 个答案:

答案 0 :(得分: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]