2016-10-17 3 views
2

내가 +1을하면, 예를 들어 잘못된 답을 얻습니다. 내가 두 번째 플러스를 추가 할 때자바 스크립트의 + + 연산자

var b = [069]; 
var total = 0; 

total = total + b 
console.log(total) // total = 069 

그러나, 그래서 방정식은 내가 69 위의 정답은 바로 내 문제의 단순화 된 예입니다 얻을이

total = total + + b // total = 69 

것 같습니다.

이것은 + + 사용하지 않고 내가

confusing pluses 

는 어떻게 정확한 답변을 얻을 수 없다는 경고가 그러나 JSHint를 사용하는 동안, 잘 작동? 또한,이 연산자는 무엇입니까?

+2

'[069]'는 ** 배열 **; 배열 값에'b'를 초기화 한 다음'+'연산자와 함께 사용하려고합니다. 그것이 당신이 기대하는 것은 무엇입니까? – Pointy

+1

왜 'var b = 69;'가 아닌가? – Pointy

+4

변수 앞의'+'는 내가 맞으면 숫자로 변환합니다. 콘솔에서 이것을 시도해보십시오. ""5 "는''5"를 리턴합니다,'+ "5"'는'5'를 리턴합니다. 올바른 결과를 얻으려면'total = parseInt (total) + parseInt (b); '를 사용할 수 있습니다. –

답변

3

대답 내가 정확 해요 경우 숫자로 캐스팅 할 변수 앞에

+ 나의 코멘트를 게시.

은 콘솔이 시도 :

+"5"5 (수) 반환 곳

"5""5" (문자열)을 반환합니다.

parseInt()은 입력 매개 변수에서 숫자를 만들려고하므로 올바른 결과를 얻으려면 total = parseInt(total) + parseInt(b);을 사용할 수 있습니다.

Theoritecally, 당신은 단지 숫자로 total을 구문 분석 할 수 있지만 수학적 1해야 10 결과 "1" + "0" = "10", 같은 오류로 발생하기 쉬운 것입니다.

9

자바 스크립트는 불행하게도 무슨 일하는 "69"되고, [69] (수 69를 포함한 배열이) 문자열로 변환된다는 것이다 코드

b + [69] 

로 ... 암시 적 변환을 많이한다. 이 경우 b에 연결되며이 경우이 경우에는 "0" 문자열로 변환됩니다. 따라서 결과는 "069"입니다.

그러나 배열 앞에 다른 단항 문자 +을 추가하면 문자열이 숫자로 다시 변환되고 b에 숫자 결과가 추가됩니다.

0 + [69] → 0 + "69" → "0" + "69" → "069" 
0 + + [69] → 0 + + "69" → 0 + 69 → 69 

정확한 규칙은 매우 복잡하지만 당신은 바이너리 +에 대한 단순화 된 형태로 고려 자바 스크립트와 생산성을 높일 수 있습니다 :

  • 모두 숫자가 결과하는 경우 숫자 또한이
  • 그렇지 않으면입니다 그들은 다시 문자열과 결과로 연결됩니다. 연결은
  • 입니다.

다소 놀라운 것은 암시 적 conversio입니다 n 배열에 문자열을 추가하는 것은 요소를 문자열로 변환하는 것일 뿐이며 그 사이에 구분 기호로 ","을 추가합니다.

즉, 한 요소 배열 [1]"1" ...로 변환되며 이는 분명히 [1] == 1과 같은 미친 결과를 의미합니다.

+1

"불행히도"대답의 편견을 없애고 싶을 수도 있습니다 : P –

+0

이 답변은 OP를 위해 개선 된 방법입니다. –

+4

@EmileBergeron 대답이 어떻게 숙련 된 OP가 되는가와 아무 상관이 없습니다. 그들은 질문을하고 대답을 얻었다. –