===(строга рівність) -true, лише якщо однакові і тип, і значення. Без перетворень.==(нестрога) спершу приводить операнди до спільного типу за досить заплутаними правилами.
1 === '1'; // false
1 == '1'; // true
0 == ''; // true
0 == '0'; // true
'' == '0'; // false - рівність не транзитивна
null == undefined; // true
null == 0; // false
[] == false; // true
NaN === NaN; // false
Правило: завжди === і !==. Більшість лінтерів (правило eqeqeq) так і вимагає.
Єдиний поширений виняток: value == null - коротка перевірка «null або undefined» одночасно. Але й тут читабельніше value === null || value === undefined або оператор ??.
Ще нюанси:
NaNне дорівнює нічому, навіть собі. Перевірка -Number.isNaN(x).- Об'єкти й масиви порівнюються за посиланням:
[1] === [1]-false, бо це два різні масиви. Object.is(a, b)- як===, алеObject.is(NaN, NaN)даєtrue, аObject.is(0, -0)-false.