2016-08-19 2 views
1

일반적으로이 코드는 예상대로 작동하지만 때로는 오류가 발생합니다. 그것은 또한 그것을하는 적당한 방법 같이 느끼지 않는다. 나는 또한 이것을 올바르게하는 방법을 궁금해합니다.toString을 할 수 있는지 제대로 확인하는 방법

변환 된 입력은 2 개의 위치 중 하나에있을 수 있습니다. 또한 그러므로 내가 hasOwnProperty()

내가 오류 수행 허용됩니다 0 될 수 있습니다 :이 코드는 백엔드에 사용되기 때문에

null is not an object (evaluating 'qIdAnswer.Numeric.toString'); 

을, 나는 DOM에 액세스 할 수 없습니다.

또한 여러 입력 유형을 사용하므로 십진수는 점 . 또는 쉼표 , 일 수 있습니다. 그래서 일반 출력으로 변환합니다. OpenText 속성은 항상 설정되며,이 코드 앞에 표시됩니다.

답변

1

qIdAnswer.Numeric이 존재하며 그 값은 null입니다. undefined과 동일한 문제가 발생합니다. 당신이 != null 점검 및 undefined 값의 유지 보수에 대해 걱정하는 경우

if (qIdAnswer && qIdAnswer.hasOwnProperty('Numeric') && qIdAnswer.Numeric != null) { 
    answer = parseFloat(qIdAnswer.Numeric.toString().replace(',', '.')); 
} else { 
    answer = parseFloat(qIdAnswer.OpenText.replace(',', '.')); 
} 

또는 (예를 들어, 프로그래머가 모르는 : 당신은 (모두에 대해 방어 할 것이다) 추가 != null 검사를 수행하여 그 모두에 대해 방어 할 수 undefined을 처리 할 것임) 명시 적이어야합니다.

if (qIdAnswer && qIdAnswer.hasOwnProperty('Numeric') && qIdAnswer.Numeric !== null && qIdAnswer.Numeric !== undefined) { 
    answer = parseFloat(qIdAnswer.Numeric.toString().replace(',', '.')); 
} else { 
    answer = parseFloat(qIdAnswer.OpenText.replace(',', '.')); 
} 
+0

위대한 캐치. 내가 어떻게 잊을 수 있니? 우리가 말하는대로 테스트 –

관련 문제