Coffeescript 为什么';这个辅助脚本代码不能工作吗?

Coffeescript 为什么';这个辅助脚本代码不能工作吗?,coffeescript,Coffeescript,我试图创建一个列出对象所有属性的函数 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 为什么函数不返回任何内容?CoffeeScript的for…in循环用于在数组上循环。要在对象上迭代,您需要for…of(编译为Jav

我试图创建一个列出对象所有属性的函数

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

为什么函数不返回任何内容?

CoffeeScript的
for…in
循环用于在数组上循环。要在对象上迭代,您需要
for…of
(编译为Javascript的
for…in

如果你使用

result+= String(i+ ' = ' + obj[i] + '\n') for i of obj when obj.hasOwnProperty(i)
然后你会得到你想要的结果

正如@muistooshort所指出的,您可以使用
own
在CoffeeScript中免费获得
hasOwnProperty
部分,这使得代码更简单:

result+= String(i+ ' = ' + obj[i] + '\n') for own i of obj

您希望[own]的
-迭代属性:

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')

它不起作用,因为你用错了操作员。in用于遍历集合,例如数组。您想使用运算符

此外,我对您的示例做了一些更改,使其更符合咖啡脚本的方式:

showProps = (obj) ->
  result = ""
  result += "#{i} = #{v} \n" for i, v of obj when obj.hasOwnProperty(i)
  result
anObject = A:1
alert showProps anObject

当obj.hasOwnProperty(i)
时,为什么不为obj的own i而不是
?我做了最小的更改,显示了问题所在以及如何修复它。不过,这可能值得一提。