Единственные известные мне случаи, когда ===
имеет "странное поведение", это когда нативное значение (например, string
) сравнивается с значением объекта (например,String
), которое «конвертируется» в собственное значение:
"a" === "a" // true
"a" == new String("a") // true
"a" === new String("a") // false- uh, what?
new String("a") == new String("a") // false- thought it was gonna be true? :)
new String("a") === new String("a") // false
var a = new String("a"); a === a // true
То же самое относится и к другим типам оболочки, таким как Number
.Это связано с тем, что при использовании ===
JavaScript использует другой алгоритм, который не выполняет принуждения.
В прошлом были некоторые интересные ошибки браузера, когда определенные методы, например, в String.prototype
, возвращали быString
, а не string
, вызывающий тонкий разрыв кода.
Как отмечали другие, поведение ==
часто более ... интересно.Я почти исключительно обнаружил, что ==
делает правильные вещи ™, но понимание деталей важно для овладения JavaScript.
Удачное кодирование.