Я не использовал никого сам, но существуют некоторые инструменты, упомянутые на странице DDD Wikipedia. Большинство из них, кажется, реализовано в Java все же.
http://en.wikipedia.org/wiki/Domain-driven_design#Software_tools_to_support_domain-driven_design
JSLint жалуется на многое, что на самом деле не вредно. В этом случае правильно жаловаться на for ... в
, потому что это неправильная конструкция для цикла по массиву.
Это потому, что вы получите не только цифровые клавиши, но и любые другие произвольные свойства, которые были добавлены в массив или его Array.prototype. Последнее обычно происходит от вспомогательных функций расширения, добавляемых фреймворками.
Хотя вы можете победить этот случай с помощью hasOwnProperty
, чтобы убедиться, что он не является членом прототипа, это уродливее, чем просто делать это правильно с for (var i = 0 ...)
так зачем беспокоиться.
Кроме того, с for ... in
вы не обязательно будете получать элементы в числовом порядке, как вы могли ожидать.
Он жалуется, что i уже был определен.
На самом деле вам не нужно слушать jslint. Но если вы действительно хотите просто передать (что приятно), вы можете сделать:
var myArray = [1, 2, 3];
for (var value in myArray)
{
if (myArray.hasOwnProperty(value)) {
// BLAH
}
}
Для второй части вы должны либо поместить их в функции, либо использовать другие переменные. Другое решение - просто использовать i
вместо var i
второй раз, потому что он уже определен ...
Если вы посмотрите документацию JSLint, вы найдете ссылку, объясняющую обоснование фильтрации циклов for-in : в основном, это во избежание споткнуться о любых перечислимых свойствах добавлены в прототип объекта. (Хотя вы в любом случае не должны использовать for-in для итерации по массиву.)
Во втором случае вы объявляете переменную дважды: переменные имеют область действия (или глобальную область видимости) в JavaScript. Дуглас Крокфорд и, следовательно, JSLint, утверждают, что лучше объявить переменную только один раз для области, в которой она находится:
var i;
for (i = 0; i < 10; i++)
{
// foo
}
for (i =0; i < 20; i++)
{
// bar
}