2013-05-17 4 views
0

이것은 문제가되지 않습니다 - 더 일반적인 질문입니다.변수를 숫자로 명시 적으로 설정하지 않으면 후속 수학 함수가있는 NaN이 산출됩니다.

다음 (작업 코드)은 장바구니 품목 표를 반복하고 각 품목에 대해 입력 한 가격과 수량을 가져 와서 결과를 변수 "cartTotal"에 추가합니다. 이처럼, 내가 JavaScript가 느슨한 타입되면서, 그것은 cartTotal 즉시 번호를 여기에 추가 된 같은 번호입니다 "알고"것이라고 가정 -

function updateCart(){ 
    var cartTotal = 0; 
    jQ('#cartItems').find('tr').each(function(){ 
     $this = jQ(this); 
     var price = $this.find('.itemPrice').text(); 
      price = Number(price.replace(/[^0-9\.]+/g,"")); 
     var qty = $this.find('input').val(); 
     var itemTotal = (price * qty); 
     cartTotal += itemTotal; 
    }); 
    console.log(cartTotal); 
}; 

처음에 나는 그것이 0의 값을 부여하지 않고 cartTotal 선언 내가 읽은 다양한 글들/기사들로부터 내가 이해할 수 있었던 것은 무엇인가. 하지만 콘솔은 NaN을 기록했습니다.

아마도 "느슨하게 입력 된"기능을 문자 그대로 사용했습니다. 누군가 초기 값을주지 않으면 왜 NaN을 얻지 못했을까요?

답변

2

이유는 당신이 전 반환 NaN 자바 스크립트 undefined + 10를 들어, undefined 변수에 번호를 추가하려고하는 것입니다, 다음에 그것을 밖으로 시도 할 수 :

var cartTotal; 
cartTotal += 10; 
console.log(cartTotal); 

을에 큰 설명은 null이 대답에 undefined 모양의 차이 : Why is null an object and what's the difference between null and undefined?

가 느슨한 타입은 변수가

그래서, 그 형태없이 선언 된 것을 의미한다
var answer = 42; 

은 느슨하게 입력 된 것으로, Number 42를 보유하는 일반 상자입니다. 컴파일러가 숫자를 더하는 방법은 컴파일러가 두 가지를 합산하는 방법을 알고 결과를 제공합니다.

+0

따라서 변수 선언 (값 없음)은 항상 null입니까? – verism

+0

그것은 null이 아닙니다! – epascarello

+0

죄송합니다. 과거에 미끄러 진 덕분에 @epascarello에게 감사드립니다. P –

1

var cartTotal은 정의되지 않았지만 + =를 사용하여 사용하려고합니다. 자바 스크립트로 작동하지 않습니다 이것은 당신이 0이 아니고 강한 유형을 설정하지 않은 것처럼 cartTotal 지금에 정의되지 않은 변환 알 수있는 방법이 무엇인지 유형 모르는 0

참조 : Example

var cartTotal; // Undefined 
var cartTotal = 0; // Defined as number 


var cartTotal; 
var itemTotal = 12; 
alert("Cart total type: " + typeof(cartTotal)); // Causes an ex so returns NaN. 
cartTotal += itemTotal; 
alert(cartTotal); 

var cartTotal = 0; 
var itemTotal = 12; 
alert("Cart total type: " + typeof(cartTotal)); 
cartTotal += itemTotal; 
alert(cartTotal); 
+0

특정 연산자가 변수의 유형 (숫자 등을 문자열 등)을 변경하는 방법으로 읽었지만 이에 대한 매우 구체적인 예가 몇 가지 있습니다. – verism