Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function count(f, q){
console.profile()
while(q--){
f();
}
console.profileEnd()
}
function f1( x ){
return typeof x == 'undefined';
}
function f2( x ){
return typeof x === 'undefined';
}
count(f1, 1000);
count(f2, 1000);
(undefined == 'undefined') и потому оба значения приводится к булевому виду (Boolean (undefined) == Boolean ('undefined')). Именно приведение и занимает это время.Это крохи, но таких сравнений в коде огромное кол-во + легче отловить ошибки несоответствия типов.
function count(f, q){
console.time(1)
while(q--){
f();
}
console.timeEnd(1)
}
function f1( x ){
return typeof x == 'undefined';
}
function f2( x ){
return typeof x === 'undefined';
}
count(f1, 100000000); // 181.000ms
count(f2, 100000000); // 1034.000ms
for (var i in topics.comments);
// vs
for (var i in topics.loadComments());
Может конечно первая запись более изящна, но вторая намного лучше подходит для продуктивной разработки ибо явно демонстрирует, что произойдет доступ к БД (или какой нибудь другой тяжелый запрос).
var category = Orm.factory('category', id);
for (var i in category.topics) {
var topic = category.topics[i];
for (var k in topic.comments) {
var comment = topic.comments[k];
comment.author;
}
}
var category = Orm.factory('category', id)
.includes('topics', 'topics.comments', 'topics.comments.author');
for (var i in category.topics) {
var topic = category.topics[i];
for (var k in topic.comments) {
var comment = topic.comments[k];
comment.author;
}
}
var category = Orm.factory('category', id)
.includes('topics', 'topics.comments', 'topics.comments.author');
for (var i in category.loadTopics()) {
А ведь топики уже загружённые уже, а судя по коду можно подумать, что они опять грузятся)
getTopics()var Foo = new Class({
test: function ( value ) {
if( value === undefined ) {
console.log('test getted');
return 'test';
}
console.log('test setted');
return this;
}
});
function Foo(bar) {
this._bar = bar;
};
Foo.prototype = {
set bar (bar) {
this._bar = bar;
},
get bar () {
return this._bar;
}
};
function Foo(bar) {
this._bar = bar;
};
Foo.prototype = {
__set (name, arg) {
this[name] = arg;
},
__get(name) {
return this[name];
}
};
этот патч совместим со всеми браузерами. точнее не так.
те, кто не использует геттеры и сеттеры — ничего не узнают про этот патч, он на них не повлияет никак. а вот те, кто использует — сможет использовать их и в Мутулз.
for(i in obj.property) { /* ... */ }

Геттеры и сеттеры в Javascript