为什么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' } ]
答案 0 :(得分:3)
因为这就是CoffeeScript object literal syntax的工作方式。假设它按照您希望的方式工作。如果在某个地方我会这样说会发生什么:
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)