Как правильно выполнять сравнение значений переменных в JavaScript?

В чем разница в сравнении переменных (их типов) вот таком виде: "object" === typeof exports && "undefined" !== typeof module, по сравнению с этим: typeof exports === "object"  &&  typeof module !== "undefined"? В многих библиотеках я вижу, что сначала пишут строку и ее сравнивают с функцией typeof. В чем разница, если написать в обратном порядке?
  • 3 октября 2023 г. 12:27
Ответы на вопрос 3
Оба варианта сравнения значений переменных в JavaScript являются правильными. Разница между ними заключается в порядке операндов, но результат сравнения будет одинаковым.

В первом варианте, "object" === typeof exports && "undefined" !== typeof module, сначала проверяется, является ли тип переменной exports равным строке "object", а затем проверяется, не является ли тип переменной module равным "undefined". Это обеспечивает условие истины только тогда, когда exports имеет тип "object" и module не имеет тип "undefined".

Во втором варианте, typeof exports === "object" && typeof module !== "undefined", сначала проверяется, равен ли тип переменной exports строке "object", а затем проверяется, является ли тип переменной module отличным от "undefined". Это также обеспечивает условие истины только в том случае, если exports имеет тип "object" и module не имеет тип "undefined".

Оба варианта выполняют одно и то же сравнение и дают одинаковый результат. Выбор между ними основан на предпочтениях или стиле кодирования. Важно сохранять консистентность и использовать любой из вариантов сравнения во всех частях кода для соблюдения идиоматического стиля и обеспечения читаемости кода.
Спасибо
Здесь нет никакой разницы. Раньше это было популярно как защита от ошибки при использовании присваивания вместо сравнения. Например:

if (value == 42) { ... }

или

if (value = 42) { ... }

Во втором случае, если случайно забыть один знак равенства, это будет трудно заметить. Также это может привести к непредсказуемым результатам.

Однако, если мы поменяем местами значения, то возникнет ошибка компиляции:

if (42 == value) // ок

или

if (42 = value) // ошибка компиляции
Похожие вопросы