JS가 두 개의 문자열을 합치는 대신 수학을 강제하는 방법


102

정수 변수에 5를 추가하려면 자바 스크립트가 필요하지만 대신 변수를 문자열로 취급하므로 변수를 작성한 다음 "문자열"끝에 5를 추가합니다. 대신 수학을 강요 할 수 있습니까?

var dots = document.getElementById("txt").value; // 5
function increase(){
    dots = dots + 5;
}

산출: 55

강제로 출력하려면 10어떻게해야합니까?


3
이 특정 예제는 10을 출력합니다.
deceze


10
당신은 코드를 깎아 내리려고하지 않고 모든 코드를 덤프함으로써 당신을 돕고 자하는 사람들에게 과도한 부담을가했습니다. 직접 테스트 해보세요 ... CSS 속성이 #control문제에 영향을 미칩니 까? 그렇지 않은 경우 삭제하고 우리에게 보여주지 마십시오. 문제를 재현하는 데 필요한 최소한의 테스트 사례를 얻을 때까지 코드를 계속 줄이십시오. 이렇게 대부분의 경우 원인이됩니다 당신은 문제를 발견 하고 그 과정에서 배운다. 직접 해결하지 않으면 간단한 예에 대한 빠른 도움을받을 수 있습니다.
Phrogz 2011 년

답변:


108

당신은 라인이 있습니다

dots = document.getElementById("txt").value;

파일에서 txt의 내용이 숫자로 제한되지 않기 때문에 점이 문자열로 설정됩니다.

int로 변환하려면 줄을 다음과 같이 변경하십시오.

dots = parseInt(document.getElementById("txt").value, 10);

참고 : 10여기서는 10 진수 (밑수 10)를 지정합니다. 이것이 없으면 일부 브라우저는 문자열을 올바르게 해석하지 못할 수 있습니다. MDN :을 참조하십시오 parseInt.


3
바로 가기 ... dots = + document.getElementById ( "txt"). value
Tracker1

5
(! 점 || 점 <1)으로 parseInt는 (..., 10) 또한, 항상 기수 ... 전성 검사 ... 경우를 사용 ... 너무 순서에있을 수 있습니다
Tracker1

1
더하기 위해 증가 연산자를 더 잘 사용하십시오. VAR = VAR + 1 대신 VARIABLE ++처럼;
gnganpath

54

가장 간단한 것 :

dots = dots*1+5;

점은 숫자로 변환됩니다.


34
그것보다 더 간단합니다 dots = +dots+5.
Andy E


9

여기에 표시되지 않기 때문에이 답변을 추가하고 있습니다.

한 가지 방법은 값 앞에 '+'문자를 넣는 것입니다.

예:

var x = +'11.5' + +'3.5'

x === 15

나는 이것이 가장 간단한 방법이라는 것을 알았습니다.

이 경우 라인 :

dots = document.getElementById("txt").value;

변경 될 수 있습니다

dots = +(document.getElementById("txt").value);

강제로 숫자로

노트:

+'' === 0
+[] === 0
+[5] === 5
+['5'] === 5

8

parseInt() 트릭을해야한다

var number = "25";
var sum = parseInt(number, 10) + 10;
var pin = number + 10;

당신에게 준다

sum == 35
pin == "2510"

http://www.w3schools.com/jsref/jsref_parseint.asp

참고 : 10in parseInt(number, 10)은 10 진수 (밑수 10) 를 지정합니다. 이것이 없으면 일부 브라우저는 문자열을 올바르게 해석하지 못할 수 있습니다. MDN :을 참조하십시오 parseInt.


3

이것은 또한 당신을 위해 작동합니다.

dots -= -5;

위대한 우리는 첫 번째 VAR 다시 할 필요가 없습니다
bormat

1

정말 간단합니다

var total = (1 * yourFirstVariablehere) + (1 * yourSecondVariablehere)

이것은 자바 스크립트에 * 로그인에 대한 혼동이 없기 때문에 자바 스크립트가 증식하도록 강제합니다.


1

변수 뒤에 +를 추가하면 정수가됩니다.

var dots = 5
    function increase(){
        dots = +dots + 5;
    }

1

내 특정 사례에 대해 성공하지 못한 채 여기에서 대부분의 답변을 시도한 후 다음과 같은 결과를 얻었습니다.

dots = -(-dots - 5);

+ 기호는 js를 혼동하는 것이므로 완전히 제거됩니다. 이해하기 어려울 수있는 경우 구현이 간단합니다.


-3

이것이 마지막으로 비추천 된 이후 업데이트되었습니다 ....

부분 만 봤어요

var dots = 5
function increase(){
    dots = dots+5;
}

전에는 txt상자가 변수를 공급 한다는 것이 나중에 나에게 보여졌습니다 dots. 이 때문에 입력을 "정리"하여 악성 코드가 아닌 정수만 포함하도록해야합니다.

이를 수행하는 한 가지 쉬운 방법은 onkeyup()이벤트로 텍스트 상자를 구문 분석하여 숫자가 있는지 확인하는 것입니다.

<input size="40" id="txt" value="Write a character here!" onkeyup="GetChar (event);"/>

이벤트에서 오류가 발생하고 값이 숫자가 아닌 경우 마지막 문자를 지 웁니다.

<script type="text/javascript">
    function GetChar (event){
        var keyCode = ('which' in event) ? event.which : event.keyCode;
        var yourChar = String.fromCharCode();
        if (yourChar != "0" &&
            yourChar != "1" &&
            yourChar != "2" &&
            yourChar != "3" && 
            yourChar != "4" &&
            yourChar != "5" &&
            yourChar != "6" && 
            yourChar != "7" &&
            yourChar != "8" && 
            yourChar != "9")
        {
            alert ('The character was not a number');
            var source = event.target || event.srcElement;
            source.value = source.value.substring(0,source.value-2);
        }
    }
</script>

분명히 정규식으로도 할 수 있지만 게으른 길을 택했습니다.

그 이후로 상자에 숫자 만있을 수 있다는 것을 알 수 있으므로 다음을 사용할 수 있습니다 eval().

dots = eval(dots) + 5;

2
eval()dots사용자 입력, 특히 저장된 입력에서 가져온 경우 위험합니다 . 더 자세한 정보
차드 레비

@ChadLevy 링크를 보내 주셔서 감사합니다-좋은 읽기-그리고 이것을 가져 왔지만,이 경우에는 사용자 입력이 아니기 때문에 우려 할만한 것이 아닙니다. dots증분되고 문자열로 오인되는 정의 된 변수였습니다. 그래서 나는 당신이 말했듯이 사악한 스크립팅 주입의 가능성을 가질 수있는 사용자 / 저장된 입력에서 가볍게 사용해서는 안된다는 내 대답을 한정 할 것입니다. 그러나이 경우에도 그러한 주입은 어쨌든 수학 오류 / 예외를 유발할 것이므로 실제로는 어떤 일도하지 않습니다.
vapcguy

eval()너무 위험 하다고 생각하기 때문에 반대하는 사람들의 경우 OP가 사용하는 컨텍스트에서 코드를 살펴볼 필요가 있습니다. 이 경우에는 텍스트 상자에서 나오지 않는 입력이나 숫자가 아닌 값을 주입 할 수있는 다른 형식의 사용자 입력을 사용하고 있기 때문이 아닙니다! 나는 당신의 반대표를 비울 수 있기를 바랍니다!
vapcguy

다른 반대 투표자. 양이되는 것이 아니라 자신을 설명하고 싶으십니까? eval()괜찮은 때가 있으며 실제로 읽은 모든 것을 맹목적으로 믿지 않고 실제로 이해하지 않고 사용되는 맥락을 살펴볼 필요가 있습니다!
vapcguy

1
@ChadLevy 좋아, 그 계산에, 당신이 옳습니다. 나는 그 섹션을 보지 않았다. 나는 그가 페이지 상단에 넣은 것에 집중했다. 코드 var dots = 5 function increase(){ dots = dots+5; }는 텍스트 필드를 사용하지 않고 사용자 입력이 아닌 직접 변수를 사용하여 할당한다. 그래서 그게 제가 떠난 것입니다. 하지만 당신은 그가 텍스트 필드에 할당의 권리한다는 것보고 txt에를 dots, 그리고 dots전역 변수이기 때문에 해당 입력에 의해 업데이트됩니다. 네가 옳아. 감사.
vapcguy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.