0

我正在尝试制作一个列出对象所有属性的函数

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

为什么函数什么都不返回?

4

3 回答 3

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
于 2013-10-24T16:39:28.443 回答
1

您想要一个for [own] of-循环来迭代属性:

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')
于 2013-10-24T16:45:05.733 回答
0

它不起作用,因为您使用了错误的运算符。in旨在用于迭代集合,例如数组。您想使用运算

此外,我稍微更改了您的示例以使其更像 CoffeeScript 方式:

showProps = (obj) ->
  result = ""
  result += "#{i} = #{v} \n" for i, v of obj when obj.hasOwnProperty(i)
  result
anObject = A:1
alert showProps anObject
于 2013-10-24T16:46:42.433 回答