Подтвердить что ты не робот

Проверьте, является ли массив пустым или не существует. JS

Какой лучший способ проверить, является ли массив пустым или не существует?

Что-то вроде этого?

if(array.length < 1 || array == undefined){
    //empty
}
4b9b3361

Ответ 1

Сначала вы хотите проверить undefined. Если вы сделаете это наоборот, будет сгенерирована ошибка, если массив не определен.

if (array === undefined || array.length == 0) {
    // array empty or does not exist
}

Обновить

Этот ответ привлекает значительное внимание, поэтому я хотел бы отметить, что мой первоначальный ответ, более чем что-либо еще, касался неправильного порядка условий, оцениваемых в вопросе. В этом смысле в нем не рассматриваются несколько сценариев, таких как null значения, другие типы объектов со свойством length и т.д. Это также не очень идиоматический JavaScript.

Надежный подход
Вдохновившись комментариями, ниже приведен то, что я в настоящее время считаю надежным способом проверить, является ли массив пустым или не существует. Также учитывается, что переменная может относиться не к массиву, а к объекту другого типа со свойством length.

if (!Array.isArray(array) || !array.length) {
  // array does not exist, is not an array, or is empty
}

Чтобы сломать это:

  1. Array.isArray() проверяет, является ли его аргумент массивом. Это отсеивает такие значения, как null, undefined и все, что не является массивом.
    Обратите внимание, что это также устранит объекты, похожие на массивы, такие как объект arguments и объекты DOM NodeList. В зависимости от вашей ситуации это может не соответствовать вашему поведению.

  2. array.length проверяет, соответствует ли свойство переменной length истинному значению. Поскольку предыдущее условие уже установило, что мы действительно имеем дело с массивом, более строгие сравнения, такие как array.length != 0 или array.length !== 0 здесь не требуются.

Прагматичный подход
Во многих случаях вышесказанное может показаться излишним. Возможно, вы используете язык более высокого порядка, такой как TypeScript, который выполняет большую часть проверки типов во время компиляции, или вам действительно все равно, является ли объект массивом или просто похожим на массив.

В этих случаях я склоняюсь к следующему, более идиоматическому JavaScript:

if (!array || !array.length) {
    // array and array.length are not falsy
}

Или, чаще, его обратное:

if (array && array.length) {
    // array and array.length are truthy
}