자바스크립트 / if문 안에 조건 ?

조회수 1399회
  if (!selectedMarker || selectedMarker !== marker) {

    // 클릭된 마커 객체가 null이 아니면
    // 클릭된 마커의 이미지를 기본 이미지로 변경하고
    !!selectedMarker && selectedMarker.setImage(redMarker) && infowindow.close()

    // 현재 클릭된 마커의 이미지는 클릭 이미지로 변경합니다
    marker.setImage(purpleMarker);
    infowindow.open(map, marker);

  }

if문 안에 " !!selectedMarker && selectedMarker.setImage(redMarker) && infowindow.close()"가 조건문이 없는데 뭔가 조건문처럼 동작하는 것 같아서 궁금합니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 자바스크립트의 if 조건부의 코드는 모두 불리언 타입으로 변환됩니다.

    질문하신 코드의 경우

    if (!selectedMarker || selectedMarker !== marker)

    연산자 우선순위에 따라 다음처럼 작동합니다

    좌변의 selectedMarker를 불리언으로 변환하고 반전합니다. 결과는 true 혹은 false입니다.

    우변의 selectedMarker가 marker와 엄밀히 불일치하는지 판단합니다. 결과는 true 혹은 false입니다.

    1과 2에서 평가된 불리언값 둘을 OR 연산합니다. 결과는 true 혹은 false입니다.

    selectedMarker 변수에 뭐가 들어있는지 몰라서 제 맘대로 예를 들어보면요:

    var selectedMarker = 'wassup'; if (selectedMarker)

    위 코드는 실제로

    var selectedMarker = 'wassup'; if (true)

    이렇게 됩니다. (string 타입이며 nullstring이나 공백이 아닌경우 true로 변환)


    !!selectedMarker && selectedMarker.setImage(redMarker) && infowindow.close()
    

    위 코드는 다음처럼 작동합니다.

    1. selectedMarker를 불리언으로 변환하고 두 번 반전합니다. 바로 다음에 오는 연산자가 AND 연산자이므로 selectedMarker가 true로 변환되면 && 우변을 평가합니다.(2번으로) 만약 false면 && 우변을 평가하지 않습니다. (종료)

    2. selectedMarker.setImage(redMarker) 메서드를 호출하고 메서드가 반환한 값을 불리언으로 변환합니다. 여기도 바로 다음에 오는 연산자가 AND 연산자이므로 메서드 반환값이 true로 변환되면 && 우변을 평가합니다. (3번으로) 만약 false면 && 우변을 평가하지 않습니다. (종료)

    3. infowindow.close() 메서드를 호출합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)