Ответ 1
Вот официальный ответ на ваш вопрос (цитируемые части, ссылка внизу) и анализ:
Равенство (==)
Оператор равенства преобразует операнды, если они не одного типа, а затем применяет строгое сравнение. Если любой операнд является числом или логическим, операнды, если это возможно, преобразуются в числа; else, если любой операнд является строкой, операнд строки преобразуется в число, если это возможно. Если оба операнда являются объектами, тогда JavaScript сравнивает внутренние ссылки, равные, когда операнды относятся к одному и тому же объекту в памяти. Синтаксис
x == y
Примеры
3 == 3//true
"3" == 3//true
3 == '3'//true
Это означает, что, когда я прочитал это, первые 3 (целое число) преобразуется в строку для сравнения, поэтому он становится '3' == '3'
, что является истинным, таким же, как в вашем случае с нулями.
ПРИМЕЧАНИЕ. Я предполагаю, что конверсия может варьироваться в разных JS-машинах, хотя они должны быть унифицированы по спецификации ECMAScript - http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 (quoted @Derek 朕 會 功夫). Это предположение сделано на субъективном и императивном мнении о том, что не все браузеры и механизмы JavaScript там совместимы с ECMAScript.
Идентичность/строгое равенство (===)
Оператор identity возвращает true, если операнды строго равны (см. выше) без преобразования типа.
Идентичность/строгое равенство (===), найденное на том же ресурсе в конце ответа, пропустит автоматическое преобразование типа (как указано выше) и проведет проверку типов, чтобы убедиться, что мы имеем точное совпадение, т.е. вышеприведенное выражение не сработает:
typeof(int) == typeof(string)
Это обычный оператор в большинстве языков со слабым типом:
http://en.wikipedia.org/wiki/Strong_and_weak_typing
Я бы сказал, что нужно быть уверенным, что функция/метод вернется, если такая функция/метод вот-вот вернет числа (целые числа/числа с плавающей точкой), она должна придерживаться этого до самого конца, иначе противоположные практики могут вырезать голову по многим причинам, и один тоже лежит в этом вопросе.
Вышеприведенное действие относится к другим языкам со слабым набором текста, например PHP.
Подробнее об этом см. второй глава (Операторы равенства):
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators