ECMAScript 등성 연산자
두 변수가 일치하는지 확인하는 것은 프로그램 설계에서 매우 중요한 연산입니다. 원시 값을 처리할 때는 이 연산이 매우 간단하지만, 객체를 처리할 때는 작업이 조금 복잡해집니다.
ECMAScript는 두 가지 등성 연산자를 제공합니다: 등호와 불 등호는 원시 값을 처리하고, 전체 등호와 전체 불 등호는 객체를 처리합니다.
등호와 불 등호
ECMAScript에서는 등호는 양수(double equal)로 표시되며, 두 연산자가 같다면 true를 반환합니다. 불 등호는 감叹號加上等于(!=)로 표시되며, 두 연산자가 다르다면 true를 반환합니다. 두 연산자가 일치하는지 확인하기 위해 이 두 연산자는 모두 형 변환을 수행합니다.
형 변환 규칙은 다음과 같습니다:
- Boolean 값이 연산자 중 하나라면, 일치성을 확인하기 전에 그 값을 숫자 값으로 변환합니다. false는 0으로, true는 1로 변환됩니다.
- 연산자 중 하나가 문자열이고 다른一个是 숫자이면, 일치성을 확인하기 전에 문자열을 숫자로 변환 시도합니다.
- 연산자 중 하나가 객체이고 다른一个是 문자열이면, 일치성을 확인하기 전에 객체를 문자열로 변환 시도합니다.
- 연산자 중 하나가 객체이고 다른一个是 숫자라면, 일치성을 확인하기 전에 객체를 숫자로 변환 시도합니다.
비교할 때, 이 연산자는 다음과 같은 규칙을 준수합니다:
- null과 undefined 값은 일치합니다.
- 일치성을 확인할 때, null과 undefined를 다른 값으로 변환할 수 없습니다.
- 연산자 중 하나가 NaN이면, 등호는 false를 반환하고, 불 등호는 true를 반환합니다.
- 두 연산자 모두 객체라면, 그들의 참조 값을 비교합니다. 두 연산자가 동일한 객체를 가리키면 등호는 true를 반환하고, 그렇지 않으면 두 연산자는 다릅니다.
중요 사항:두 수 모두 NaN이면, NaN이 NaN이 아니라는 규칙에 따라 등호는 false를 반환합니다.
아래 표는 특정 상황과 그 결과를 나열합니다:
표현식 | 값 |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
전체 등호와 비 전체 등호
전체 등호와 비 전체 등호는 전체 등호와 비 전체 등호와 같습니다. 이 두 연산자는 전체 등호와 비 전체 등호와 같은 작업을 수행하지만, 이들은 타입 변환 없이 일치성을 확인합니다.
전체 등호는 세 개의 등호로 표시됩니다(===)。타입 변환 없이 연산자가 일치할 때만 true를 반환합니다.
예를 들어:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // "true" 출력 alert(sNum === iNum); // "false" 출력
이 코드에서 첫 번째 alert는 문자열 "66"과 숫자 66을 비교하는 등호를 사용하여 "true"을 출력합니다. 이전에 설명한 것처럼, 이는 문자열 "66"이 숫자 66으로 변환되어 다른 숫자 66과 비교된 결과입니다. 두 번째 alert는 전체 등호를 사용하여 타입 변환 없이 문자열과 숫자를 비교합니다. 물론, 문자열은 숫자와 다르므로 "false"를 출력합니다.
비 전체 등호는 예쁘게 두 개의 등호와感叹호로 표시됩니다(!==)。타입 변환 없이 연산자가 다를 때만 true를 반환합니다.
예를 들어:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // "false" 출력 alert(sNum !== iNum); // "true" 출력
여기서, 첫 번째 alert는 비 등호로 문자열 "66"을 숫자 66으로 변환하여 두 번째 연산자 66과 같게 만듭니다. 따라서 계산 결과는 "false"입니다. 두 번째 alert는 비 전체 등호를 사용합니다. 이 연산은 "sNum"과 "iNum"이 다를지 물어보고 있습니다. 이 질문의答案是: 예스(true), لأن sNum은 문자열이고 iNum은 숫자이며, 그들은 당연히 다릅니다.