Javascript: порядок операндов в операторе сравнения

Есть ли конкретная причина, по которой я видел, как многие люди пишут

if(1 === a) {...}

вместо

if(a === 1) {...}

Я дал ответ, в котором я написал что-то вроде Array === obj.constructor, когда кто-то спросил меня, что он часто видел таких людей, как это, а не obj.constructor === Array.

Так действительно ли имеет значение, какой способ я использую?

Ответы

Ответ 1

Это условия yoda:

Условия Yoda так называются, потому что буквальное значение условия наступает первым, а переменная занимает второе место. Например, следующее условие Йоды:

if ("red" === color) {
    // ...
}

Это называется условием Йоды, потому что оно читается как "красный цвет", подобно тому, как говорит персонаж "Звездных войн" Йода. Сравните с другим способом расположения операндов:

if (color === "red") {
    // ...
}

Обычно это означает, что "цвет красный", что, возможно, является более естественным способом описания сравнения.

Сторонники условий Йоды подчеркивают, что ошибочно использовать = вместо ==, потому что вы не можете назначить буквальное значение. Это приведет к синтаксической ошибке, и вы будете проинформированы об ошибке на ранней стадии. Поэтому эта практика была очень распространена в раннем программировании, где инструменты еще не были доступны.

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