티스토리 뷰

=== 연산자가 두 값이 일치하는지 아닌지 판단하는 데에는 다음과 같은 규칙들을 따른다.

  • 두 값의 타입이 다르다면 두 값은 일치하지 않는다.
  • 두 값이 모두 숫자이고 값이 같다면 두 값은 일치한다. 단, 적어도 하나의 값이 NaN일 경우 두 값은 일치하지 않는다. NaN값은 어느 값과도 일치하지 않는다. 어떤값이 NaN인지 확인하려면 전역 함수인 isNaN()을 사용하라.
  • 두 값이 모두 문자열이고 같은 위치에 정확히 같은 문자들을 갖고 있다면 두 값이 일치한다. 만일 문자열의 길이나 내용이 다른 경우 두 값은 일치하지 않는다. 몇몇 경우 Unicode 표준에서 한 문자열을 인코딩 하는 방법이 두 가지 이상일 수 있음을 유의하라. 하지만 자바스크립트에서 효율성을 위해 엄격히 문자 대 문자 비교의 원칙으로 문자열을 비교하며, 모든 문자열은 비교되기 이전에 '정규 형식'으로 변환되어 있다고 가정한다.
  • 두 값이 모두 불리언 값 true인 경우, 또는 두 값이 모두 불리언 값 false인 경우, 두 값은 일치한다.
  • 두 값이 같은 객체, 배열 또는 함수를 참조할 경우 두 값이 일치한다. 만일 두 값이 서로 별개의 객체를 참조할 경우 두 값은 일치하지 않는다. 설사 두 객체의 프로퍼티가 일치하거나 두 배열의 원소가 일치한다고 하더라고 마찬가지다.
  • 두 값이 모두 null일 경우, 또는 두 값이 모두 undefined일 경우, 두 값은 일치한다.


== 연산자가 두 값이 동등한지 아닌지 판단하는 데에는 다음의 규칙들을 따른다.

  • 두 값의 타입이 같은 경우 두 값이 일치하는지 테스트 한다. 두 값이 일치할 경우 그 둘은 동등하다. 두 값이 일치하지 않는 경우 동등하지 않다.
  • 두 값의 타입이 다른 경우라 할지라도 동등할 여지가 있다. 동등함을 확인하는 과정에는 다음 규칙과 타입 변환이 사용된다.
    • 두 값 중에 하나가 null이고 다른 하나가 undefined라면 두 값은 동등하다.
    • 한 값이 숫자이고 다른 하나는문자열이면, 문자열을 숫자로 변환한 후에 이 를 사용해 다시 비교한다.
    • 두 값 중 하나가 true이면, 이를 1로 변환한 후 다시 비교한다. 두 값 중 하나가 false이면, 이를 0으로 변환한 후 다시 비교한다.
    • 한 값이 객체이고 다른 하나는 숫자 또는 문자열이면, 객체를 기본 타입의 값으로 변환한 후 다시 비교한다. 객체를 기본값으로 변환하는 데에는 해당 객체의 toString()메서드나 valueOf()메서드가 사용된다. 코어 자바스크립트 내장 클래스에서 toString() 변환을 적용하기 전에 valueof()변환을 시도한다. 단, Date클래스는 예외적으로 toString() 변환을 바로 수행한다. 코어 자바스크립트에 속하지 않는 객체에서는 각 구현에서 정의한 방식으로 기본값 변환을 수행한다.
  • 위에 열거하지 않은 기타 값들의 조합은 동등하지 않다.


>=, <=

  • 두 피연산자가 모두 숫자이거나 또는 둘 다 숫자로 변환할 수 있으면 이 둘은 숫자로 비교된다.
  • 두 피연산자가 모두 문자열이거나 또는 둘 다 문자열로 변환할 수 있으면 이 둘은 문자열로 비교된다.
  • 한 피연산자는 문자열이고 다른 하나는 숫자라면, 비교 연산자는 먼저 문자열을 숫자로 변환하여 이들을 숫자로서 비교하려 시도할 것이다. 만일 여기서 문자열이 나타내는 것이 숫자가 아니라면, 이 문자열은 NaN으로 변환된 후 비교 결과는 false다.
  • 어떤 객체를 숫자나 문자열로 변환할 수 있으면 자바스크립트는 숫자 변환을 수행한다. 이 말은 예를 들면 Date 객체는 숫자로서 비교된다는 것을 뜻한다. 두 날짜 중 어느 것이 더 앞서는지 확인할 경우가 있을 테니 Data를 수사로서 비교하는 것이 말이 된다.
  • 비교 연산자의 피연산자가 숫자나 문자열로 변환되지 못할 경우엔 언제나 false를 반환한다.
  • 둘 중 하나의 피연산자가 NaN이거나 NaN으로 변환된다면 비교 연산자는 언제나 false를 반환한다.





[출처] http://youall-textcube.blogspot.kr/2010/04/javascript.html

댓글