2011-04-14 7 views
1

운영자에게 약간의 문제가 있습니다. 키 입력에 따라 빼거나 빼는 숫자가 있습니다. 이상한 것은 연산자 + = 1과 + = 11이 정적 숫자에 숫자를 문자 그대로 더하는 것입니다. 60은 61과 71 대신 601과 6011이됩니다.이상한 자바 스크립트 운영자

여기 코드는 고정되어 있으므로 숫자는 60입니다 :

switch(e.keyCode) { 
    case 37: 
     boxID -= 1; 
     break; 
    case 38: 
     boxID -= 11; 
     break; 
    case 39: 
     boxID += 1; // Becomes 601 
     break; 
    case 40: 
     boxID += 11; // Becomes 6011 
     break; 
} 
+1

어떻게 boxID를 정의합니까? javascript 런타임은 문자열이라고 생각합니다 – Jason

+0

ID가 목록 항목의 번호 60 인 boxID를 정의했습니다. var boxID = $ ('li.selected'). attr ('id'); ' – Jonathan

+1

cwolves advice var boxId = parseInt ($ ("li.selected"). attr ("id")) – Jason

답변

11

boxId은 귀하의 경우 문자열입니다. 첫째 parseInt(boxId)하거나 boxId << 0

-= 작품에만 (수학을 사용하여 차감) 한 기능을 가지고 있기 때문에, 그래서 boxId가 작동하기 전에 숫자로 캐스팅 인 이유를 사용하여 숫자로 변환합니다. +은 JavaScript에서 "문자열 연결 또는 수학 추가"를 의미하기 위해 오버로드되어 있으므로 boxId이 문자열 일 경우 문자열 연산을 수행합니다.

+0

제안 사항이 정상적으로 처리되었습니다. 감사. – Jonathan

+3

선택적 radix 매개 변수를 사용하고 대신'parseInt (boxId, 10)'을 수행하십시오. 이것은 "010"을 8 진수로 취급하지 않습니다. – hugomg

+1

+1 항상 자바 스크립트에서 비트 시프트하는 것을 좋아합니다.) –

관련 문제