В JavaScript очень часто === предпочтительнее ==, и не зря. С == JavaScript будет «пытаться» сопоставить сравниваемые элементы, и это на удивление сильно. Взгляните на некоторые из этих сравнений, которые в JavaScript считаются равными при использовании ==.

JavaScript
> 5 == "5"
true
> 1 == true
true
> "" == false
true

Может быть, это только я, но я думаю, что разумный человек, незнакомый с JavaScript, найдет приведенные выше результаты удивительными. Тогда не удивительно, что ==, как правило, не приветствуются в JavaScript.

С другой стороны, в Elixir double equals== используется довольно часто, и его не особо обескураживают, как в JavaScript. По крайней мере, таково мое впечатление. Вероятно, это связано с тем, что оператор double equals ==operator строже, чем в JavaScript, и не подвержен таким же сомнительным совпадениям. В Elixir все примеры дают false.

Elixir
> 5 == "5"
false
> 1 == true
false
> "" == false
false

Единственное отличие, которое я обнаружил в Elixir при замене double equals == на тройное equals===, заключается в том, что числа больше не считаются равными, если они относятся к разным типам.

Elixir
iex(6)> 1 == 1.0
true
iex(7)> 1 === 1.0
false

Как вы можете видеть в приведенном выше примере, функция triple equals считает два числа разными, если они относятся к разным типам, даже если числовое значение одинаково.

Вообще говоря (могут быть исключения с такими вещами, как типизированные массивы) JavaScript не делает различий между числовыми типами, все они просто числа, поэтому выполнение приведенного выше примера в JavaScript с использованием тройного равенства дает true.

JavaScript
> 1 === 1.0
true

Как видите, для этого сравнения тройное равенство в JavaScript ведет себя как двойное равенство в Эликсире. Честно говоря, поведение, показанное в приведенном выше примере, больше указывает на то, как числовые типы работают в JavaScript, чем на то, как работает оператор ===.

Я думаю, что хорошее практическое правило - помнить, что в большинстве случаев === в JavaScript эффективно ведет себя так же, как == в Elixir, и наоборот. Это чрезмерное упрощение, но, вероятно, хорошее общее правило, о котором следует помнить.

Конечно, это обсуждение актуально только для примитивных значений. Когда мы переходим к картам / объектам и спискам / массивам, Эликсир и Javascript сильно отличаются, независимо от количества используемых нами знаков равенства. Это другая история.