비교 연산자
JavaScript는 엄격한 비교와 형변환 비교 두 가지의 비교 방법을 모두 가지고 있습니다. 엄격(일치) 비교(===
)는 두 피연산자가 같은 자료형에, 그 내용도 일치해야만 참입니다. 추상(동등) 비교(==
)는 비교 전에 두 피연산자를 동일한 자료형으로 변환합니다. 관계 추상 비교(<=
)의 경우 원시값으로 바꾸고, 같은 자료형으로 다시 바꾼후 비교를 수행합니다.
문자열의 경우 유니코드 값을 사용한 사전순으로 비교합니다.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
비교 연산의 특징은 다음과 같습니다.
- 두 문자열이 같은 문자 시퀀스로 구성되고, 같은 길이를 가지며, 같은 위치에 같은 문자가 존재하면 일치합니다.
- 두 숫자는 숫자로서 같은 값(같은 숫자 값)이면 일치합니다.
NaN
은 자기 자신을 포함한 그 무엇과도 동등하지 않습니다.+0
과-0
은 서로 일치합니다. - 두 불리언은 둘 다
true
거나false
이면 일치합니다. - 서로 다른 두 객체는 절대 일치하지도, 동등하지도 않습니다.
- 객체를 비교하는 표현식은 두 피연산자가 동일한 객체를 참조하는 경우에만 참입니다.
null
과undefined
는 자기 자신과 일치하며, 서로 동등합니다.
동치 연산자
동등 연산자 (==)
동등 연산자는 두 피연산자의 자료형이 같지 않은 경우 같아지도록 변환한 후, 엄격 비교를 수행합니다. 피연산자가 모두 객체라면, 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
관계 연산자
이 항목의 모든 연산자는 비교 전에 피연산자를 원시값으로 변환 (en-US)합니다. 둘 다 문자열이 되는 경우 사전순으로 비교하고, 그렇지 않으면 숫자로 변환합니다. 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
인 경우,true
는1
,false
는0
으로 변환합니다. - 객체를 문자열이나 숫자와 비교하는 경우, 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 for javascript.operators.comparison
.
Check for problems with this page or contribute missing data to mdn/browser-compat-data.