JavaScript

비교

프로그래밍의 비교 기능은 이것만으로는 효용이 크지 않다. 후속 수업인 조건문에서 그 효용이 드러나기 때문에 조금 지루하더라도 조건문까지만 인내하자.

연산자

연산자란 값에 대해서 어떤 작업을 컴퓨터에게 지시하기 위한 기호인데 우리는 이미 연산자를 사용했다. 아래 예제 중에서 '='는 우항의 값인 1을 좌항의 변수 a에 대입하는 '대입 연산자'다. 본 수업은 연산자가 무엇인가에 대한 이해를 돕기 위한 것일 뿐 외울 필요는 없다. 차차로 알게 된다.

a=1

비교 연산자

프로그래밍에서 비교란 주어진 값들이 같은지, 다른지, 큰지, 작은지를 구분하는 것을 의미한다. 이 때 비교 연산자를 사용하는데 비교 연산자의 결과는 true나 false 중의 하나다. true는 비교 결과가 참이라는 의미이고, false는 거짓이라는 뜻이다. true와 false는 블린(boolean)이라고 불리는 데이터 형식인데 이것은 조건문에서 비중있게 다룰 것이다. 아래는 주요한 비교 연산자들의 종류와 그에 따른 예제들이다.

==

동등 연산자로 좌항과 우항을 비교해서 서로 값이 같다면 true 다르다면 false가 된다. '='가 두개인 것을 주의하자. '='가 하나인 것은 대입 연산자로 우항의 값을 좌항의 변수에 대입할 때 사용하는 것으로 의미가 완전히 다르다.

alert(1==2)           	//false
alert(1==1)           	//true
alert("one"=="two")   	//false 
alert("one"=="one")  	//true

===

일치 연산자로 === 좌항과 우항이 '정확'하게 같을 때 true 다르면 false가 된다. 여기서 정확하다는 말의 의미에 집중하자. 아래 예를보자.

alert(1=='1');           	//true
alert(1==='1');           	//false

위의 결과는 이상하다. '==='는 숫자 1과 문자 1을 다르게 인식한다. 반면에 '=='는 양쪽의 값을 같다고 판단한다. 바로 이것이 '정확'의 의미다. 즉 ===는 서로 같은 수를 표현하고 있더라도 데이터 형이 같은 경우에만 같다고 판단하기 때문이다. 결론부터 말하면 == 연산자 대신 === 연산자를 쓰는 것을 강력하게 권한다. 몇가지 사례를 더 살펴보자.

alert(null == undefined);       //true
alert(null === undefined);	    //false
alert(true == 1);		        //true
alert(true === 1);	        	//false
alert(true == '1');	        	//true
alert(true === '1');	    	//false

alert(0 === -0);		        //true
alert(NaN === NaN);	            //false

null과 undefined는 값이 없다는 의미의 데이터 형이다. null은 값이 없음을 명시적으로 표시한 것이고, undefined는 그냥 값이 없는 상태라고 생각하자.

NaN은 0/0과 같은 연산의 결과로 만들어지는 특수한 데이터 형인데 숫자가 아니라는 뜻이다.

!=

'!'는 부정을 의미한다. '같다'의 부정은 '같지 않다'이다. 이것을 기호로는 '!='로 표시한다. 아래의 결과는 !=의 결과인데 ==와 정반대의 결과를 보여준다.

alert(1!=2);    		//true
alert(1!=1);			//false
alert("one"!="two");	//true
alert("one"!="one");	//false

!==

'!=='는 '!='와 '=='의 관계와 같다. 정확하게 같지 않다는 의미다. 예제는 생략한다.

>

좌항이 우항보다 크다면 참, 그렇지 않다면 거짓임을 알려주는 연산자다. '<'는 반대의 의미로 언급은 생략하겠다.

alert(10>20);   //false
alert(10>1);    //true
alert(10>10);   //false

>=

좌항이 우항보다 크거나 같다. '<='는 반대의 의미로 언급은 생략하겠다.

alert(10>=20);      //false
alert(10>=1);       //true
alert(10>=10);      //true

참고

댓글

댓글 본문
작성자
비밀번호
  1. 김진홍
    감사합니다~~
  2. Jupi
    -정리-

    비교(Comparison) - 둘 이상의 사물을 견주어 서로 간의 유사점, 차이점, 일반 법칙 따위를 고찰하는 일.
    연산자(Operator) - 어떤 작업을 컴퓨터에게 지시하기 위한 기호.

    -> 비교연산자(Comparison operator) 사물을 비교하도록 컴퓨터에게 지시하는 기호.

    기본으로 기준은 좌항

    = 대입연산자 (Assignment Operator) ##비교연산자아닌 연산자의 한종류##

    - 비교연산자
    == 동등연산자 (equal operator)
    === 일치연산자 (strict equal operator)
    != 부등연산자 (inequality)
    !== 불일치연산자 (strict inequality)
    > Greater than operator
    >= Greater than or equal operator
    < Less than operator
    <= Less than or equal operator

    ==,===의 차이
    만약 ==을 써 정밀하고 거대한 프로그램을 만들경우,
    데이터타입의 차이로 인해 Boolean 오류가 날수 있다.
    즉, ===을 쓰면 그런 위험을 피할 수 있다. 그냥 === 쓰자.
  3. 단이
    -
  4. 박인호
    12-06
    수강완료.
  5. 도레미
    잘 보고 갑니다
  6. 시니치123
    잘 보고 있습니다. 감사합니다~
  7. 뉴비
    강의 1분 55초에 좌항에 있는 값을 우항에 대입한다. 라고 하셨는데, 우항에 있는값을 좌항에 대입하는것이 아닌가요?
  8. alert("감사"+"합니다.\nto 이고잉\'s생활코딩");
  9. 이병학
    감사합니당
  10. 헬리사우드
    0과 1을 제외한 숫자를 불린으로 사용할때는 NaN이라서 False값이 나오는것 아닌가요?
    0은 false 1은 true라고 정의했지만 나머지 숫자들은 정의가 되지 않았기때문에 불린으로 사용할수 없어서 연산오류(NaN)이 나오고 연산오류는 존재할때 모든 비교의 결과를 false로 만드니
    2 == false(2 === false)의 결과가 NaN==false(NaN === false)로 데체되어 false의 값이 나오는것으로 생각됩니다.
    ---------------------------------------------------------------------2차수정
    실제 테스트 결과입니다.
    > var a = 2 == false;
    > var b = NaN == false;
    > alert ( a === b ); //true
    > alert ( 2 == false === NaN == false ); //true
    이러한 결과가 나왔습니다.
  11. GoldPenguin
    완료했습니다.
  12. 수복
    잘 보았습니다. Nan에 대한 설명이 너무 간단하지 않았나 싶네요. 책에서는 조금 강조해서 나오더라구요. 다른 언어에는 없는 거라서 그런지... 그래도 궁금한 사람은 찾아서 볼 거 같아요! 감사합니다!
  13. 이성준
    잘봤습니다
  14. 렙쉽
    Nan 의 의미가 계산할 수 없는 거잖아요~!!!

    결과는 Nan 이라고 같지만 그 계산할 수 없는 수가 다양하니까
    false 아닐까요??
    Nan 이 까지 나오는 데이터 형식이 달라서..? 아닐까요?ㅎㅎㅎㅎㅎㅎ
    대화보기
    • 최명수
      그럼 왜 ' Nan == Nan '이 'false'인가요?
    • 아이노바
      가슴으로 말합니다. 너무 감사합니다.
    • 포카리40932
      === 의 경우는 데이터형이 같을 때만 같다고 판단하는군요.ㅎㅎ
      ===, !== 이러한 기호는 이번에 처음 알게되었네요!
    • 은하수
      잘듣고 잘 보았습니다. 감사합니다.
    • 무소유 와 무소유가 되는 마음가짐
      오....
      이런 생각을 하시다니 대단하십니다
      대화보기
      • harukayuki
        아웅 귀에 아주 쏙쏙 잘들어와유
      • 윰미
        영상 다시 보고오세요
        대화보기
        • 고등학생
          제가 알기로는 0은 거짓이기 때문에 false 이고,1은 참이기 때문에 true입니다.
          0과 1을 제외한 숫자는 모두 참으로 보기 때문에 이 또한 true 입니다.
          대화보기
          • 이슬기
            제가 알기로는 컴퓨터 프로그램에서 false =0, true=1이라는 데이터 값을 가진다라고 알고 있는데요
            0과1을 제외한 숫자들은 false와 true로 정의 할수 없기에 true == , false == 라는 두값에 모두 false라는 값을 내리지 않았나 생각이 드네요
            다른 분들은 어떻게 생각 하시나요?
            대화보기
            • 2017-07-20
              정성스러운 강의, 감사합니다!
            • Seo Yun Seok Tudoistube
              모두 false 인것들
              null === undefined
              true === 1
              NaN === NaN

              그런데, 0 === -0 만 true 인걸

              오늘 알았고 아주 철학적인 정의 같습니다.

              내가 비워둔 것과 당신에게 미지의 것은 서로 다르고,
              내게 참인 것이 당신에게도 참은 아니며,
              내게는 셀수 없는 것이 당신에도도 셀수 없는것은 아니고,

              오직 더 갖지 않겠다는 무소유의 내 마음과
              하나씩 내려놓겠다는 무소유의 당신의 마음만이 같다.

              감사합니다^_____^!!!
            • 고베베
              연산자 공부 끝!! 책으로 한번 정리하고 제어문 공부해야겠어용~~
            • 장석규
              2017/04/21 완료
            • 이ㄹ ㅣ ㄴr
              20170418
            • 20170403 완료
            • 최규선
              20170304수강완료
            • 이승우
              20170330완료
            • SangHyeok Kim
              2017/03/24 수강완료
            • 임성민
              수강 완료
            • 김세창
              수강완료~!
            • 김원중
              다음 시간이 기대 됩니다
            • 첫답글
              저도 그부분이 헷갈려서 테스트 해봤는데 아마도 설명하실때
              alert(true == 1) //true
              alert(true == 2) //false
              alert(true == 3) //false
              이렇게 true랑 상수를 비교하는 부분에서
              1을 제외한 숫자는 false의 값이 출력된다는걸 말하시는거 같아요.
              대화보기
              • Ruin09
                다른 언어를 배우다 본 바로 equal 과 strict equal 은 진짜 괴이해보이네요...
                어떨 때 equal 인지 아닌지 정확히 알지 않고는 == 의 사용은 확실히 어려워 보입니다.
                Content 로 equal 을 따지는 자바스크립트의 문법의 장점이 있나해서 찾아보니 아래와 같이 나오네요.
                혹시 궁금하신 분은 참조하세요.

                http://softwareengineering.stackexchange.com......nse
              • 연금이
                2017.01.10 수강완료

                핵심은 ===, !== 의 활용방안
                기존 타입을 맞추기위해 변수타입을 동일하게 놓고 비교했는데
                해당 비교연산자들로 활용가능 예상
              • 폭스킴
                컴퓨터에는 엄격하고, 사람에겐 관대한 사람이 됩시다~ **(=== 일치 연산자 )**
              • 임지호
                비교 연산자 : 좌항, 우항을 비교할 때 쓰는 연산자
                - 대입 연산자(=) : 우항의 값을 좌항에 대입할 때 사용
                - 동등 연산자(==) : 좌항, 우항의 값이 같으면 true, 다르면 false(실질적인 정보의 값을 비교)
                - 일치 연산자(===) : 위와 내용은 같음(데이터 형식까지 엄격하게 비교, 동등보다는 이것을 쓰는 것을 권장)
                - undefined : 의도하지 않은 값 없는 상태, null : 의도한 값 없는 상태
              • HEEYA
                3번째 강의의 6:26 쯤에서 1이 아닌 수를 false로 간주한다고 하시는데,
                0만 false로 간주하지 않나요?
                실제로 test를 해보면

                alert(false == 2); // false
                alert(false == 0); // true

                라고 나옵니다 :D!
              • hoho
                감사합니다!!!
              • 완료!
                완료! 감사합니다.
              • 솔군
                2016.10.06 강의 시청
              • 비티민C플러스
                해당 영상 우측하단 설정에서 변경가능합니다.
                대화보기
                • 강부장짤
                  1.5베 속도로 듣는거 어떻게 하는 건가요?
                • wonhee lee
                  ==와 ===의 차이 궁굼해서 구글링해서도 못찾았는데 드디어 알게되었네요!
                • 동찜
                  감사합니다
                • 김철수
                  1.5배속으로 강의를 듣는 사람입니다.
                  오늘 처음 정속으로 들어보고 목소리가 좋으시구나 느꼈습니다.
                • yihsang
                  감사합니다.
                버전 관리
                egoing
                현재 버전
                선택 버전
                graphittie 자세히 보기