Node.js coffeescript语法{var}?
很简单,我在node中看到了以下使用coffeescript的语法,这是我在浏览器中从未见过的Node.js coffeescript语法{var}?,node.js,coffeescript,Node.js,Coffeescript,很简单,我在node中看到了以下使用coffeescript的语法,这是我在浏览器中从未见过的 {foo} = app.locals.foo 我前往js2coffee查看它的作用,但它在js输出中似乎是相同的 foo = app.locals.foo 这是怎么回事?在这个上下文中,{}语法是什么意思?您为什么要使用它?来自: 解构分配 为了更方便地从复杂数组和对象中提取值,CoffeeScript实现了ECMAScript Harmony提出的解构赋值语法。当您将数组或对象文字指定给
{foo} = app.locals.foo
我前往js2coffee查看它的作用,但它在js输出中似乎是相同的
foo = app.locals.foo
这是怎么回事?在这个上下文中,{}
语法是什么意思?您为什么要使用它?来自:
解构分配
为了更方便地从复杂数组和对象中提取值,CoffeeScript实现了ECMAScript Harmony提出的解构赋值语法。当您将数组或对象文字指定给值时,CoffeeScript会分解并使两侧相互匹配,将右侧的值指定给左侧的变量。[…]
分解结构分配可用于任何深度的数组和对象嵌套,以帮助提取深度嵌套的属性 相关的例子如下:
futurists =
sculptor: "Umberto Boccioni"
painter: "Vladimir Burliuk"
poet:
name: "F.T. Marinetti"
address: [
"Via Roma 42R"
"Bellagio, Italy 22021"
]
{poet: {name, address: [street, city]}} = futurists
这是这方面的简写:
name = futurists.poet.name
street = futurists.poet.address[0]
city = futurists.poet.address[1]
你可以在行动中看到它
基本上,解构赋值的对象形式允许您以某种自然的方式解包对象。也许一个更简单的例子会有所帮助:
o =
a: 'b'
c: 'd'
e: 'f'
{a, e} = o
这是以下的简写:
a = o.a
e = o.e
还有一个
您可以将解构赋值的左侧视为用于解包右侧的模式。来自:
解构分配
为了更方便地从复杂数组和对象中提取值,CoffeeScript实现了ECMAScript Harmony提出的解构赋值语法。当您将数组或对象文字指定给值时,CoffeeScript会分解并使两侧相互匹配,将右侧的值指定给左侧的变量。[…]
分解结构分配可用于任何深度的数组和对象嵌套,以帮助提取深度嵌套的属性 相关的例子如下:
futurists =
sculptor: "Umberto Boccioni"
painter: "Vladimir Burliuk"
poet:
name: "F.T. Marinetti"
address: [
"Via Roma 42R"
"Bellagio, Italy 22021"
]
{poet: {name, address: [street, city]}} = futurists
这是这方面的简写:
name = futurists.poet.name
street = futurists.poet.address[0]
city = futurists.poet.address[1]
你可以在行动中看到它
基本上,解构赋值的对象形式允许您以某种自然的方式解包对象。也许一个更简单的例子会有所帮助:
o =
a: 'b'
c: 'd'
e: 'f'
{a, e} = o
这是以下的简写:
a = o.a
e = o.e
还有一个
你可以把解构赋值的左侧看作是一种模式,用于解包右侧。如果我在js2coffee中放入
{foo}=app.locals.foo
,它会说JS输出是var foo;foo=app.locals.foo.foo
@Juhana:看看类似的东西可能会有点启发。@muistooshort我只是在评论“它在js输出中似乎与…”相同,因为对我来说它似乎不完全相同。@Juhana:我明白了,太多的foo
让每个人都困惑:)如果我把{foo}=app.locals.foo
在js2coffee中,它表示JS输出是var foo;foo=app.locals.foo.foo
@Juhana:看看类似的东西可能会更有启发性一些。@muistooshort我只是对“它在js输出中似乎与…”进行了评论,因为对我来说,它似乎并不完全相同。@Juhana:我明白了,太多的foo
让每个人都感到困惑:)这是一个非常好的、彻底的答案。但是我仍然不明白为什么我会使用{foo}
,而不仅仅是foo
,当它们在js中编译成相同的东西。@Freshyeball:但是,正如Juhuna所指出的,foo=app.locals.foo
和{foo}=app.locals.foo
不会编译成相同的东西a=b
编译成a=b
,但是{a}=b
是a=b.a
。这是一个非常好的完整答案。但是我仍然不明白为什么我会使用{foo}
,而不仅仅是foo
,当它们在js中编译成相同的东西。@Freshyeball:但是,正如Juhuna所指出的,foo=app.locals.foo
和{foo}=app.locals.foo
不会编译成相同的东西a=b
编译为a=b
,但{a}=b
是a=b.a
。