와의 차이는 무엇입니까?==
그리고.===
?
- 정확히 어떻게 루즈하게
==
비교 작업? - 정확히 어떻게 엄밀히 말하면
===
비교 작업?
어떤 유용한 예가 있을까요?
질문에 대한 답변
의 차이점==
그리고.===
느슨한 것의 차이==
equal 연산자와 strict===
동일한 조작자가 설명서에 정확하게 설명되어 있습니다.
비교 연산자
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------$a가 $b이고 같은 타입이면 │ $a === $b identical 동일한 TRUE입니다.│ └──────────┴───────────┴───────────────────────────────────────────────────────────┘
느슨하게==
동등한 비교
를 사용하고 있는 경우==
연산자 또는 다음과 같은 느슨한 비교를 사용하는 다른 비교 연산자!=
,<>
또는==
어떤 일이 일어나고 있는지 이해하기 위해 어떤 것이 무엇, 어디서, 왜 변환되는지를 보기 위해 항상 문맥을 살펴봐야 합니다.
규칙 변환
유형 비교표
참조 및 예로 설명서에서 비교 표를 볼 수 있습니다.
와의 비교가 불충분하다
==
"------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------FALSE true TRUE true TRUE true TRUE true FALSE false FALSE true TRUE │ FALSE false FALSE true FALSE false TRUE true TRUE false FALSE false FALSE true FALSE true TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE false TRUE FALSE false FALSE true TRUE true TRUE false TRUE true TRUE true TRUE false FALSE false FALSE false FALSE " FALSE " TRUE " TRUE true TRUE true TRUE " TRUE true TRUE true FALSE " FALSE " FALSE " FALSE " FALSE " FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE │ TRUE │ TRUE │ TRUE │ TRUE TRUE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE TRUE false FALSE false FALSE " "php" true TRUE false FALSE true FALSE true FALSE false FALSE false FALSE false FALSE false FALSE false FALSE false FALSE false FALSE false FALSE "" " FALSE false FALSE false TRUE "" TRUE "" TRUE │ TRUE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ │ FALSE │┴───────┘
엄격한.===
동일 비교
를 사용하고 있는 경우===
연산자 또는 다음과 같은 엄격한 비교를 사용하는 다른 비교 연산자!==
또는===
변환이 진행되지 않기 때문에 유형이 마법처럼 변경되지 않도록 항상 확인할 수 있습니다.따라서 엄밀한 비교에서는 값뿐만 아니라 유형과 값이 동일해야 합니다.
유형 비교표
참조 및 예로 설명서에서 비교 표를 볼 수 있습니다.
엄밀한 비교
===
"------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSEFALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSETRUE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE ▲ FALSE E true TRUE false FALSE false FALSE " " p " p " p FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE "" FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALSE 、 FALS┴───────┘
연산자 ==는 서로 다른 두 가지 유형을 캐스팅하고, === 연산자는 ‘typesafe 비교’를 수행합니다.즉, 두 오퍼랜드의 유형과 값이 동일한 경우에만 true가 반환됩니다.
예:
1 === 1: true 1 == 1: true 1 === "1": false // 1 is an integer, "1" is a string 1 == "1": true // "1" gets casted to an integer, which is 1 "foo" === "foo": true // both operands are strings and have the same value
경고: 동등한 멤버를 가진 같은 클래스의 두 인스턴스가 일치하지 않습니다.===
교환입니다.예:
$a = new stdClass(); $a->foo = "bar"; $b = clone $a; var_dump($a === $b); // bool(false)
천 마디 말보다 한 장의 사진이 더 낫다.
PHP 이중 동등==
등식 차트:
PHP 트리플 등가===
등식 차트:
다음 이미지를 만드는 소스 코드:
https://github.com/sentientmachine/php_equality_charts
구루 명상
제정신을 유지하고 싶은 사람은 더 이상 읽지 마십시오. 왜냐하면 PHP의 광기-프랙탈이 이렇게 설계되었다는 것 외에는 이 중 어느 것도 말이 되지 않기 때문입니다.
NAN != NAN
그렇지만NAN == true
.==
왼쪽이 숫자일 경우 왼쪽 및 오른쪽 피연산자가 숫자로 변환됩니다.그렇게123 == "123foo"
,그렇지만"123" != "123foo"
따옴표로 둘러싸인 16진수 문자열은 때때로 플로트일 수 있으며, 뜻에 반하여 플로트되어 런타임 오류가 발생합니다.
==
이행을 수반하지 않습니다."0"== 0
,그리고.0 == ""
그렇지만"0" != ""
아직 선언되지 않은 PHP 변수는 false입니다.PHP는 정의되지 않은 변수를 나타내는 방법을 가지고 있지만, 이 기능은
==
."6" == " 6"
,"4.2" == "4.20"
,그리고."133" == "0133"
그렇지만133 != 0133
.그렇지만"0x10" == "16"
그리고."1e3" == "1000"
이 깜짝 문자열의 8진수 변환이 지시 또는 동의 없이 발생하여 런타임 오류가 발생합니다.False == 0
,""
,[]
그리고."0"
.숫자에 1을 더하면 이미 최대값이 유지되고 있는 경우 해당 값은 반환되지 않고 대신 에 캐스팅됩니다.
infinity
.신규 클래스는 == 대 1입니다.
False가 가장 위험한 값인 이유는 False가 대부분의 다른 변수에서 ==이며 대부분 False의 목적을 무시하기 때문입니다.
희망:
PHP 를 사용하고 있는 경우는, double equals 연산자를 사용하지 말아 주세요.triple equals 를 사용하는 경우는, 데이터형의 최대치에 가까운 NAN 와 수치만이 걱정되기 때문입니다.이중 평등이 있으면 무엇이든 놀랄 수 있다.==
당신의 의지에 반해서 깜짝 놀랄 수 있다.!=
분명히 동등해야 할 것에 대해서요.
사용하는 장소==
PHP의 경우 85개의 버그가 암묵적인 캐스팅 규칙에 의해 노출되기 때문에 나쁜 코드 냄새입니다.이것은 브라운 모션에 의해 프로그래밍된 수백만 명의 프로그래머에 의해 디자인된 것으로 보입니다.
JavaScript에 대해서:
=== 연산자는 == 연산자와 동일하게 작동하지만 피연산자의 값이 같을 뿐만 아니라 데이터 유형도 같아야 합니다.
예를 들어, 아래 예제는 ‘x와 y는 동일’으로 표시되지만 ‘x와 y는 동일’으로 표시되지 않습니다.
var x = 4; var y = '4'; if (x == y) {
alert('x and y are equal'); } if (x === y) {
alert('x and y are identical'); }
오브젝트 비교에 관한 기타 답변:
==는 개체의 이름과 값을 사용하여 개체를 비교합니다.두 객체가 같은 유형이고 멤버 값이 같은 경우$a == $b
참된 결과입니다.
===는 개체의 내부 개체 ID를 비교합니다.멤버가 평등해도$a !== $b
동일한 객체가 아닌 경우.
class TestClassA {
public $a; }
class TestClassB {
public $a; }
$a1 = new TestClassA(); $a2 = new TestClassA(); $b = new TestClassB();
$a1->a = 10; $a2->a = 10; $b->a = 10;
$a1 == $a1; $a1 == $a2;
// Same members $a1 != $b;
// Different classes
$a1 === $a1; $a1 !== $a2; // Not the same object