2013-07-28 2 views
2

저는 방금 자바 스크립트를 배우기 시작했고 저는 C#에서 기본적인 지식을 가지고 있습니다. 조건을 사용하는 자바 스크립트 스위치 케이스

코드의 조각을 실행 시도 :

var number = parseInt(prompt("Enter a number:")); 
    switch(number) 
     { 
      case number >= 1 && number <= 9: alert("The number " + number + " is a single digit number."); break; 
      case number >= 10 && number <= 99: alert("The number " + number + " is a two digit number."); break; 
      case number >= 100 && number <= 999: alert("The number " + number + " is a three digit number."); break; 
      case number >= 1000 && number <= 9999: alert("The number " + number + " is a four digit number."); break; 
      default: alert("Your number has 5 or more digits."); 
     } 

을하지만 이후에 실패 유지 - 너희들이 여기 좀 도와주세요 수

number <= 9 

?

고맙습니다.

+1

스위치/케이스는 조건으로 사용되지 않습니다. –

+0

if/else를 사용하는 것과는 어떻게 다르게 할 수 있습니까? 고마워! – GalSab

+0

스위치 케이스에서 조건을 사용할 수 있습니다. –

답변

6

switch 문은 해당 인수를 사례의 표현식 값과 비교합니다. 코드에서 number은 사례의 불리언 결과와 비교되므로 number이 첫 번째 경우에만 나타납니다. 1 (1 == true)이므로 default이됩니다. 당신은 단순히

switch(true) 
    { 
     case number >= 1 && number <= 9: alert("The number " + number + " is a single digit number."); break; 
     case number >= 10 && number <= 99: alert("The number " + number + " is a two digit number."); break; 
     case number >= 100 && number <= 999: alert("The number " + number + " is a three digit number."); break; 
     case number >= 1000 && number <= 9999: alert("The number " + number + " is a four digit number."); break; 
     default: alert("Your number has 5 or more digits."); 
    } 

처럼 true로 비교할 수 있지만,이 경우 - 다른 구조를 사용하는 청소기 될 것이다 : Btw는

if(number >= 1 && number <= 9) 
    alert("The number " + number + " is a single digit number."); 
else if(number >= 10 && number <= 99) 
    alert("The number " + number + " is a two digit number."); 
else if(number >= 100 && number <= 999) 
    alert("The number " + number + " is a three digit number."); 
else if(number >= 1000 && number <= 9999) 
    alert("The number " + number + " is a four digit number."); 
else 
    alert("Your number has 5 or more digits."); 

을 훨씬 짧은이 될 것

var l = String(number).length; 
alert(l<5 
    ? "The number "+number+" is a "+[,"single","two","three","four"][number]+" digit number." 
    : "Your number has 5 or more digits." 
); 
+1

이 방법으로 스위치를 사용하는 것의 유일한 이점은 케이스가 다른 케이스에 떨어지는 것을 허용하려는 경우입니다. 그렇지 않으면 if/else와 성능 차이가 없으며 가독성이 뒷좌석이됩니다. –

+0

예 :-) 유일한 다른 이점은 현재 코드에서 최소한의 변경이 필요하다는 것입니다. – Bergi

+0

Bergi, 솔루션은 매력처럼 작동합니다. 인수가 사실인지 여부를 확인하도록 알리는 것이 합리적입니다. 고맙습니다. – GalSab

1

전환 (true)이 필요하고 나머지는 동일하게 유지됩니다 (추측).

+0

그래, 그거야! 고맙습니다. – GalSab

0

마 그것은 if/else를 사용하여 다음과 같이 사용합니다.

if(number >= 1 && number <= 9) 
    alert("The number " + number + " is a single digit number."); 
else if(number >= 10 && number <= 99) 
    alert("The number " + number + " is a two digit number."); 
else if(number >= 100 && number <= 999) 
    alert("The number " + number + " is a three digit number."); 
else if(number >= 1000 && number <= 9999) 
    alert("The number " + number + " is a four digit number."); 
else 
    alert("Your number has 5 or more digits."); 

또는 조건이 부울 표현식과 비교되므로 switch(true)을 사용해보십시오.

+0

그래, 일찍이 저를 위해 일했습니다. 그냥 다른 방법으로보고 싶었습니다. 고맙습니다! – GalSab

+0

고맙습니다. 제 대답에도 투표하십시오. @ user2628004 –

1

지금까지 다른 모든 대답이 누락 된 이유는 이러한 모든 조건이 필요하지 않다는 사실입니다.

if (number >= 10000) { 
    ... 
} else if (number >= 1000) { 
    ... 
} else if (number >= 100) { 
    ... 
} else if (number >= 10) { 
    ... 
} else if (number >= 1) { 
    ... 
} else { 
    ... 
} 

물론 다른 방법이 있습니다. 이 특정 예를 들어, 쉬운 방법은 단순히 0 될 것입니다 음수의 자릿수가 될 것입니다 양의 정수를 들어

var digits = (number >= 0) ? number.toString().length : 0; 

을 사용하는 것입니다. 이 번호에 대한 스위치/사례 문이 가능합니다.

switch(true)은 끔찍한 스타일입니다. 단순히 스위치/케이스가 의도 한 것이 아닙니다.

관련 문제