Проверить пустую карту

У меня есть интересный вопрос, который, я уверен, легко объясняется, но объяснение ускользает от меня.

An undefined или нулевой объект в javascript равен false.

var x;
alert(!x); //returns true
alert(x==true); //returns false

Как насчет пустого объекта массива? Это эквивалент true или false?

var x = [];
alert (x==true); //returns false
alert (!x); //returns false

Если это эквивалентно true, как проверить, не является ли он пустым? Я надеялся сделать

if (!x) {
    //do stuff
}

Я попытался проверить x.length, но я использую этот объект в качестве карты:

var x = [];
alert(x.length); //returns 0
x.prop = "hello"; 
alert(x.length); //still returns 0

Как проверить, пуста ли моя карта?

Ответ 1

Немного смущается, поскольку вы, кажется, смешиваете объекты и массивы в своем вопросе. Надеюсь, это поможет вам разобраться.

Пустой массив вычисляет значение true:

!![] //true

Но целое число 0 оценивается как false, поэтому вы можете сделать:

!![].length //false

Итак:

if([].length) {
   //array has 1 element at least
} else {
  //array has 0 elements
}

Однако, похоже, вы сбиваете с толку массивы и объекты. В JavaScript у нас есть объекты:

var x = {};
x.foo = "bar";
x.baz = 2;

И у нас есть массивы:

var x = [];
x.push("foo");
x.length //1

Вы не можете делать то, что делаете в своем открывателе:

var x = []; //x is an array
x.foo = "bar"; //can't do this on an array
x.length; // 0 

Ответ 2

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

jQuery предоставляет isEmptyObject для этой цели:

function isEmptyObject( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

Использование образца:

> var x = [];
> x.prop = "hello"; 
> isEmptyObject(x);
false

Ответ 3

если вы используете JQuery

jQuery.isEmptyObject(obj)

Если нет, вы можете реализовать свой собственный

isEmptyObject = function(obj) {
for (key in obj) {
    if (obj.hasOwnProperty(key)) return false;
}
return true;
};

Ответ 4

Прежде всего, вы используете Array, а не карту. Карта будет экземпляром объекта:

var x = {};
x.prop = "5";

Ваш код действителен, так как массивы также являются объектами. Вы можете проверить, пуст ли ваш объект в ответ на этот вопрос.

Ответ 5

Если вы используете собственный JS Map<K, V> Object, вы можете просто использовать API-интерфейс карты Документы Mozilla.

В частности, существует свойство Map.prototype.size, а также метод Map.prototype.entries(), который, как мне кажется, возвращает Array [] ключей. Если это length 0, то отображение пуст.

Ответ 6

* Если пустой список даст true (if (array1)).

* x.prop на самом деле не добавляет никаких элементов в массив, он просто присваивает значение "hello" свойству x массива, но массив по-прежнему пуст. Поэтому вы все равно должны использовать .length для проверки, что массив пуст.