Зачем использовать ===, если вы уверены, что типы равны? - PullRequest
6 голосов
/ 04 марта 2011

Кажется, что оператор строгого равенства предпочтительнее, когда это возможно - я поместил свой код в JSLint и получил следующий отзыв.

Код:

function log() {
    console.log(arguments.length == 1 ? arguments[0] : arguments);
}

Отзыв от JSLint:

Problem at line 2 character 34: Expected '===' and instead saw '=='.

Мне любопытно узнать, какие преимущества === имеет здесь ==. По сути, .length возвращает Number, а 1 также Number. Вы можете быть уверены на 100%, поэтому === - это просто лишний дополнительный токен. Кроме того, проверка типа, хотя вы знаете, что типы всегда будут одинаковыми, также не имеет никакого преимущества в производительности.

Так в чем причина использования === здесь?

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

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

Конечно, не все согласны . Вот почему вы можете отключить определенные проверки в JSlint, если вы уверены в том, что делаете.

1 голос
/ 04 марта 2011

Ну, === должен быть бесконечно быстрее, так как он может потерпеть неудачу быстрее (при несовпадении типов), но это глубоко внутри территории "бессмысленной микрооптимизации".

Реально, я бы посоветовал для ===, даже если вы уверены на 105% - я слишком часто ошибался из-за своих предположений («да, я уверен, что они ... одинаковы ...») эээ ... "). Если нет веских оснований для их отключения, лучше включить проверки кода в коде, чем доверять им в уме.

1 голос
/ 04 марта 2011

Строго не требуется, поскольку вы знаете, что функция length хорошо протестирована.Но что, если length был немного глючным, и был шанс, что он может вернуть false?

В этой ситуации значения 0 и false будут оценены как ложные с использованием == сравнение.Для проверки на ложность (когда есть вероятность возврата 0), вам также необходимо проверить тип данных, в который входит ===.

...