나는 바닐라 자바 스크립트로 작성된 동료 검토 코드이며 작성자 중 한 명은 게으른 타입 캐스트 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 { ...
==
처음에는 나에게 붉은 깃발을 볼 만들었지 만 :
대신 데이터와 힘의 종류를 확인 일부 기능을 작성하는 것이 균일 한 유형으로, 개발자는 이런 일이하는 나는 그것에 대해 그에게 물었을 때, 그는 baseVal
및 retrievedVal
은 각각 다음과 같이 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의에보고 한 얘기를 깜빡 했네요,하지만 기술적으로 위험이 무엇인지 볼 수 없습니다
이 시나리오에 대해.
이게 아닌가? – timmy
'if (retrievedVal && parseInt (retrievedVal, 10) === baseVal) {'? – thefourtheye
@thefourtheye 기수를 잊지 마세요 – ashley