- 1
- 2
- 3
- 4
- 5
- 6
- 7
var empty = true;
_.each(records, function (val, key) {
if (records.hasOwnProperty(key)) {
empty = false;
}
});
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+156
var empty = true;
_.each(records, function (val, key) {
if (records.hasOwnProperty(key)) {
empty = false;
}
});
изза того что в прототипы стандартных Object и Array напихали всяких методов типа .max .each приходится так проверять объект на пустоту)
bormand 16.07.2012 14:07 # 0
Кстати, а почему используется each, а не обычный цикл for (var key in records)? Имхо в данном случае это только создает бесполезный оверхед.
P.S. А что такое "_"?
P.P.S Если это underscore.js, то там вроде бы есть _.isEmpty(object)...
nur 16.07.2012 14:09 # +1
http://documentcloud.github.com/underscore/
bormand 16.07.2012 14:11 # +4
Там есть готовый код для подобной проверки. И рассматриваемый говнокод превращается в красивое:
nur 16.07.2012 14:22 # −1
bormand 16.07.2012 14:48 # 0
Поясните, пожалуйста, что такое снх?
nur 16.07.2012 14:51 # +3
bormand 16.07.2012 14:59 # +1
P.S. Вот начнут браузеры поддерживать ECMA 5, в которой есть Object.keys(obj), андерскоровцы добавят ее использование в свою либу - и весь код, использующий, isEmpty станет на порядок быстрее ;) А наговнокоженные велосипеды ими и останутся...
nur 16.07.2012 15:01 # +1
bormand 16.07.2012 15:34 # +1
Lure Of Chaos 17.07.2012 10:53 # −1
Prototype?
wvxvw 17.07.2012 12:03 # 0
Вобщем, судя по jslint'у за обычный for in есть предупреждение, за то, что перебираются не только ключи в этом хеше но и свойства объявленные на прототипе объекта.
Аналогичная проблема существовала в AS2 но там изза того, что реализация была всего одна, можно было пользоваться нестандартной AsSetPropFlags(...) для того, чтобы убрать ключ-свойство из перечисления.
Lure Of Chaos 17.07.2012 12:06 # +1
wvxvw 17.07.2012 12:34 # 0
(В первом случае видим foo в распечатке, во втором - length, map и т.д. отстутствуют в распечатке). Но очевидно есть какие-то особенные браузеры, где это работает по-другому. Хотя с другой стороны, на сколько я понимаю __proto__ никогда не было стандартом, и наверняка где-нибудь его нет вообще и в таком контексте опасения автора мне совсем не понятны. Но, опять же, с Явскриптом никогда не знаешь что пришло в голову разработчикам конкретной версии.
Lure Of Chaos 17.07.2012 13:02 # 0
wvxvw 17.07.2012 15:57 # 0
wvxvw 17.07.2012 16:05 # 0
Lure Of Chaos 17.07.2012 16:34 # +2
wvxvw 17.07.2012 23:48 # 0
Lure Of Chaos 18.07.2012 01:21 # +2
если какой-то язык ругают (пхп не считаем) то это значит, что с ним обращаются не так, как это было в него заложено.
нередко беды возникают именно из-за того, что, переходя на другой язык, тянут привычки и навыки из старого.
заставьте, скажем, матерого, закоренелого сишника писать исключительно на каком-нибудь джаваскрипте, руби или вообще хаскелле - очень вероятно, будете наблюдать безудержное калоизвержение, матюконедержание и, возможно, прогрессирующую шизофрению...
wvxvw 18.07.2012 10:48 # 0
Lure Of Chaos 18.07.2012 11:06 # 0
на первый взгляд, автоматическое расширение объектов за счет прототипов звучит заманчиво, но нужно подумать - а надо ли это?
вон весь фреймворк PrototypeJS построен на этом, и почему же он потерял свою популярность? почитайте об этом.
wvxvw 18.07.2012 10:54 # 0