我正在尝试创建一个列出对象的所有属性的函数
showProps = (obj) ->
result = ""
result+= String(i+ ' = ' + obj[i] + '\n') for i in obj when obj.hasOwnProperty(i)
return result
O = {A:1}
alert showProps O
为什么函数什么都不返回?
答案 0 :(得分:1)
CoffeeScript的for...in
循环用于循环数组。要迭代对象,您需要for...of
(编译为Javascript的for...in
)。
如果您使用
result+= String(i+ ' = ' + obj[i] + '\n') for i of obj when obj.hasOwnProperty(i)
然后你会得到你正在寻找的结果。
正如@muistooshort指出的那样,您可以使用hasOwnProperty
在CoffeeScript中免费获取own
部分,这使代码更简单:
result+= String(i+ ' = ' + obj[i] + '\n') for own i of obj
答案 1 :(得分:1)
您希望for [own] of
- loop迭代属性:
showProps = (obj) ->
result = ""
result+= String(i+ ' = ' + v + '\n') for own i, v of obj
return result
O = {A:1}
alert showProps O
顺便说一句,你不需要明确的String
调用,因为你无论如何都要连接字符串,你的整个函数可以更容易地定义为数组理解:
showProps = (obj) ->
(i+' = '+v for own i, v of obj).join('\n')
答案 2 :(得分:0)
它不起作用,因为您使用了错误的运算符。 in 旨在用于迭代集合,例如 array 。您想使用 of 运算符。
除了我改变你的例子以使其更像CoffeeScript方式:
showProps = (obj) ->
result = ""
result += "#{i} = #{v} \n" for i, v of obj when obj.hasOwnProperty(i)
result
anObject = A:1
alert showProps anObject