Javascript-форум (https://javascript.ru/forum/)
-   Я не знаю javascript (https://javascript.ru/forum/ya-ne-znayu-javascript/)
-   -   работа с объектами (https://javascript.ru/forum/ya-ne-znayu-javascript/3934-rabota-s-obektami.html)

freebit 07.06.2009 16:19

работа с объектами
 
Ребята, добрый день всем! Подскажите пожалуйста, как проверить объект, созданый литералом т.е
var obj = {};

на пустоту, не используя конструкцию for... in..?

Спасибо!

Riim 07.06.2009 16:24

Вроде никак не выйдет.

Octane 07.06.2009 16:26

а чем for(… in …) не нравится?

freebit 07.06.2009 17:55

Конструкцию for(...in...) просто обожаю, но в моем случае слишком громоздко получается.

Riim 07.06.2009 17:59

Можно функцию написать. Вроде того:
Object.isBlank = function(obj) {
	if (obj == null) return false;
	if (obj instanceof Array || typeof obj == 'string') return !obj.length;
	var blank = new obj.constructor();
	for (var key in obj) if (!(key in blank) || obj[key] !== blank[key]) return false;
	return true;
};

Octane 07.06.2009 18:05

функция в 2 строчки, что там громоздкого
function isEmpty(obj) {
   for (var key in obj) return false;
   return true;
}

freebit 07.06.2009 18:59

Тоесть, если объект пустой, то конструкция for(var key in obj) просто не отработает?

Octane 07.06.2009 19:06

Ну так это самые основы :-) тело цикла ниразу не выполнится.

freebit 07.06.2009 19:17

Вот спасибо!

Dmitry A. Soshnikov 07.06.2009 21:34

В дополнение, лучше сделать проверку на if (obj.hasOwnProperty(key)), т.к. в Object.prototype может оказаться что-то, учитываемое при итерации for ... in (не имеющее {DontEnum}).


Часовой пояс GMT +3, время: 05:59.