2014-03-27 4 views
0

이전 코드를 몇 번 보았습니다. 온라인 코드를 많이 사용했습니다. 요소를 인수로 필요로하는 빌린 함수를 몇 개 보았지만이 요소는 요소 자체 나 .getElementById()에서 사용할 문자열로 전달할 수 있습니다. 다음 중 어느 것이 더 낫습니까? 그 이유는 무엇입니까? 아니면 더 좋은 버전이 있습니까? (안전 나은 = 판독 표준)Javascript : 인수를 사용하면 유효한 HTML 요소가 생성됩니다. (유형 확인)

버전 1

function doSomethingWithElem(elem /*, param2, ... */) { 
    elem = (typeof elem === 'string' || elem instanceof String) 
     ? document.getElementById(elem) 
     : elem; 

    // more stuff... 
} 

버전 2

function doSomething2(elem /*, param2, ... */) { 
    elem = document.getElementById(elem) || elem; 

    // more stuff... 
} 

gEBI를 호출하기 전에 문자열 인스턴스의 하나 개 검사되는 주요 차이점을 다른 한쪽은 undefined을 반환하는 gEBI를 사용합니다. 어느 누구도 elem이 실제로 HTMLElement인지 확인하지 않습니다.

잘 정의 된 API (사용자가 이 문자열 또는 HTML 요소를 전달해야 함을 알고 있음)을 가정하면 유형 검사는 얼마나 중요합니까? 유형 검사는 스크립트 사용자가 자신의 코드를 디버그하는 데 주로 필요합니까? 버전 2를 엉망으로 만들 수있는 gEBI의 가능한 반환 값과 같은 이들 중 하나의 미묘한 함정이 있습니까?

답변

1

더 읽기 쉽기 때문에 버전 1로 가고 싶습니다. 당신은 그것이 2 가지 경우를 다루는 것을 보았습니다. 그리고 그것들 중 하나는 다른 하나의 요소 인 문자열이었습니다. 그래도 instanceof String에 대한 수표를 본적이 없지만, 99 %의 사람들이 내 경험에 따르면 문자열 프리미티브를 선언합니다. gEBI를 조금 테스트했는데 매우 견고한 것으로 보입니다. 잘못된 것 (배열, 함수, 개체 등)은 null으로 반환됩니다.

elem이 실제로 HTML 요소인지 확인하려면 JavaScript isDOM -- How do you check if a JavaScript Object is a DOM Object?