Сначала я скажу «нет», или, по крайней мере, он не может быть надежно решен, поскольку он всегда будет в конечном счете зависимым от реализации.
Сказав это, !==
имеет один дополнительный шаг, описанный в спецификации, который должен возвращать противоположность результата сравнения. В противном случае они идентичны.
11.9.4 Строгое Равно Оператор (===)
Производство ВыражениеРавенства: ВыражениеРавенства === ВыражениеОтношения вычисляется следующим образом:
- Пусть LRef быть результат вычисления EqualityExpression.
- Позвольте lval быть GetValue (lref).
- Пусть rref будет результатом оценки RelationalExpression.
- Пусть rval будет GetValue (rref).
- Вернуть результат выполнения строгого сравнения равенства rval === lval. (См 11.9.6)
11.9.5 Строгого ли-не-равно Operator (==!)
Производственное ВыражениеРавенство: == ВыражениеРавенство вычисляются следующим образом:
- Позвольте lref быть результатом оценки EqualityExpression.
- Позвольте lval быть GetValue (lref).
- Пусть rref будет результатом оценки RelationalExpression.
- Пусть rval будет GetValue (rref).
- Пусть r является результатом выполнения строгого сравнения равенства rval === lval. (См. 11.9.6)
- Если r истинно, верните false. В противном случае верните true.
Я дам вам решить, если этот шаг должен быть беспокойство, но опять же, это только язык спецификация. Кто знает, какие трюки выполняются.
Очень маловероятно, что есть какая-то измеримая разница. Если бы это было так, тогда среда выполнения всегда могла бы обеспечить лучшую логику, независимо от того, как вы ее кодируете. Нет причин тратить время на беспокойство о мелочах, подобных этому. – Pointy
OMG ... Это даже хуже, чем сравнение '++ i' с' i ++ 'или' i + = 1'. Наименее важная микро-оптимизация. – Reinmar
Вы можете попробовать себя: http://jsperf.com/. –