2012-08-13 2 views
0

Object의 속성의 존재를 확인하려면 개체가 존재하는지 확인해야합니다. 객체가 정의되지 않은 경우 모든 객체의 속성도 정의되지 않아야합니다. 개체가 정의되어있는 경우Object가 정의되지 않은 경우 "if (! Object.property)"중단이 발생하는 이유는 무엇입니까?

if (! Object.property) { 
    console.log('Nope!') 
} else { 
    console.log('Yep!') 
} 

같은은 완전히 파괴 하는가? 객체 검증 내부에서 속성 검증을 중첩하는 것은 성가신 일입니다. 이것은 항상 합법적 인 if 문이되어서는 안됩니까?

+0

이 결정은 다른 언어로 진행되는 것으로 보입니다. C (및 derivates)에서는 널 포인터 예외가 발생합니다. 또한 통역사가 부동산 가치로 무엇을하려하는지 반드시 알지는 못한다는 사실을 단순히 해석하고 있다는 것을 알지 못합니다. –

+0

@FelixKling 예, 동의합니다. 특히 _most_의 경우'obj'가 정의되어 있지 않다면 아마 정말 나쁜 일이 일어날 것입니다. 'obj.foo'가 자동적으로'undefined'로 평가되는 것보다 더 잘 잡을 수 있습니다. – Alnitak

답변

8

속성을 찾으려면 먼저 속성 (정의 될 수 있음)이 정의 된 개체를 찾아야하기 때문에 작동하지 않습니다.

그건 그렇습니다. 언어 디자인 선택입니다. 은 이 정의되지 않은 경우 항상 undefined을 반환하지만 정의하지 않았다고 정의했습니다.

if (obj && typeof obj.property !== 'undefined') { 
    // yep, it's defined (and not just "falsey") 
} else { 
    // nope 
} 
1

먼저 당신이 개체 자체가 정의 여부를 확인해야한다 :

는 지름길로서, 당신은이 구문을 사용할 수 있습니다. 존재하지 않는 개체의 속성이나 변수에 연결할 수 없습니다. 그렇지 않으면 코드가 깨집니다.

0

당신은 당신이 벤 독일어의 getObjectsetObject 볼 수있는이를 단순화하려면 :

http://benalman.com/projects/jquery-getobject-plugin/

var myObj = {}; 

// Setting. 
Cowboy.setObject('a.b.c', { d: 1, e: 2 }, myObj); // returns a.b.c reference 

// myObj is now { a: { b: { c: { d: 1, e: 2 } } } } 

// Getting. 
Cowboy.getObject('a.b.c.d', myObj); // returns 1 
Cowboy.getObject('a.b.c.x', myObj); // returns undefined 
Cowboy.getObject('a.b.c.d.x', myObj); // returns undefined 

// Testing. 
Cowboy.exists('a.b.c.d', myObj); // returns true 
Cowboy.exists('a.b.c.x', myObj); // returns false 
Cowboy.exists('a.b.c.d.x', myObj); // returns false 

// I'm not sure why you'd want to do something like this, but it's 
// certainly possible... 
Cowboy.setObject('document.body.style.display', 'none'); 
Cowboy.getObject('document.body.style.display'); // returns 'none' 
0

실제로을 사용하는 것이 가장 다음 속성의 존재 여부를 확인하는 경우 엄밀히 말하면 다음 코드 :

if (Object && "property" in Object) { 
    // defined 
} else { 
    // nope 
} 

이유는 속성이 있지만 값 "undefined".

자세한 정보 확인 here

관련 문제