비교 연산자

JavaScript는 엄격한 비교와 형변환 비교 두 가지의 비교 방법을 모두 가지고 있습니다. 엄격(일치) 비교(===)는 두 피연산자가 같은 자료형에, 그 내용도 일치해야만 참입니다. 추상(동등) 비교(==)는 비교 전에 두 피연산자를 동일한 자료형으로 변환합니다. 관계 추상 비교(<=)의 경우 원시값으로 바꾸고, 같은 자료형으로 다시 바꾼후 비교를 수행합니다.

문자열의 경우 유니코드 값을 사용한 사전순으로 비교합니다.

비교 연산의 특징은 다음과 같습니다.

  • 두 문자열이 같은 문자 시퀀스로 구성되고, 같은 길이를 가지며, 같은 위치에 같은 문자가 존재하면 일치합니다.
  • 두 숫자는 숫자로서 같은 값(같은 숫자 값)이면 일치합니다. NaN은 자기 자신을 포함한 그 무엇과도 동등하지 않습니다. +0-0은 서로 일치합니다.
  • 두 불리언은 둘 다 true거나 false이면 일치합니다.
  • 서로 다른 두 객체는 절대 일치하지도, 동등하지도 않습니다.
  • 객체를 비교하는 표현식은 두 피연산자가 동일한 객체를 참조하는 경우에만 참입니다.
  • nullundefined는 자기 자신과 일치하며, 서로 동등합니다.

동치 연산자

동등 연산자 (==)

동등 연산자는 두 피연산자의 자료형이 같지 않은 경우 같아지도록 변환한 후, 엄격 비교를 수행합니다. 피연산자가 모두 객체라면, JavaScript는 내부 참조를 보고, 둘 다 메모리의 같은 객체를 바라보고 있는지 판별합니다.

구문

x == y

예제

  1   ==  1        // true
 "1"  ==  1        // true
  1   == '1'       // true
  0   == false     // true
  0   == null      // false

  0   == undefined // false
null  == undefined // true

부등 연산자 (!=)

부등 연산자는 두 피연산자가 같지 않은 경우 참을 반환합니다. 피연산자의 자료형이 일치하지 않는 경우 적절한 자료형으로의 변환을 시도합니다. 피연산자가 모두 객체라면, JavaScript는 내부 참조를 보고, 서로 메모리의 다른 객체를 바라보고 있는지 판별합니다.

구문

x != y

예제

1 !=   2     // true
1 !=  "1"    // false
1 !=  '1'    // false
1 !=  true   // false
0 !=  false  // false

일치 연산자 (===)

일치 연산자는 자료형 변환 없이 두 연산자가 엄격히 같은지 판별합니다.

구문

x === y

예제

3 === 3   // true
3 === '3' // false

불일치 연산자 (!==)

일치 연산자는 두 연산자가 같지 않거나, 같은 자료형이 아닐 때 참을 반환합니다.

구문

x !== y

예제

3 !== '3' // true
4 !== 3   // true

관계 연산자

이 항목의 모든 연산자는 비교 전에 피연산자를 원시값으로 변환합니다. 둘 다 문자열이 되는 경우 사전순으로 비교하고, 그렇지 않으면 숫자로 변환합니다. NaN과의 비교는 항상 false를 반환합니다.

초과 연산자 (>)

초과 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 큰 경우 참을 반환합니다.

구문

x > y

예제

4 > 3 // true

이상 연산자 (>=)

이상 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참을 반환합니다.

구문

 x >= y

예제

4 >= 3 // true
3 >= 3 // true

미만 연산자 (<)

미만 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 작은 경우 참을 반환합니다.

구문

x < y

예제

3 < 4 // true

이하 연산자 (<=)

이하 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 참을 반환합니다.

구문

 x <= y

예제

3 <= 4 // true

동치 연산자 사용하기

표준 동치, 동등 연산자(==, !=)는 두 피연산자를 비교하기 위해 추상 동치 비교 알고리즘(Abstract Equlity Comparison Algorithm)을 사용합니다. 피연산자 간 자료형이 일치하지 않으면 우선 변환을 시도합니다. 예를 들어 표현식 5 == '5'에서는 비교 전 오른쪽 문자열을 Number로 변환합니다.

엄격 동치, 일치 연산자(===, !==)는 엄격 동치 비교 알고리즘(Strict Equality Comparison Algorithm)을 사용하며, 같은 자료형을 가진 피연산자를 비교하기 위해 사용합니다. 피연산자 간 자료형이 일치하지 않으면 항상 false이므로, 5 !== '5'입니다.

피연산자의 값은 물론 특정 자료형이어야 하는 경우 일치 연산자를 사용하세요. 그렇지 않은 경우 형변환을 자동으로 해주는 동등 연산자를 사용할 수도 있습니다.

비교 과정에 자료형 변환이 필요한 경우 JavaScript는 String, Number, Boolean, Object 자료형을 다음과 같이 변환합니다.

  • 숫자와 문자열을 비교할 땐 문자열을 숫자로 변환합니다. 우선, 문자열에서 수학적 값을 도출합니다. 그 후 가장 가까운 Number 자료형 값으로 반올림합니다.
  • 하나의 연산자가 Boolean인 경우, true1, false0으로 변환합니다.
  • 객체를 문자열이나 숫자와 비교하는 경우, JavaScript는 객체의 기본값을 사용합니다. 연산자는 우선 객체의 valueOf() 또는 toString() 메서드를 사용해 문자열 혹은 숫자 값을 받으려 시도합니다. 실패할 경우 런타임 오류가 발생합니다.
  • 객체를 원시값과 비교하는 경우에만 객체의 변환이 발생합니다. 두 연산자가 모두 객체인 경우 변환하지 않으며, 둘 다 같은 객체를 참조하는 경우 참을 반환합니다.
참고: String 객체는 자료형 객체지, 문자열이 아닙니다! String 객체는 거의 쓰이지 않으며, 이런 성질로 인해 아래의 결과는 예상치 못한 값일 수 있습니다.
// true as both operands are type String (i.e. string primitives):
'foo' === 'foo'

var a = new String('foo');
var b = new String('foo');

// false as a and b are type Object and reference different objects
a == b 

// false as a and b are type Object and reference different objects
a === b 

// true as a and 'foo' are of different type and, the Object (a) 
// is converted to String 'foo' before comparison
a == 'foo'

명세

Status
ECMAScript (ECMA-262)
The definition of 'Equality Operators' in that specification.
ECMAScript (ECMA-262)
The definition of 'Relational Operators' in that specification.

브라우저 호환성

No compatibility data found. Please contribute data for "javascript.operators.comparison" (depth: 1) to the MDN compatibility data repository.

같이 보기