2017-02-02 8 views
-5

연습을 위해 현재 HTML, CSS 및 Javascript로 계산기를 만들고 있습니다. "내장 된"eval 함수가 문자열에서 수학을 수행한다는 것을 알았습니다. 하지만 제대로 작동하지 않습니다.Javascript eval() 함수가 제대로 작동하지 않습니다.

문제가 무엇인지 알 수 없습니다. 그러나 예를 들면 : 11 + 11/2는 11이어야합니다. 어떤 이유로 16.5가됩니다. 나는 이유를 모른다. 나는 정말로 약간의 도움에 감사 할 것이다. 이 잘못된 접근이다 이유의 전체 무리가 있습니다

function revealAnswer(){ 
      var math = document.getElementById("numbersInputted"); 
      math.innerHTML += " = " + eval(math.innerHTML); 

    } 
+4

왜 '11 + 11/2'가 '11'이어야합니까? '11/2'는'5.5'이고'11 + 5.5'는'16.5'입니다. – Pointy

+3

'(11 + 11)/2'을 시도하고 연산자 우선 순위에 대해 배웠을 때를 생각해보십시오. – Pointy

+0

PEDMAS 프로그래밍이 아니기 때문에이 질문을 주제로 닫으려고합니다. – Paulpro

답변

1

: 여기

는 코드입니다.

먼저 innerHTML은 요소의 텍스트 내용뿐만 아니라 중첩 된 HTML 요소도 포함하는 문자열을 반환합니다. 원하는 텍스트 인 경우 textContent을 사용하십시오.

다음으로 사용자가 동일한 문자열에서 숫자와 함께 사용하려는 실제 수학 연산자를 입력하게하면 혼동이 생깁니다. 사용자에게 별도로 입력하게하고 if/then 로직을 사용하여 궁극적으로 올바른 운영자를 사용할 수 있습니다.

다음은 (중요한 부분입니다.) eval()을 사용하지 마십시오. 발생할 수있는 문제 만 해결할 필요는 없지만 웹 사이트에서 "교차 사이트 스크립팅"공격의 문을 엽니 다. 또한 this 바인딩을 조작하고 코드를 자체 범위에서 실행합니다.

정말로해야 할 일은 문자열 입력을 숫자로 변환하여 수학과 수학을 할 수 있도록하는 것입니다. 당신은 parseInt()하고 그래서 parseFloat()

하여이 작업을 수행 할 수 있습니다, 당신의 라인 수 :

math.innerHTML += " = " + parseFloat(math.textContent); 

마지막으로는, 수학에 대한 작업의 순서는 다음과 같습니다

  • 괄호
  • 지수들
  • Multiplicatio N
  • 부문
  • Addtion
  • 뺄셈

당신은 그 부문은 또한 이전에 완료하고 당신의 발현에 있음을 의미 볼 수 있습니다 11 + 11/2, 11/2 첫 번째 평가 (5.5) 후입니다 11 (16.5)에 추가되었습니다.

마지막으로 JavaScript에서 + 연산자는 수학적 추가 또는 문자열 연결을 의미 할 수 있으며 피연산자 중 하나가 문자열이면 다른 하나는 문자열로 변환됩니다.

+0

확인. 나는 지금 그것을 얻는다라고 생각한다. 저를 배울 시간을 보내 주셔서 감사합니다! :) –