为什么 coffeescript 不返回对象键而是将 x 的值视为字符串 'x' ?
coffee> a = { test: '0', super: '1' }
coffee> x for x,y of a
[ 'test', 'super' ]
coffee> {x:y} for x,y of a
[ { x: '0' }, { x: '1' } ]
为什么 coffeescript 不返回对象键而是将 x 的值视为字符串 'x' ?
coffee> a = { test: '0', super: '1' }
coffee> x for x,y of a
[ 'test', 'super' ]
coffee> {x:y} for x,y of a
[ { x: '0' }, { x: '1' } ]
因为这就是CoffeeScript 对象字面量语法的工作方式。假设它按照您希望的方式工作。如果我在某个地方这么说会发生什么:
window.test = 'pancakes'
那将只是test
每个人范围内的一个变量,突然之间,您a
将是:
a = { 'pancakes': '0', super: '1' }
你会想知道你的电脑在胡说八道什么。因此,如果属性名称被评估为变量而不是无引号的字符串,我们最终都会写出丑陋的东西,例如:
a = { 'test': '0', 'super': '1' }
只是为了获得可预测和一致的结果。
我认为获得所需内容的最简单方法是添加一个小功能:
objectify = (k, v) ->
o = { }
o[k] = v
o
然后你可以:
a = (objectify(x, y) for x, y of o)
演示:http: //jsfiddle.net/ambiguous/M8AFk/