>  기사  >  웹 프론트엔드  >  자바스크립트에서 if와 switch, ==, ===의 차이점과 연결 예에 대한 자세한 설명

자바스크립트에서 if와 switch, ==, ===의 차이점과 연결 예에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-18 14:46:151442검색

이 글은 주로 JavaScript의 if와 switch, == 및 === 사이의 차이점과 연결을 소개합니다.

먼저 샘플 코드를 살펴보세요.


var a = '5';
switch (a) {
  case 5:
    console.log('==');
    break;
  case "5":
    console.log('===');
    break;
  default:
}

최종 콘솔 표시는 ===이므로 안심하고 사용하실 수 있을 것 같습니다.

1.if와 switch

if가 가장 일반적으로 사용되므로 할 말이 많지 않습니다. 주목할 만한 점은 if가 실제로 ||와 매우 유사하다는 것입니다. if (conditionA){} else {}의 조건A가 true인 경우 else 이전의 코드 블록을 실행한 후에는 else의 코드도 확인하지 않습니다. 앞에 ||가 true인 것과 마찬가지로 나중에 오류가 많아도 무시됩니다. 물론 이 속성을 바탕으로 가장 많이 사용할 수 있는 코드 블록을 앞에 배치하여 판단 횟수를 줄입니다. 반면, if 판단이 많고 실행 가능한 횟수가 상대적으로 고르게 분포된 경우 후속 판단 문은 매번 이전 판단을 하나씩 실행해야 하므로 최적화에 도움이 되지 않습니다. 더 나은 접근 방식은


if (a > 0 && a <= 1) {
  //do something
} else if (a > 1 && a <= 2) {

} else if (a > 2 && a <= 3) {

} else if (a > 3 && a <= 4) {

} else if (a > 4 && a <= 5) {

} else if (a > 5 && a <= 6) {

}...


if (a > 0 && a <= 4) {
  if (a <= 1) {
    //do something
  } else if (a > 1 && a <= 2) {

  } else if (a > 2 && a <= 3) {

  } else if (a > 3 && a <= 4) {

  }
} else if (a > 4 && a <= 8) {
  //
}..

 와 같이 1단계 판단문을 2단계 판단문으로 바꾸는 것입니다. 각각의 이전 판단이 한 번 더 추가되더라도 후속 판단은 줄어듭니다. 나는 (4-1)*n 번을 했는데도 여전히 많은 돈을 벌었습니다. 문득 이 방법은 중첩된 루프와 약간 비슷하다는 생각이 들었습니다. 적은 수의 루프로 루프를 외부에 두는 것이 성능을 최적화하는 데 도움이 될 수 있습니다. 두 개 또는 여러 개의 레이어로 나누는 방법은 특정 상황에 따라 다릅니다.

  스위치는 if의 가장 가까운 동료입니다. 스위치와 if 사이의 상호 변환에 대해서는 말할 것도 없을 것입니다. if와 마찬가지로 스위치는 위에서 아래로 순차적으로 판단을 실행합니다. 차이점은 if의 else가 스위치에서 작동하지 않는다는 것입니다. 부서지다 . 중단이 발생하지 않으면


var a = 2;
switch (a) {
  case 1:
    console.log("1");
    //break miss
  case 2:
    console.log("2");
  case 3:
    console.log("3");
  default:
    console.log(&#39;no break&#39;);
}

 와 같이 스위치가 계속 실행됩니다. 마지막으로 콘솔에는 2,3,no break 가 표시됩니다. 실제로 Break는 프로그램이 내부 실행 본문에서 벗어나 다음 사례 판단으로 이동하도록 유도하는 것으로, if(condition){A}{B}와 동일합니다. 물론, A와 B가 모두 실행됩니다. 두 가지 다른 작은 팁이 있습니다. 하나는


switch (A + B) {
  case a * b:
    console.log("1");
    break;
  case a / b + c:
    break;
    //...
  default:
    console.log(&#39;no break&#39;);
}

 와 같이 스위치와 대소문자에 어떤 식이든 작성할 수 있다는 것입니다. 실제 비교는 (A+B)===(a*b) 및 (A+B)입니다. ) ===(a/b+c). 둘째, 스위치에는


switch (true) {
  case condition1:
    //do something
    break;
  case condition2:
    break;
    //...
  default:
    //..
    ;
}

와 같은 특별한 사용법이 있습니다. 이때 스위치의 각 사례는 순서대로 판단되고 실행됩니다. 스위치(false)는 쓸모가 없나요?

2.== 및 ===

가장 고전적인 경우


var a = "5",
  b = 5;
a == b     //true
a === b     //false
var a = "ABC",
  b = "AB" + "C";
a === b     //true

 다음이 사실인 이유는 실제로 문자열 유형의 불변성과 분리될 수 없습니다. 표면적으로는 b가 단지 문자열을 연결한 것처럼 보이지만 실제로는 원래의 b와는 아무런 관련이 없습니다. 각 문자열은 메모리 풀의 특정 위치에 저장됩니다. b="AB"+"C"가 실행되면 문자열 AB와 C가 삭제되고 b는 메모리 풀에서 ABC의 위치를 ​​가리킵니다. 문자열 ABC가 가리키기 전에 메모리 풀에서 발견되었기 때문에(a가 그것을 참조하기 때문에 존재한다), 따라서 b는 a와 같은 영역을 가리키고 합동 판단은 같다. 문자열 ABC를 가리키는 b 앞에 변수가 없으면 메모리 풀에는 변수가 없으며 그 안에 ABC를 위한 공간이 할당되고 b는 ABC를 가리킵니다.

위 내용은 자바스크립트에서 if와 switch, ==, ===의 차이점과 연결 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.