Comparison operators

자바스크립트는 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로의 변환하는 것이 끝이라는 것을 주의하라.만약 두 피연산자가 객체라면, 그것들은 객체로서 비교되어질 것이다, 그리고 동등연산은 그 피연산자들이 같은 객체를 지명하고 있을 때만 참이 된다.
Note: String objects는 객체 타입이지 문자열 타입이 아니다!!  String objects는 잘 쓰이지 않기때문에 다음 결과는 놀랄만할 것이다. 
// 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)

See also

문서 태그 및 공헌자

 이 페이지의 공헌자: LEGOLLAS
 최종 변경: LEGOLLAS,