2012-02-25 11 views
0

У меня есть глобальный объект MyFruits, который может иметь несколько свойств. Как минимум, у него есть два свойства: яблоки и апельсины. Мне нужно выяснить, есть ли у него больше свойств, чем только эти два.Свойства объекта тестирования javascript

На данный момент я строю MyFruits, создаю новый объект только с свойствами Яблок и апельсинов и строгую его и сравниваю длину обеих строк. Что-то вроде этого:

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 содержит больше свойств, чем только два основных из них, разница длины будет отличаться от 0.

Там в Object.keys(obj).length метод, который может подсчитывать количество свойств объекта, но он новый и не поддерживается во всех браузерах, поэтому я не буду его использовать.

Это лучший способ сделать это? Дайте мне знать, если есть лучший способ.

Спасибо за ваши предложения.

+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

Чтобы увидеть, имеет ли он более двух объектов, просто перечислите свойства и посмотрите, присутствует ли более двух.

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' инструкцией if, которая ищет' name! = 'Яблоки' && name! = 'Oranges''. – djd

+0

@Dave true, это еще один правильный способ сделать это. – JaredPar

0

Если вы хотите только перечисляемые ключи объект, я бы рассмотрел возможность расширения Object, когда Object.keys(), если он не реализован, вместо использования объекта JSON (который также недоступен во всех основных браузерах).

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 /))), который не поддерживает родной JSON. –

Смежные вопросы