Показать сообщение отдельно
  #1 (permalink)  
Старый 12.01.2015, 14:10
Интересующийся
Отправить личное сообщение для y0uix Посмотреть профиль Найти все сообщения от y0uix
 
Регистрация: 22.10.2013
Сообщений: 11

Мелкие/важные/интересные оптимизации
Здравствуйте, уважаемые форумчане!

Читаю код Underscore и пока что два вопроса:
0)
if (length === +length) {
//...
}

Насколько я понимаю, поскольку метод _.each() итерируется и по свойствам объекта, то проверяется наличие length и его корректность.
То есть в случае объекта мы получим:
undefined === NaN

что не позволит выполниться этой ветке условного оператора.
Возможно, это можно сделать по другому, насколько такой метод корректен, ведь:
var obj = {
  a: 100,
  // не является зарезервированным словом, ничто не мешает, кроме здравого смысла, это использовать
  length: 1
},
len = obj.length; // в Underscore length = obj.length;
len === +len; // true, пошли итерироваться как по массиву!


1)
var length = (keys || obj).length,
        results = Array(length);

Насколько может быть целесообразно аллоцировать необходимое под массив место при инициализации через конструктор?

Спасибо всем.

Последний раз редактировалось y0uix, 12.01.2015 в 15:54.
Ответить с цитированием