tutorial coffie coffeescript

coffie - Cómo usar Javascript para(attr en esto) con Coffeescript



js to coff (3)

En Javascript, el "for (attr in this)" es a menudo peligroso de usar ... Estoy de acuerdo. Esa es una de las razones por las que me gusta Coffeescript. Sin embargo, estoy programando en Coffeescript y tengo un caso donde necesito Javascript "para (attr en esto)". ¿Hay una buena manera de hacer esto en Coffeescript?

Lo que estoy haciendo ahora es escribir un montón de lógica en JavaScript incorporado incrustado, como por ejemplo:

...coffeescript here... for (attr in this) { if (stuff here) { etc } }

Sería bueno usar el menor Javascript posible ... ¿Alguna sugerencia sobre cómo puedo lograr esto y maximizar mi uso de Coffeescript?


En lugar de for item in items que se itera a través de matrices, puede utilizar for attr, value of object , que funciona más como for in en JS.

for own attr, value of this if attr == ''foo'' && value == ''bar'' console.log ''Found a foobar!''

Compilado: https://gist.github.com/62860f0c07d60320151c

Acepta tanto la clave como el valor en el bucle, que es muy útil. Y puede insertar la own palabra clave justo después de for para aplicar un if object.hasOwnProperty(attr) que debería filtrar cualquier cosa del prototipo que no desee allí.


La respuesta de Squeegy es correcta. Permítame simplemente enmendarlo agregando que la solución habitual de JavaScript for...in ser "peligroso" (al incluir propiedades de prototipo) es agregar un control de propiedad de propiedad de hasOwnProperty . CoffeeScript puede hacer esto automáticamente usando la own palabra clave especial:

for own attr of this ...

es equivalente al JavaScript

for (attr in this) { if (!Object.prototype.hasOwnProperty(this, attr)) continue; ... }

Cuando tenga dudas acerca de si debe usar for...of o for own...of , generalmente es más seguro usar el own .


Puede usar for x in y o for x of y según cómo desee interpretar una lista de elementos. La versión más reciente de CoffeeScript apunta a resolver este problema, y ​​puede leer sobre su nuevo uso con un problema (que desde entonces se ha implementado y cerrado) aquí en GitHub