2012-02-25 4 views
0

여러 속성을 가질 수있는 전역 개체 MyFruits가 있습니다. 최소한 사과와 오렌지의 두 가지 속성이 있습니다. 나는 이것이이 두 가지 이상의 속성을 가지고 있는지 알아야합니다.자바 스크립트 테스트 개체 속성

잠시 동안 MyFruits의 문자열을 지정하고 Apples 및 Oranges 속성만으로 새 개체를 만들고 문자열을 지정하고 두 문자열의 길이를 비교합니다. 이런 식으로 뭔가 : 제대로 작동 것처럼 지금은

var JsonString1 = JSON.stringify(MyFruits); 

var test2 = new Object(); 
test2.Apples= MyFruits.Apples; 
test2.Oranges= MyFruits.Oranges; 

var JsonString2= JSON.stringify(test2); 

alert(JsonString1.length - JsonString2.length); 

, 그것은 처음에 보인다 MyFruits 단지 두 가지 주요 것들보다 더 많은 속성이 포함 된 경우, 길이의 차이가 Object.keys(obj).length있다 0

다른 것 메서드는 객체의 속성 수를 계산할 수 있지만 모든 브라우저에서 지원되지 않는 새로운 기능이므로 사용하지 않을 것입니다.

이렇게하는 것이 가장 좋은 방법입니까? 더 좋은 방법이 있는지 알려주세요.

의견을 보내 주셔서 감사합니다.

+0

참조 : https://github.com/kriskowal/es5-shim –

+0

개체의 속성 수를 계산 하시겠습니까? –

답변

2

대신 객체 직렬화, 당신은 개체를 통해 더 나은 루프를 거라고, 그리고 Apples 또는 Oranges 아닌 모든 속성이 있는지 확인하십시오 당신 만의 열거 키를 원하는 경우

for (var i in MyFruits) { 
    if (MyFruits.hasOwnProperty(i) && i !== 'Apples' && i !== 'Oranges') { 
     throw 'Not expected!'; // Do something, eg: error_flag=true;break; 
    } 
} 
3

두 개 이상의 등록 정보가 있는지 보려면 등록 정보를 열거하고 2 개 이상 있는지 확인하십시오.

var count = 0; 
for (var name in test2) { 
    if (test2.hasOwnProperty(name)) { 
    count++; 
    if (count > 2) { 
     break; 
    } 
    } 
} 

if (count > 2) { 
    // Has more than 2 properties 
} 
+0

또한'count' 변수를'name! = 'Apples'&& name! = 'Oranges''를 찾는 if 문으로 대체 할 수 있습니다. – djd

+0

@Dave true, 이것이 올바른 방법입니다. – JaredPar

0

개체, 나는 (모든 주요 브라우저에서 사용할 수없는) JSON 개체를 사용하는 대신 Object.keys()가 구현되지 않은 경우 Object를 확장하는 것을 고려할 것입니다.

if (typeof Object.keys === 'undefined') { 

    Object.keys = function (obj) { 

     var keys = []; 
     for (var property in obj) { 
      keys.push(property); 
     } 

     return keys; 

    } 

} 

지금 당신은 항상 Object.keys(yourObject)를 호출하고 객체 키의 목록을 얻을 수있을 것입니다.

+0

기본 JSON을 지원하지 않는 유일한 "주요 브라우저"는 IE7-입니다. JSON : [호환성 테이블] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON#Browser_compatibility)도 참조하십시오. –

+0

@RobW 그래서? 내 진술은 여전히 ​​유효합니다. IE7은 불행히도 여전히 웹 개발자가 목표로 삼아야 할 곳입니다. –

+0

귀하의 진술을 무효화하지 않았습니다. 나는 IE가 유일한 "주요 브라우저"(약 3-6 %의 시장 점유율 ([3.34] (http://gs.statcounter.com/#browser_version-ww-monthly-201202-201202-bar)를 가지고 있음)) - [5.93] (http://www.w3counter.com/globalstats.php?year=2012&month=1) - [4] (http://www.getclicky.com/marketshare/global/web-browsers/internet -explorer /))). –