2013-12-19 4 views
0

jQuery는 모듈 패턴에서 undefined를 사용하여 예기치 않은 값으로 재정의되는 것을 방지합니다. 나는이 일을 생각하지만 정의되지 않은 비교할 때마다 나는 (항상?) 경향이정의되지 않은 Javascript 모듈 패턴

typeof foo === 'undefined' 

을 사용 그래서이 일을 어느 시점이 : 항상 (내가 정의되지 않은 비교할 때마다

(function (win, doc, RG, undefined) 
{ 
    // App goes here 

})(window, document, typeof RGraph === 'object' ? RGraph : {}); 
+0

확실하지 않습니다. 왜'(창, 문서, RGraph, 정의되지 않은)'아닌가? – EricG

+0

그러면 undefined의 전역 값을 전달할 것입니다. 일부는 음수인데, 영리한 거시기가 다시 할당 한 경우 2가 될 수 있습니다. – Richard

+2

신뢰할 수있는 _undefined_를 표시하는 방법과 비교할 경우 _typeof_를 사용할 필요가 없습니다 (선언되지 않았을 수있는 변수를 확인하지 않는 한). 그러면 코드가 조금 더 간단 해집니다. 모든 경우에 _typeof_를 사용하려는 경우 no와 관계없이 _undefined_를 선언 할 필요가 없습니다. 비교를 위해 _undefined_ 값을 안정적으로 얻는 또 다른 방법은 _if (foo === void 0) _에서 _void 0_을 사용하는 것입니다. – nnnnnn

답변

1

가 나는 경향이 당신이 당신의 모듈에 undefined를 사용하지 않는 우물 경우?) 그럼 난을 보장하기 위해 매개 변수로 선언 아무 소용이없는 typeof foo === 'undefined'

를 사용하는 TS 값.

그러나 "항상"다음에 물음표가 있으며 나중에 다른 사람이 코드를 사용할 수 있는지 알 수 없으므로 여전히 좋습니다.

0

값이 undefined 수 있는지 여부를 테스트하는 방법은 세 가지가 있습니다 사용 typeof :

if (typeof value === "undefined") { 
    // do something 
} 

방법 2 : 변수 undefined과 비교 :

방법 1

if (value === undefined) { // do something } 

방법 3 :void 0과 비교 :

if (value === void 0) { 
    // do something 
} 

Q : 어느 하나를 사용한다?

A :는 여러 가지 요소가 고려 있습니다 이해도 typeofundefined의 측면에서

  1. 이 최고입니다.
  2. 최소한의 문자로 환산하면 undefined이 가장 좋습니다. 성능면 (http://jsperf.com/type-of-undefined-vs-undefined)에서
  3. :
    1. 모두 undefinedvoid는 대부분의 브라우저 (특히 파이어 폭스와 크롬)에서 파에 있습니다.
    2. Chrome에서 typeof은 다른 두 가지보다 느리지 만 Firefox에서는 가장 빠릅니다.
  4. typeof을 사용하면 변수가 존재하는지 테스트 할 수있는 유일한 방법입니다.

이러한 요소를 바탕으로 undefined (방법 2)이 가장 좋은 방법이라고 할 수 있습니다. 항상 undefined의 겹쳐 쓰기 문제가 있습니다.당신이 (브라우저에서 일을해야) 모듈 패턴을 사용하는 경우 그러나 당신은 무료로 undefined를 얻을 수 있습니다 :

(function ($, undefined) { 
    // you can use `undefined` safely here 
}(jQuery)); 

을 따라서는 모듈 패턴을 사용하는 경우 다음 당신은을 사용하는 것이 좋습니다 것입니다 두 번째 방법. 그것은 읽고 이해할 수 있고 간결합니다. 유일한 단점은 변수가 있는지 여부를 테스트 할 수 없다는 것입니다. 그러나 언제든지 typeof으로 언제든지 되돌아 갈 수 있습니다.

관련 문제