2012-07-20 7 views
1

현재 자바 스크립트를 연습하고 있으며 현재 객체 감지에 문제가 있습니다. 개체를 만들고 개체가 있는지 여부를 감지하고 싶습니다. 아래는 현재 사용하고있는 몇 가지 예제 코드입니다.자바 스크립트 객체 감지

아래의 코드 샘플은 내 개체를 만드는 방법입니다.

var obj = obj || {}; 

이걸 사용해야합니까?

if (typeof obj !== "undefined") { 
    // code 
} 

아니면?

if (obj !== null) { 

} 
+0

1. '! ==='이 없습니다. 2. 당신은 ** 당신이 ** 정말로 필요로하는 것을 설명하지 않았습니다. ** 실제 ** 목표에 따라 솔루션은 달라질 수 있습니다 – zerkms

+0

새 오브젝트를 만들려면 단순히'var obj = {}'를 사용하지 않으시겠습니까? –

+0

잘 obj를 {}로 설정하면 null이거나 정의되지 않을 수 있습니다. – epascarello

답변

3

undefined 값은 변수 값이 할당되지 않았 음을 의미한다. null 값은 null 값이 할당되었음을 나타냅니다. === 연산자 (및 그 부정, !==)는 type coercion을 방지합니다.

맞습니까? 그것은 모두 당신이 성취하고자하는 것에 달려 있습니다. undefinednull은 모두 "거짓"값입니다. 즉, 부울 컨텍스트에서 각각 false (예 : false, 0 및 빈 문자열)으로 평가됩니다. objnull 경우, 다음 typeof obj하지"undefined" 것을

참고. 이 코드를 실행하면

var obj = obj || {}; 

, 당신은 obj가 (때문에 var 선언의) 정의되어 있는지 확신 할 수 있습니다,이 값이 할당되지 않았을 수 있지만 :

0

일반적인 방법은 사용하는 것입니다.

obj의 값이 "거짓"값으로 해석되면 새 개체에 대한 참조가 할당됩니다.

가능한 결과이다 : 값이 할당되지 않은

  1. obj 경우 새로운 개체 참조가 할당된다.

  2. obj에 이전에 "falsey"값이 지정되어 있으면 새로운 객체 참조로 대체됩니다 (잘못된 값을 할당 한 코드를 혼동시킬 수 있음).

  3. obj에 미리 "truethy"프리미티브 값이 할당 된 경우 다음과 같은 속성 할당을 obj으로하면 오류가 발생하고 스크립트 실행이 중지됩니다.

  4. obj이 이미 null 이외의 개체에 대한 참조 인 경우 속성의 후속 할당은 해당 개체에 대한 것입니다. 객체의 유형에 따라 문제가있을 수 있습니다. 아니. 아마도 당신의 통제 밖에있는 물건이 그 물건을 창조 했으므로 당신이 알지 못하는 한 그것을 수정하거나 파괴 할 수 있습니다. 너는 무엇을 할 것인가?

그것은 경우 2, 3 또는 4 그것이 당신의 obj 당신이 dealiing하고 아니에요으로, 일반적으로 처리하는 자바 스크립트 할 수 없습니다. 따라서 다른 사람들과 충돌 할 가능성이없는 이름을 사용하고 # 1 또는 # 4를 얻고 모든 일이 잘 진행되기를 바랍니다.

덧붙여 말하자면, 코드가 실행되는 시점에서 # 1을 가졌다 고하더라도, # 4에서 여전히 더 많은 코드가 추가 될 수 있습니다. 결과가 본질적으로 동일하기 때문에

if (typeof obj == 'undefined') 

:

같은 테스트에 추가 혜택이 없습니다.