Когда JavaScript == будет иметь больше смысла, чем ===?
Как Какой оператор равен (== vs ===) должен использоваться в сравнении JavaScript? указывает, что они в основном идентичны, кроме '===
' также обеспечивает тип равенство и, следовательно, "==
" может выполнять преобразование типов. В Douglas Crockford JavaScript: "Хорошие детали", рекомендуется всегда избегать "==
". Однако мне интересно, какова была первоначальная мысль о проектировании двух операторов равенства.
Вы видели какую-либо ситуацию, когда использование ==
'более подходит, чем использование' ===
'?
Ответы
Ответ 1
Рассмотрим ситуацию, когда вы сравниваете числа или строки:
if (4 === 4)
{
// true
}
но
if (4 == "4")
{
// true
}
и
if (4 === "4")
{
// false
}
Это относится как к объектам, так и к массивам.
Итак, в приведенных выше случаях вам нужно сделать правильный выбор: использовать == или ===
Ответ 2
Простой ответ заключается в том, что "==" имеет больше смысла, чем "===", когда вы хотите, чтобы во время сравнений выполнялось принуждение типа.
Хорошим примером могут служить числа, передаваемые в строке запроса URL. Если, например, у вас есть разбитый на страницы контент, а параметр запроса page
содержит текущий номер страницы, вы можете проверить текущую страницу с if (page == 1) ...
, хотя page
на самом деле "1"
, а не 1
.
Ответ 3
Я бы предположил, что нет проблемы с использованием ==
, но чтобы понять, когда и зачем его использовать (т.е. использовать ===
как правило, и ==
, когда он служит цели). По существу, ==
просто дает вам сокращенную нотацию - вместо того, чтобы делать что-то вроде
if (vble === 0 || vble === "" || vble === null || vble === undefined || vble === false) ...
Намного проще писать
if (vble == false) ...
(Или еще проще писать)
if (! vble)...
Конечно, есть больше примеров, чем просто поиск "правдивых" или "ложных" значений.
Действительно, вам просто нужно понять, когда и почему использовать ==
и ===
, я не вижу причин, почему бы не использовать ==
, где он лучше подходит...
Другим примером является использование этого сокращения, чтобы разрешать вызовы сокращенного метода:
function func(boolOptionNotCommonlyUsed) {
if (boolOptionNotCommonlyUsed) { //equiv to boolOptionNotCommonlyUsed == true
//do something we rarely do
}
//do whatever func usually does
}
func(); //we rarely use boolOptionNotCommonlyUsed, so allow calling without "false" as an arg
Ответ 4
== сравнивает, одинаковы ли значения двух сторон или нет.
=== сравнивает, являются ли значения и тип данных двух сторон одинаковыми или нет.
Скажем, что
$var = 0;
if($var == false){
// true because 0 is also read as false
}
if(!$var){
// true because 0 is also read as false
}
if($var === false){
// false because 0 is not the same datatype as false. (int vs bool)
}
if($var !== false){
// true becuase 0 is not the same datatype as false. (int vs bool)
}
if($var === 0){
// true, the value and datatype are the same.
}
вы можете проверить http://www.jonlee.ca/the-triple-equals-in-php/