这段代码中遗漏了 `[]` 是什么意思?
What does it mean when the `[]` are missed out from this code?
我写了这段代码
let content = new Immutable.Map({
metadata: new Immutable.Map({
cities: 2
}),
data: new Immutable.List(
new Immutable.Map({
code: 'a',
label: 'Sydney',
percentage: 35 / 40,
}),
new Immutable.Map({
code: 'b',
label: 'Melbourne',
percentage: 22 / 40,
}),
),
})
当我执行 content.getIn(['data'])
时,我得到 ['code', 'a']
。但我实际上期待这样的地图对象列表 [{'code':'a', 'label':'Sydney', 'percentage':0.875}, [...]}
我意识到这是因为我没有放入一对 []
来正确地包围 Map
对象。一旦我将它们放入,它将按预期工作:
let content = new Immutable.Map({
metadata: new Immutable.Map({
cities: 2
}),
data: new Immutable.List([ // <-- missed [
new Immutable.Map({
code: 'a',
label: 'Sydney',
percentage: 35 / 40,
}),
new Immutable.Map({
code: 'b',
label: 'Melbourne',
percentage: 22 / 40,
}),
]), // <- missed ']'
})
然而我的原版代码编译成javascript却没有报错。 es6 解析器实际上是如何理解它的?为什么两个 map
对象变平了,为什么 ImmutableList
接受了不兼容的参数?
What does it mean when the []
are missed out from this code?
这意味着您将两个 个参数传递给Immutable.List
而不是一个。简化示例:
// two arguments
foo(a, b)
// vs
// array as single argument
foo([a, b])
如果你 look at the source 你会看到 Immutable.List
只对第一个参数做一些事情而忽略第二个。
所以你的第一个例子等同于
data: new Immutable.List(
new Immutable.Map({
code: 'a',
label: 'Sydney',
percentage: 35 / 40,
}),
),
它如何从中导出 ['code', 'a']
特定于 immutable-js。它似乎以一种或另一种方式将参数转换为可迭代的。跟着源码大概就能搞定了。
Why the two map objects get flattened
他们没有。
why ImmutableList
accepts the parameters without compliant?
JavaScript 是动态类型的,您可以向函数传递任意多(或少)的参数,而不管其形式参数。
Immutable.List
似乎是以接受任何类型的 "iterable" 的方式实现的,它试图充分利用您传递给它的价值。
我写了这段代码
let content = new Immutable.Map({
metadata: new Immutable.Map({
cities: 2
}),
data: new Immutable.List(
new Immutable.Map({
code: 'a',
label: 'Sydney',
percentage: 35 / 40,
}),
new Immutable.Map({
code: 'b',
label: 'Melbourne',
percentage: 22 / 40,
}),
),
})
当我执行 content.getIn(['data'])
时,我得到 ['code', 'a']
。但我实际上期待这样的地图对象列表 [{'code':'a', 'label':'Sydney', 'percentage':0.875}, [...]}
我意识到这是因为我没有放入一对 []
来正确地包围 Map
对象。一旦我将它们放入,它将按预期工作:
let content = new Immutable.Map({
metadata: new Immutable.Map({
cities: 2
}),
data: new Immutable.List([ // <-- missed [
new Immutable.Map({
code: 'a',
label: 'Sydney',
percentage: 35 / 40,
}),
new Immutable.Map({
code: 'b',
label: 'Melbourne',
percentage: 22 / 40,
}),
]), // <- missed ']'
})
然而我的原版代码编译成javascript却没有报错。 es6 解析器实际上是如何理解它的?为什么两个 map
对象变平了,为什么 ImmutableList
接受了不兼容的参数?
What does it mean when the
[]
are missed out from this code?
这意味着您将两个 个参数传递给Immutable.List
而不是一个。简化示例:
// two arguments
foo(a, b)
// vs
// array as single argument
foo([a, b])
如果你 look at the source 你会看到 Immutable.List
只对第一个参数做一些事情而忽略第二个。
所以你的第一个例子等同于
data: new Immutable.List(
new Immutable.Map({
code: 'a',
label: 'Sydney',
percentage: 35 / 40,
}),
),
它如何从中导出 ['code', 'a']
特定于 immutable-js。它似乎以一种或另一种方式将参数转换为可迭代的。跟着源码大概就能搞定了。
Why the two map objects get flattened
他们没有。
why
ImmutableList
accepts the parameters without compliant?
JavaScript 是动态类型的,您可以向函数传递任意多(或少)的参数,而不管其形式参数。
Immutable.List
似乎是以接受任何类型的 "iterable" 的方式实现的,它试图充分利用您传递给它的价值。