0

为什么 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' } ]
4

1 回答 1

3

因为这就是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/

于 2013-07-07T22:11:44.440 回答