Зачем нам нужен этот специальный оператор ===? - PullRequest
5 голосов
/ 20 сентября 2010

Я раньше использовал C ++ и Java, и у них нет этого оператора ===.

Почему они обходятся без него, но в таких языках, как PHP - его ключ.

Ответы [ 4 ]

10 голосов
/ 20 сентября 2010

На самом деле equals в Java и == в C # действуют так же, как === в php.Т.е. "24".equals(24) вернет false.

То, что java и C # не имеют эквивалента, это == PHP (то есть оператор / метод такой, что "24".fuzzyEquals( 24 ) вернет true).И это потому, что C # и Java строго типизированы, и такой оператор противоречит их философии.

3 голосов
/ 20 сентября 2010

Потому что PHP небезопасен.== сравнивает 2 значения, но === сравнивает значения И проверяет, совпадают ли их типы классов.

Я считаю, что "2" == 2 возвращает истину, а "2" === 2 возвращает ложь.

2 голосов
/ 20 сентября 2010

когда мы говорим "A равно B", это может означать несколько совершенно разных вещей

  • A и B - это одно и то же
  • A и B имеют одинаковое значение, то есть их значения не различимы для третьей стороны
  • A и B могут быть преобразованы в строки (или числа), которые равны
  • A и B имеют одинаковое хеш-значение

и т.д.

большинство языков имеют разные операторы или функции для различного рода равенства, см. http://en.wikipedia.org/wiki/Equality_%28relational_operator%29#Object_identity_vs._Content_equality

0 голосов
/ 20 сентября 2010

Точно так же, как вы знаете, это то же самое в JavaScript, и в соответствии с JSLint следует ВСЕГДА использовать в качестве проверки типа, что технически делает == избыточным. Но я думаю, это всего лишь личное предпочтение

...