2010-08-06 4 views
26

Можно создать дубликат:
How do I test for an empty Javascript object from JSON?Javascript: Проверка, если объект не имеет свойств, или если карта/ассоциативно-массив пуст

Есть простой способ проверить, если объект не имеет свойств, в Javascript? Или, другими словами, простой способ проверить, является ли карта/ассоциативный массив пустым? Например, предположим, что у вас было следующее:

var nothingHere = {}; 
var somethingHere = {foo: "bar"}; 

Есть ли простой способ узнать, какой из них «пуст»? Единственное, что я могу думать о чем-то вроде этого:

function isEmpty(map) { 
    var empty = true; 

    for(var key in map) { 
     empty = false; 
     break; 
    } 

    return empty; 
} 

Есть ли лучший способ (как родной собственности/функции или что-то)?

+0

Dupe - http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –

+0

@ Даниэль - спасибо за ссылку на этот вопрос. Я попытался найти SO, но ничего не нашел. Моды - пожалуйста, закройте этот вопрос. Благодаря! –

+0

Я бы пошел с решением chryss за вас из-за вызова hasOwnProperty. Если что-то расширяет прототип объекта (что-то много библиотек), ваш метод больше не вернет правильные результаты, так как он будет читать унаследованные свойства. –

ответ

40

Попробуйте это:

function isEmpty(map) { 
    for(var key in map) { 
     return !map.hasOwnProperty(key); 
    } 
    return true; 
} 

Ваше решение работает, тоже, но только если нет библиотеки расширения Object прототипа. Это может быть или не быть достаточно хорошим.

+0

Вызов 'hasOwnProperty' здесь очень важен, если какие-либо библиотеки запутываются с прототипом' Object'. +1 –

+0

Спасибо. Я поставил это замечание в решении - я давно принял вызов hasOwnPrototype и даже не думал об этом. – chryss

+1

вы даже не думали об этом больше и на самом деле вы назвали его hasOwnPrototype. лол – Zo72