在Javascript中,"for (attr In this)“的使用通常是危险的……我同意。这是我喜欢Coffeescript的原因之一。然而,我正在用Coffeescript编程,并且有一个需要Javascript的"for (attr in this)“的情况。在Coffeescript中有这样做的好方法吗?
我现在正在做的是用嵌入的原始Javascript编写一堆逻辑,例如:
...coffeescript here...
for (attr in this) {
if (stuff here) {
etc
}
}
使用尽可能小的Javascript会很好……对于如何实现这一点并最大限度地使用Coffeescript,有什么建议吗?
发布于 2011-04-23 00:59:14
您可以使用for attr, value of object
,而不是遍历数组的for item in items
,它的工作方式更像JS中的for in
。
for own attr, value of this
if attr == 'foo' && value == 'bar'
console.log 'Found a foobar!'
编译:https://gist.github.com/62860f0c07d60320151c
它同时接受循环中的键和值,这非常方便。您可以将own
关键字直接插入到for
之后,以强制执行if object.hasOwnProperty(attr)
检查,该检查将从原型中过滤出您不想要的任何内容。
发布于 2011-04-23 01:41:33
Squeegy的答案是正确的。让我修正一下,添加一个通常的解决方案来解决JavaScript的for...in
是“危险的”(通过包含原型属性)就是添加一个hasOwnProperty
检查。CoffeeScript可以使用特殊的own
关键字自动执行此操作:
for own attr of this
...
等同于JavaScript
for (attr in this) {
if (!Object.prototype.hasOwnProperty(this, attr)) continue;
...
}
当您不确定应该使用for...of
还是for own...of
时,使用own
通常更安全。
发布于 2011-04-22 11:48:07
您可以使用for x in y
或for x of y
,具体取决于您希望如何解释元素列表。CoffeeScript的最新版本旨在解决这个问题,您可以通过一个问题(已经实现并关闭) here on GitHub来了解它的新用法
https://stackoverflow.com/questions/5752059
复制相似问题