Pull to refresh
6
0
Алексей @bdiang

Пользователь

Send message
Тут то речь не про пустое, а про отсутствующее.

З.Ы. Кроме того, явно указывая в проверке чего мы хотим, повышает читаемость кода. Ну это уже каждому свое.
Контр-пример.

obj.param: 1256ms
typeof obj.param == «number»: 1063ms
«test» in obj: 1180ms

Как видите typeof obj.param быстрее obj.param

Однако очевидно, что в разных условиях производительность разная. А значит любые утверждения тут невозможны :)

var obj = { test: 1 }

console.time('obj.param');
for(var i=0;i<10000000;++i)
if(obj['test']);
console.timeEnd('obj.param');

console.time('typeof obj.param == «number»');
for(var i=0;i<10000000;++i)
if(typeof obj['test'] == 'number');
console.timeEnd('typeof obj.param == «number»');

console.time('«test» in obj');
for(var i=0;i<10000000;++i)
if('test' in obj);
console.timeEnd('«test» in obj'); 
В нем происходит минимум операций, в отличии от if(object.param). Прежде чем сравнивать производительность, не мешало бы провести оптимизацию проверки if(object.param) и это

if(typeof object.param !=  'ненужный тип') 


или

if(typeof object.param ==  'нужный тип') 

так доступнее объяснил?
Дело ваше, хозяйское. Просто сравнивать с заведомо медленной проверкой — странный эксперимент, вот что я хотел сказать.
if(object['param']) или if(object.param)

В этом случае проиcходит целый ряд проверок в зависимости от типа и значения param. Если param = (number)0, (boolean)false, undefined, null, (string)'' — то будет false, в остальных случаях true

Поэтому этот метод медленнее.

Было бы правильнее сравнивать производительность if('param' in object) и if(typeof object.param != 'undefined') или hasOwnProperty
Разумнее пользоваться hasOwnProperty

function Rabbits() { this.tail = 1; }

var rabbit = new Rabbits();

rabbit.hasOwnProperty('tail')


Хотя все зависит от ситуации
У такой проверки есть одно но: унаследованные свойства и методы также возвращают true:

function Rabbits() {}

var rabbit = new Rabbits();

console.log( 'toString' in rabbit ) // true
putCardSmart: function (card) {
this.putCard( card,
// Этот метод вызовется только когда карта долетит, но он сохранит контекст.
this.finishSmart.bind(this)
);
},

В каком контексте будет выполнен метод this.finishSmart? :)

.bind(this) в данном примере явно лишний.
Вашу библиотеку нельзя сравнивать с шаблонизаторами, которые призваны отделять логику от представления.

Что касается удобности и переиспользуемости — чем больше библиотека берет на себя, тем меньше гибкости остается. Атрибуты, теги — все это удобнее редактировать как раз в виде хтмл.

Ну и как то много телодвижений вы предлагаете на замену обычному циклу :)
Если использовать селекторы типа '#id .class ' — то в движке Sizzle исходным множеством и так будет document.getElementById и все его чайлды. И если такого элемента нет, то и шерстить в поиске .class не будет :)
Как знать, может и Great Empire of Google :-)
Чет у меня все профили грохнулись после установки 2й беты
Документ будет регулярно дополняться новыми материалами и вас об этом уведомляют :)
Нда уж, firebug'а очень не хватает.
При выключенном кеше FF не отправляет заголовок If-Modified-Since в запросе к серверу. Теоретически это можно обыграть и ограничиться одним запросом на проверку, вместо двух.
А в IE6 текст выглядит как каша-малаша, если убрать filter:flipv() fliph(); то нормально

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity