В чем разница между операторами `==` и `===` в JavaScript?

Ответ

В JavaScript == — это нестрогое равенство (с приведением типов), а ===строгое равенство (без приведения типов).

Пример:

console.log(5 == '5');   // true (строка '5' приводится к числу 5)
console.log(5 === '5');  // false (разные типы: number vs string)
console.log(null == undefined);  // true (специальное правило)
console.log(null === undefined); // false (разные типы)

Для QA-инженера это критически важно:

  • === (строгое равенство) используется практически всегда в тестах (например, в Jest, Mocha). Это предотвращает скрытые баги из-за неявного преобразования типов и делает проверки предсказуемыми.
  • == (нестрогое равенство) может использоваться осознанно в редких случаях, например, для проверки на null или undefined одновременно (if (value == null)).

Практическое правило в тестировании: В assertions всегда используйте toBe (в Jest) или strictEqual (в Node.js assert), которые работают по принципу строгого равенства (===), чтобы избежать ложноположительных результатов.

Ответ 18+ 🔞

Слушай, давай разберём эту дичь с равенствами в JavaScript, а то тут народ путается, как в тёмной комнате. Вот представь: у тебя есть == и ===. Первый — это как хитрая жопа, которая пытается тебе угодить и подстроиться, а второй — принципиальный мужик, который смотрит в корень.

Пример, чтобы мозги не взорвались:

console.log(5 == '5');   // true (строка '5' магически превращается в число 5, ёпта!)
console.log(5 === '5');  // false (типы разные, чувак, number vs string — иди нахуй со своими преобразованиями)
console.log(null == undefined);  // true (это специальное правило, типа они братья по несчастью)
console.log(null === undefined); // false (опять разные типы, доверия к этой парочке — ноль ебать)

А теперь для QA, чтобы не облажаться на ровном месте:

  • === (строгое равенство) — это твой верный пёс в тестах. Когда пишешь assertions в Jest или Mocha, ты ж не хочешь, чтобы тест прошёл из-за какого-то левого преобразования? Вот именно. Это предсказуемо и надёжно, как швейцарские часы, а не как наш автопром.
  • == (нестрогое равенство) — это как опасная игрушка. Использовать можно, но только если ты чётко понимаешь, зачем. Например, проверить, что переменная — это null ИЛИ undefined одной проверкой. Но если не уверен — лучше не лезь, а то будет тебе хиросима в коде.

Главное правило, которое высеки у себя на мониторе: В assertions всегда юзай toBe (в Jest) или strictEqual (в Node.js assert). Они работают по принципу строгого равенства (===). Это чтобы у тебя тесты не проходили там, где должны падать, понимаешь? Иначе потом будешь охуевать, откуда баги вылезают.