2014-03-04 3 views
9

이것은 완전히 교육적인 질문입니다.자바 스크립트 : "- 0"은 무엇인가요?

나는 일하고있는 회사가 이전에 만든 웹 응용 프로그램의 새 버전을 만들고 있습니다. 수학을 다시 쓸 때 나는이 문제를 겪었습니다 :

document.getElementById("estResidual").value-0; 

"-0"에 대한 목적이 없다고 생각하고 제거했습니다. 그러나 계산을 시도했을 때, 그 숫자는 너무 작았습니다. 그런 다음 "-0"을 다시 추가하고 시도해 보았습니다. 모든 것이 잘 작동했습니다.

질문 : "-0"은 값을 변경하기 위해 무엇을 했습니까?

+1

주 - '+ 0'을 사용하면 여전히 연결처럼 보일 수 있습니다. 마이너스와 혼동하지 않습니다. – Floris

+1

@Floris - 그냥 귀하의 의견을 다시 읽고 그것을 실현 ... 그래서 내 삭제했습니다. :) – Steve

답변

19

자바 스크립트의 소프트 타이핑 동작을 (ab) 사용합니다. +를 사용하는 대신 문자열로 정수 0을 변환하고 그것을 연결할 것을

> +"13" 
13 
> +"9.9" 
9.9 

참고 :

> "13" 
"13" 
> "13"-0 
13 
> "1.01"-0 
1.01 

단항 +가 동일한 작업을 수행합니다 :이 경우, float로 문자열을 변환합니다 :

> "13"+0 
"130" 

이것은 모두 표준화되었습니다. 이 연산자가 어떻게 동작해야하는지에 대한 자세한 내용은 ECMAScript 언어 사양 (예 : addition, subtraction, unary plus)을 항상 확인할 수 있습니다.

+0

뛰어난 지식. –

+0

"악용"이 필요한 이유는 무엇입니까? 확실히 언어를 사용하는 다양한 방법을 배우는 것이 유익합니다. 또는 현혹되지 않는 코딩 문제가 발생하기 쉽기 때문에 피하는 것이 가장 좋습니다. – DanTheMan

+6

@DanTheGameMan : 개인적으로는 의도가 무엇인지 분명하지 않기 때문에 개인적으로 좋아하지 않습니다. 결국, 당신은 stackoverflow에 = 그것이 무엇인지를 물어야했다. 그리고'-0'이 작동한다는 것을 보았을 때 산술의 속성을 감안할 때'+ 0'이 똑같은 방식으로 작동 할 것이라고 기대할 수 있습니다.하지만 그건 완전히 다른 결과를줍니다! 'parseInt()'또는'parseFloat()'사용을 권장합니다. – Claudiu

1

JS 엔진은 명령문이 작동하도록 시도하면서 다시 캐스트합니다. 당신이 그것에 수학을 수행하려고 할 때 그래서 JS는 정수 23에 "23"을 캐스팅 것이며, 마찬가지로 그것은 문자열 "23"을 정수 23으로 변환됩니다 당신이 뭔가를 할 경우 다음의 형식을 강제

var a = 23; 
console.log(23 + "asdf"); 
//outputs "23asdf" 
+1

정적 타이핑 문제가 아닙니다. 정적 유형의 언어는 정확한 동작을 할 수 있습니다. 표현식 ' - '의 유형은 ''입니다. – Claudiu

+0

@Claudiu 좋은 지적. 편집 됨. – BLSully

1

문자열이 아닌 숫자가되는 개체.

+0

잘 Claudiu의 대답은 내보다 나은 방법입니다 – Charles380

+0

당신은 여전히 ​​노력에 대한 upvote를 얻을 :) – DanTheMan

관련 문제