2010-04-04 3 views
28

문자열과 스위치 케이스에이 문제가 있으며 가능한 한 간단하게 유지하려고 노력할 것입니다.Javascript의 문자열에 대한 스위치 케이스가 예상대로 작동하지 않습니다.

여기서 event.keyCode의 값은 "65"이며 keydown 이벤트의 결과는 'a'입니다 (JQuery 사용).

if (event.keyCode == "65") { 
    alert("hmmmm"); 
} 
작동

:하지만,하지 않습니다

switch (event.keyCode) { 
    case '65': 
     alert("Yay!"); 
     break; 
} 

.

switch ('65') { 
    case '65': 
     alert("Yay!"); 
     break; 
} 

을 그리고 내가 할 경우이 : 그러나이 작동합니다

var t = '65'; 
switch (t) { 
    case '65': 
     alert("Yay!"); 
     break; 
} 

그것은 작동합니다. 그리고 나서 다음을 시도했습니다 :

var t = event.keyCode; 
switch (t) { 
    case '65': 
     alert("Yay!"); 
     break; 
} 

하지만 실패했습니다!

그래서 처음에는 if 블록에서 일치하지만 스위치 케이스에서는 그렇지 않습니다.

+0

컨텍스트 테스트 란 무엇입니까? –

답변

58

keyCode은 문자열이 아니고 정수입니다. ==을 사용하면 암시 적으로 변환이 수행됩니다. 그러나 스위치는 암시 적 변환을 허용하지 않는 ===과 동일한 기능을 사용합니다. 다음을 사용하여 쉽게 테스트 할 수 있습니다.

switch (65) { 
    case '65': 
     alert("Yay!"); 
     break; 
} 

예상 한대로 경고하지 않습니다.

ECMAScript, 제 5 판 섹션 12.11 (switch 문)에 설명되어 있습니다. "input이 === 연산자에 정의 된대로 과 같으면 통역사가 사례 명세서를 입력합니다." 위 예제에서 은 65 (정수)이고 clauseSelector는 '65'(문자열)이며 ===이 아닙니다.

+0

맞아, 내가 비교할 때 (int == string) 충돌 할 때 익숙하다. 감사! – Coltin

+1

'switch (event.keyCode.toString())'가 올바르게 작동할까요? – GoodSp33d

+0

@ 2-Stroker, 그냥 숫자로 바로 전환하십시오. 그것은 더 빠를 수도 있습니다. –

관련 문제