--- title: 비교 연산자 slug: >- conflicting/Web/JavaScript/Reference/Operators_310dc67549939233c3d18a8fa2cdbb23 tags: - JavaScript - Operator - Reference translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators original_slug: Web/JavaScript/Reference/Operators/Comparison_Operators ---
JavaScript는 엄격한 비교와 형변환 비교 두 가지의 비교 방법을 모두 가지고 있습니다. 엄격(일치) 비교(===
)는 두 피연산자가 같은 자료형에, 그 내용도 일치해야만 참입니다. 추상(동등) 비교(==
)는 비교 전에 두 피연산자를 동일한 자료형으로 변환합니다. 관계 추상 비교(<=
)의 경우 {{glossary("primitive", "원시값")}}으로 바꾸고, 같은 자료형으로 다시 바꾼후 비교를 수행합니다.
문자열의 경우 {{glossary("unicode", "유니코드")}} 값을 사용한 사전순으로 비교합니다.
비교 연산의 특징은 다음과 같습니다.
+0
과 -0
은 서로 일치합니다.true
거나 false
이면 일치합니다.동등 연산자는 두 피연산자의 자료형이 같지 않은 경우 같아지도록 변환한 후, 엄격 비교를 수행합니다. 피연산자가 모두 객체라면, 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
이 항목의 모든 연산자는 비교 전에 피연산자를 {{glossary("primitive", "원시값")}}으로 변환합니다. 둘 다 문자열이 되는 경우 사전순으로 비교하고, 그렇지 않으면 숫자로 변환합니다. {{jsxref("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'
에서는 비교 전 오른쪽 문자열을 {{jsxref("Number")}}로 변환합니다.
엄격 동치, 일치 연산자(===
, !==
)는 엄격 동치 비교 알고리즘(Strict Equality Comparison Algorithm)을 사용하며, 같은 자료형을 가진 피연산자를 비교하기 위해 사용합니다. 피연산자 간 자료형이 일치하지 않으면 항상 false
이므로, 5 !== '5'
입니다.
피연산자의 값은 물론 특정 자료형이어야 하는 경우 일치 연산자를 사용하세요. 그렇지 않은 경우 형변환을 자동으로 해주는 동등 연산자를 사용할 수도 있습니다.
비교 과정에 자료형 변환이 필요한 경우 JavaScript는 {{jsxref("String")}}, {{jsxref("Number")}}, {{jsxref("Boolean")}}, {{jsxref("Object")}} 자료형을 다음과 같이 변환합니다.
Number
자료형 값으로 반올림합니다.Boolean
인 경우, true
는 1
, false
는 0
으로 변환합니다.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 |
---|
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality Operators')}} |
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}} |
{{Compat("javascript.operators.comparison")}}