Ответ 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
}
Чтобы сломать это:
-
Array.isArray()
проверяет, является ли его аргумент массивом. Это отсеивает такие значения, какnull
,undefined
и все, что не является массивом.
Обратите внимание, что это также устранит объекты, похожие на массивы, такие как объектarguments
и объекты DOMNodeList
. В зависимости от вашей ситуации это может не соответствовать вашему поведению. -
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
}