하나의 등호는 할당의 기능입니다. 주요 문제는 두 개와 세 개의 등호 사이의 차이에 있습니다.
자바스크립트에서 등호 2개와 등호 3개 차이
간단히 말하면 == 유형을 먼저 변환한 다음 비교하고, === 유형이 같지 않으면 먼저 유형을 결정합니다. 직접적으로는 거짓입니다.
=== 동등함을 의미하며 비교의 양쪽이 완전히 동일해야 합니다.
alert(0 == "") // true
alert(0 == false) / / true
alert("" == false); // true
alert(0 === "") // false
alert(0 === false) // false
alert("" === false); // false
먼저 ===에 대해 이야기해 보겠습니다. 구체적인 비교 규칙은 다음과 같습니다.
1. 유형이 다릅니다. [같지 않음]
2. 둘 다 숫자 값이고 동일한 값인 경우 [같음](!Exception)은 둘 중 하나 이상이 NaN인 경우입니다. 동일한]. (값이 NaN인지 확인하려면 isNaN()만 사용하면 됩니다.)
3. 둘 다 문자열이고 각 위치의 문자가 동일하면 [같음]이고, 그렇지 않으면 [같지 않음]입니다.
4. 두 값이 모두 참이거나, 둘 다 거짓이면 [같음]입니다.
5. 두 값이 모두 동일한 개체나 함수를 참조하는 경우 [같음]이고, 그렇지 않으면 [같지 않음]입니다.
6. 두 값이 모두 null이거나 둘 다 정의되지 않은 경우 [같음]입니다.
구체적인 비교 규칙은 다음과 같습니다.
1. 두 값 유형이 동일한 경우 === 비교를 수행합니다.
2. 두 값 유형이 다른 경우에는 동일할 수 있습니다. 유형 변환을 수행한 후 다음 규칙에 따라 비교합니다.
a. 하나는 null이고 다른 하나는 정의되지 않은 경우 [같음]입니다.
b. 하나는 문자열이고 다른 하나는 숫자 값인 경우 문자열을 숫자 값으로 변환한 후 비교합니다.
c. 값이 true이면 1로 변환하고, false이면 0으로 변환하여 비교합니다.
d. 하나는 객체이고 다른 하나는 숫자 값이나 문자열인 경우 객체를 기본 유형의 값으로 변환한 후 비교합니다. 객체는 toString 또는 valueOf 메소드를 사용하여 기본 유형으로 변환됩니다. JS 핵심 내장 클래스는 toString 전에 valueOf를 시도합니다. 예외는 toString 변환을 사용하는 Date입니다. (더 귀찮고 잘 이해가 안 가네요)
e와 같은 비-js 핵심 객체와 다른 조합(배열 배열 등)은 [같지 않음]입니다.
사람이 방법을 찾을 수 없을 때 가장 좋은 방법은 그 순간 잘 할 수 있는 일을 누구도 할 수 없을 정도로 극한까지 하는 것이다.