2014-02-25 5 views
1

나는 바닐라 자바 ​​스크립트로 작성된 동료 검토 코드이며 작성자 중 한 명은 게으른 타입 캐스트 if을 종종 수행합니다. 이는 매우 부주의 한 데이터가있는 REST 서비스의 값을 평가하기 때문입니다. 때로는 달러로 표시된 금액을 문자열로 반환하고, 때로는 숫자로 표시하며, 사용자가 수년 동안 데이터를 입력 한 시점의 유효성 검사에 따라 달라질 수 있습니다.자바 스크립트 지연 게살 안전 검사

가끔 우리는 150의 값을 얻고 때로는 "150" (내 뜻을 아는 경우 따옴표 제외)을 얻습니다.

데이터가 표시되고 이에 대한 연산이 수행되지 않습니다. 일부 디스플레이 스타일링을 수행 할 수 있도록 다른 숫자와 비교하기 만하면됩니다.

var baseVal = ReturnsAnIntegerValue(); // returns a number 
var retrievedVal = CallToAwfulDataService(); // could return number or string 
if (retrievedVal && retrievedVal == baseVal) { 
    // do stuff 
} 
else { ... 

== 처음에는 나에게 붉은 깃발을 볼 만들었지 만 :

대신 데이터와 힘의 종류를 확인 일부 기능을 작성하는 것이 균일 한 유형으로, 개발자는 이런 일이하는 나는 그것에 대해 그에게 물었을 때, 그는 baseValretrievedVal은 각각 다음과 같이 null, 0, 빈 문자열, 또는 undefined의 조합 곳 if (retrievedVal && ...에 대한 초기 검사 상황에서 예기치 않은 결과를 방지 것이라고 말했다 :

if (null && null == undefined) // false  |  if (null == undefined) // true 
if (0 && 0 == "") // false     |  if (0 == "") // true 
if (0 && 0 == "0") // false     |  if (0 == "0") // true 
if (0 && 0 == "") // false     |  if (0 == "") // true 

아이디어가 있습니다. ==이 나쁜 형식이라는 것을 배웠기 때문에 이것이 나쁜 코드 여야한다고 생각합니다.하지만 코드는 읽기 전용이며 간결한 형태로 표시되기 때문에 형식 변환하는 추가 기능이 필요하지 않습니다. 나는 우리가 그것에 상처를 입을 것 같은 시나리오를 생각할 수 없다.

이 나쁜 코드입니까? 구체적으로 : 무엇이 잘못 되었습니까? 이것을 처리하는 더 좋은 방법이 있습니까?

편집 나는 ==는 생각의 코드 냄새 학교입니다, 내가 주로 백업하는 것하는 bunchquestionsSO의에보고 한 얘기를 깜빡 했네요,하지만 기술적으로 위험이 무엇인지 볼 수 없습니다

이 시나리오에 대해.

+2

이게 아닌가? – timmy

+0

'if (retrievedVal && parseInt (retrievedVal, 10) === baseVal) {'? – thefourtheye

+2

@thefourtheye 기수를 잊지 마세요 – ashley

답변

0

"표준화"기능이 있어야하며 백엔드의 데이터 샘플을 테스트해야합니다.

좋은 사례는 일반적으로 "모두 괜찮습니다"라고 가정합니다.

당신이가는 길 중에 "좋은 습관"에 관한 한 당신은 운명을 정해야합니다.

+0

나는 동의한다 ... 내가 말했듯이, 나는이 접근법이 표준이 아니라고 느꼈다. 개발자에게 질문했을 때, 그의 답변은 "이것이 어떻게 깨질 수 있는지 말해주십시오. 왜 1 개의 추가 비교 연산자를 전체 함수로 대체해야합니까?" 나는 회신하기가 어렵다.그것이 제가 여기서 찾고있는 것입니다. 이것이 틀린 경우, 어떻게 깨뜨릴 수 있는지 말해주십시오. – tengen

+0

작업은 복잡합니다 (단일 연산자로 구현 되었더라도 상관 없습니다). 예상하지 못한 데이터 (쉼표는? dots? letters?)가있을 수 있습니다. 이러한 특성을 가진 코드는 별도의 기능을 수행 할 가치가 있다고 생각합니다. – sabof

+0

쉼표, 문자 등이없는 경우 코드가 여전히 "너무 똑똑"할 수 있습니다. – sabof