我正在尝试制作一个列出对象所有属性的函数
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
为什么函数什么都不返回?
我正在尝试制作一个列出对象所有属性的函数
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 所指出的,您可以hasOwnProperty
在 CoffeeScript 中免费获得该部分own
,这使得代码更简单一些:
result+= String(i+ ' = ' + obj[i] + '\n') for own i of obj
您想要一个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')
它不起作用,因为您使用了错误的运算符。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