Когда следует использовать компаратор === над ==? - PullRequest
2 голосов
/ 09 сентября 2011

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

Я вижу разницу в компараторе с помощью одиночного =, он будет смотреть на значение левой переменной через цикл, например:

while($line = getrow(something))

Так в чем же разница между == и === в таких утверждениях, как:

if ($var1 === $var2)
//versus
if ($var1 ==  $var2)

Аналогично:

* * 1010

Я всегда использовал двойные равные, я никогда не использовал тройные. Я использую следующие языки: php, vb.net, java, javascript, c / c ++.

Я заинтересован в систематическом изучении того, что происходит в тройной цитате, которая отличается от двойной цитаты.

Когда один должен использоваться поверх другого? Спасибо за удовлетворение моего любопытства:)

Ответы [ 5 ]

3 голосов
/ 09 сентября 2011

Как правило, == смотрит только на равенство значений.Так, например ...

5 == 5.0  //true

Однако, === также учитывает тип значения и (на языках, с которыми я знаком).

var five = 5;
var five_float = (float)5.0;

five === 5;        //true - both int, both equal to 5
five_float === 5;  //false - both equal 5 but one is an int and one is a float

FYI, оператор = (обычно называемый оператором присваивания) используется для установки значения параметра левой стороны на правой стороне.Это довольно очевидно.Однако в большинстве языков это также будет возвращать true, если назначение выполнено успешно.Вы хотите избегать использования = там, где вы хотите использовать == (или ===), потому что это будет выглядеть как сравнение, но это не так - и он вернет true неожиданно.

Например, допустим, выхочу проверить, равно ли число 10 ...

myNumber = 7;
if(myNumber = 10)
{
    //will always be true and execute this code because myNumber will successfully
    //be assigned the value of 10 instead of checking to see if the number is 10.
    //oops!
}

Последнее замечание - это верно для PHP и JavaScript.Я не думаю, что есть оператор === в C ++ или Java, и == также имеет немного другое значение.

1 голос
/ 09 сентября 2011

$a === $b ИСТИНА, если $ a равно $ b, и они одного типа.(введено в PHP 4)

$a !== $b TRUE, если $ a не равно $ b или они не одного типа.(введено в PHP 4)

Ссылка

0 голосов
/ 09 сентября 2011

В PHP и JavaScript (я не уверен в других языках, где допустим тройной синтаксис ===), разница в том, что === - строгое сравнение Пока == свободно. Это означает, что === сравнивает значение и тип, но == просто сравнивает значение. Прекрасным примером этого является глючный код PHP ниже:

$str = 'Zebraman stole my child\'s pet lime!';

// Search for zebra man
if(strpos($str, 'Zebraman')){
    echo 'The string contains "Zebraman"';
}else{
    echo 'The string doesn\'t contain "Zebraman"';
}

Пример здесь

Поскольку strpos($str, 'Zebraman') возвращает 0 (индекс строки Zebraman), а с 0 равно falsy. Этот код будет выводить The string doesn't contain "Zebraman". Правильный код использует строгое сравнение с ложным:

$str = 'Zebraman stole my child\'s pet lime!';

// Search for zebra man
if(strpos($str, 'Zebraman') !== false){
    echo 'The string contains "Zebraman"';
}else{
    echo 'The string doesn\'t contain "Zebraman"';
}

Пример здесь

См. Справочную страницу PHP по strpos

0 голосов
/ 09 сентября 2011

Я не знаю, верно ли это для всех языков, но в javascript === обозначает сравнение типов.

0 == false (true) 0 === false (false)

Общей ошибкой js не является использование === при сравнении ложного значения.

var a;

if(a) do something

(если a равно нулю, если не будет введено)

0 голосов
/ 09 сентября 2011

== будет проверять только значение (оператор равенства), где === также проверяет тип данных (оператор строгого равенства).

1 == '1' - true.
1 === '1' isfalse - первым является Integer, а вторым является String.

1 == true - true.
1 === true - false - первый - целое число, второй - логическое значение.

Обычно вы хотите использовать == (оператор равенства), но иногда вы хотите убедиться, что вещи имеют определенные типы.Я уверен, что кто-то может привести пример, я не могу вспомнить один из них, но я определенно использовал его.

...