JavaScript: Object vs True (или другие Primatives) Сравнение равенства (производительность/оптимизация)

Поэтому из базового понимания JavaScript === быстрее, чем == (в большинстве случаев) (потому что === не нужно выполнять литье типов).

Недавно я увидел, что кто-то настраивает набор переменных с широким охватом для всей функции/объекта/класса:

var val = {}; // some random object that never changes?
var Obj = {};

затем (необязательно повторяется) позже:

Obj[key] = val;

затем (опционально повторяемый и, возможно, переплетенный с выше) позже сравнивали:

if ( Obj[key] === val ) {...}

Мой вопрос в том, почему (если он), это быстрее/лучше, чем пропустить val полностью и просто использовать:

Obj[key] = true; // or = 1, or something?

// ... more code, then later checking:

if ( Obj[key] === true ) // or === 1 or just ( Obj[key] ) because basic existence evaluates to true

Я предполагаю, что потеря производительности при использовании true или 1 хуже, чем сравнение объекта с самим собой, но я хотел бы понять, почему?

Благодарю!

1 ответ

Это не для производительности, объект лучше, потому что его нельзя "подделать". Рассматривать:

var RED = 1,
 GREEN = 2,
 BLUE = 3;

Теперь, если вы проверите какой-то color === RED, он фактически не проверяет это, он просто проверяет, равен ли color номеру 1, преднамеренно или случайно.

Теперь в этом:

var RED = {},
 GREEN = {},
 BLUE = {};

Когда вы это сделаете, color === RED, вы действительно проверяете, является ли цвет красным, потому что идентификатор объекта не может быть чем-то еще.

licensed under cc by-sa 3.0 with attribution.