이 글은 편집 검토가 필요합니다. 도울을 줄 수 있는 방법을 살펴보세요.
자바스크립트는 strict 비교나, type-converting 비교가 가능하다. strict 비교 (e.g., ===
) 는 피연산자들이 같은 타입과 값 가질때 참이다. 더 일반적으로 사용되는 abstract(type-converting)비교 (e.g. ==
) 는 피연선자를 비교하기 전 먼저 같은 타입으로 바꾼다. 관계 abstract 비교 (e.g., <=
), 에서는,비교하기 전에 피연자는 가장 먼저 primitive들로 바꾸고, 같은 타입으로 바꾼다.
문자열은 유니코드 값을 사용해 표준 사서편집 (lexicographical) 상 순서에 따른다.
비교 연산의 특징:
- 두 문자열의 strictly equal은 두 문자열의 문자가 같은 순서를 가지고, 같은 길이를 가지고, 대응하는 위치의 문자가 같을 때 를 말한다
- 두 숫자의 strictly equal은 두 수가 숫자적으로 같을 때(값이 같을 때)를 말한다.. NaN은 NaN을 포함하여 어떤것과도 같지 않다, 음의 0, 양의 0는 같다.
- 두 부울 피연산자의 strictly equal은 둘다 참이거나 둘다 거짓인 경우를 말한다.
- 서로 다른 두 객체는 strict비교든 abstract비교든 같지 않다.
- 객체를 비교하는 표현은 오직 피연산자가 같은 객체를 참조한 경우만 참이다.
- NULL과 Undefined Type은 자기 자신과 strict equal이고 서로간엔 abstract equal이 적용된다.
일치연산자(Equality operators)
동등연산자 (==)
동등연산자는 만약 피연산자들이 서로 다르면 같은 타입으로 바꾼다, 그다음 strict 비교를 적용한다. 만약 두 피연산자 둘 다 객체라면, 자바스크립트가 메모리의 같은 객체를 참조 할 때 내부 내용을 비교하며, 두 피연자가 메모리의 같은 객체를 가리킨다면 두 객체를 같다고 한다.
Syntax
x == y
Examples
1 == 1 // true "1" == 1 // true 1 == '1' // true 0 == false // true 0 == null // false 0 == undefined // false null == undefined // true
부등 연산자(Inequality Operator) (!=)
부등연산자는 피연산자들이 같지 않는다면 참을 반환한다. 만약 두 피연자가 같은 타입이 아니라면, 자라바스크립트가 두 피연산자를 비교하기에 적당한 타입으로 바꾼다.만약 두 피연자가 객체라면, 자바스크립트가 내부 내용을 비교하며, 메모리의 다른 객체를 참조 할 때 다르다고 하며 참을 반환한다..
Syntax
x != y
Examples
1 != 2 // true 1 != "1" // false 1 != '1' // false 1 != true // false 0 != false // false
일치연산자(Identity / strict equality) (===)
일치연산자는 피연산자들이 타입 변환 없이 strictly equal일 때를 말한다.
Syntax
x === y
Examples
3 === 3 // true 3 === '3' // false
불일치 연산자(Non-identity / strict inequality) (!==)
불일치연산자는 같은 타입에서 값이 다르거나 다른 타입인 경우 참을 반환한다.
Syntax
x !== y
Examples
3 !== '3' // true 4 !== 3 // true
관계연산자(Relational operators)
크다 연산자(Greater than operator (>))
크다 연산자는 만일 왼쪽 피연산자가 오른쪽 피연산자보다 클 경우 참으로 반환한다.
Syntax
x > y
Examples
4 > 3 // true
크거나 동일한 연산자(Greater than or equal operator (>=))
크거나 동일한 연산자는 만일 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 동일할 경우 참으로 반환한다.
Syntax
x >= y
Examples
4 >= 3 // true 3 >= 3 // true
작다 연산자(Less than operator (<))
작다 연산다는 왼쪽 피연산자가 오른쪽 피연산자보다 작을 경우에 참을 반환한다.
Syntax
x < y
Examples
3 < 4 // true
작거나 같은 연산자(Less than or equal operator (<=))
작거나 동일한 연산자는 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 동일할 경우에 참을 반환한다.
Syntax
x <= y
Examples
3 <= 4 // true
일치연산자들 사용(Using the Equality Operators)
표준적인 일치연산자 (==
and !=
) 들은 두 피연산자들을 비교하기 위해 Abstruct Equlity Comparison Algorithm를 사용한다. 만일 피연산자들이 다른 타입이라면, 비교하기 전에 같은 타입과 e.g. 및 비교되기 전에 바꿔진 올바른 string과 5=='5'표현내부안에서 피연산자들을 같은 타입으로 바꿀 것이다.
strict 동등 연산은 (===
and !==
) Strict Equality Comparison Algorithm을 사용하고 피연산자들이 같은 타입일 때 동등 비교를 하도록 되어있다. 만약 피연산자들이 다른 타입이라면 결과는 항상 거짓이다. 따라서 5 !== '5
strict 동등 연산은 피연산자가 확실히 특정 값과 타입을 가져야 하거나 피연산자의 정확한 타입이 중요할 때 사용된다. 그렇지 않으면, 피연산자들의 타입이 달라서 사용 할 수 있는 표준 동등 연산자를 사용한다.
타입 변환이 비교하기 위해 먼저 사용 되어야 할 때(non-strict 비교할 때) (i.e., non–strict comparison), 자바스크립트는 String
, Number
, Boolean
, or Object
과 같은 타입의 피연산자를 다음과 같이 바꾼다
- 숫자와 문자열을 비교할 때, 문자열은 숫자값으로 바꿔진다. 자바스크립트는 문자열의 수치적 리터럴을 숫자 타입으로 바꾼다. 첫번째로 수학적 값은 문자열의 수치적 리터럴로부터 유도되어진다. 다음으로, 이 수학적 값은 가장 가까운 숫자 타입 값으로 반올림한다.
- 만약 숫자타입 값중 하나가 부울타입이라면, 부울 피연산자는 참일 때 1, 거짓일 때 0이 된다.
- 만약 객체가 숫자나 문자열과 비교된다면, 자바스크립트는 객체에 default 값을 반환한다. 연산자는 객체를 객체의 valueOF나 ToString을 이용한 primitive값으로 바꾼다.(문자열이나 숫자로)
만약 이런 객체의 변환이 실패한다면, 런타임 에러가 생겨난다. - 객체는 그것과 대응할 피연산자가 primitive일때에만 객체가 primitive로의 변환하는 것이 끝이라는 것을 주의하라.만약 두 피연산자가 객체라면, 그것들은 객체로서 비교되어질 것이다, 그리고 동등연산은 그 피연산자들이 같은 객체를 지명하고 있을 때만 참이 된다.
// 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'
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition (ECMA-262) | Standard | Initial definition. Implemented in JavaScript 1.0 |
ECMAScript 3rd Edition (ECMA-262) | Standard | Adds === and !== operators. Implemented in JavaScript 1.3 |
ECMAScript 5.1 (ECMA-262) | Standard | Defined in several sections of the specification: Relational Operators, Equality Operators |
ECMAScript 2015 (6th Edition, ECMA-262) | Standard | Defined in several sections of the specification: Relational Operators, Equality Operators |
ECMAScript 2017 Draft (ECMA-262) | Draft | Defined in several sections of the specification: Relational Operators, Equality Operators |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |