Когда страница загружается в первый раз, мне нужно проверить, есть ли изображение, image_array
и загрузить последнее изображение.
В противном случае я отключаю кнопки предварительного просмотра, предупреждаю пользователя о необходимости нажать кнопку нового изображения и создаю пустой массив для размещения изображений;
Проблема в том, что image_array
в else
кострах все время. Если массив существует - он просто переопределяет его, но оповещение не работает.
if(image_array.length > 0)
$('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
$('#prev_image').attr('disabled', 'true');
$('#next_image').attr('disabled', 'true');
alert('Please get new image');
var image_array = [];
}
ОБНОВЛЕНИЕ Перед загрузкой HTML, у меня есть что-то вроде этого:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
javascript
jquery
user1564141
источник
источник
image_array
- что вы получаете?Ответы:
Ваша проблема может возникать из-за сочетания неявных глобальных переменных и перемещения переменных. Убедитесь, что вы используете
var
каждый раз при объявлении переменной:И затем убедитесь, что вы случайно не переопределите эту переменную позже:
источник
image_array.length
достаточно? (без указания>0
)if (image_array && image_array.length){ // array exists and has elements
Проверить, является ли массив пустым или нет
Современный способ, ES5 +:
Старый школьный путь:
Компактный способ:
Способ CoffeeScript:
Почему?
Case Undefined
Undefined variable - это переменная, которой вы еще ничего не присвоили.
Случай Нуль
Вообще говоря, ноль - это состояние отсутствия значения. Например, переменная равна нулю, если вы пропустили или не смогли получить некоторые данные.
Case Not Array
Javascript имеет динамическую систему типов. Это означает, что мы не можем гарантировать, какой тип объекта содержит переменная. Есть вероятность, что мы не говорим об одном экземпляре
Array
.Case Empty Array
Теперь, когда мы протестировали все другие возможности, мы говорим об экземпляре
Array
. Чтобы убедиться, что он не пустой, мы спрашиваем о количестве элементов, которые он содержит, и проверяем, чтобы в нем было больше нуля элементов.источник
(typeof array != "undefined" && array.length > 0)
потому что , еслиarray
равно нулю , мы получимTypeError: Cannot read property 'length' of null
.!(typeof array !== "undefined") || !(array.length > 0)
? Только что попробовал, получил ту же ошибку. Можете ли вы дать нам полный пример того, как использовать||
?(typeof array != "undefined" || array.length > 0)
(typeof array != "undefined" || array.length > 0)
возвращается ,true
еслиarray = null
.!(typeof array != "undefined" || array.length > 0)
возвращается ,false
еслиarray = [1,2]
. Извините, что не понимаю, но @Elsa не могли бы вы привести рабочий пример? Заранее спасибо.Как насчет (ECMA 5.1):
источник
.. && image_array.length)
. ИМХО, хотя вы можете смело полагаться на свободную типизацию JS для преобразования целого0
числа в целоеfalse
иnon-zero
целое числоtrue
, я считаю, что для удобства чтения в будущем предпочтительнее «сказать, что вы имеете в виду». Я бы сделал.. && image_array.length > 0)
.Это то, что я использую. Первое условие охватывает истину, которая имеет как нулевое, так и неопределенное значение. Второе условие проверяет наличие пустого массива.
или благодаря комментарию Цемера я добавил вторую версию
Затем я сделал тест для второго условия, используя Scratchpad в Firefox:
что также доказывает это
if(array2 && array2.length)
иif(array2 && array2.length > 0)
делает то же самоеисточник
if (arrayName && arrayName.length)
var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0
типа для isNotEmpty не будет логическим, это будет логическим | undefined.Вы должны использовать:
источник
Если вы хотите проверить, была ли определена переменная массива изображения, вы можете сделать это следующим образом
источник
JavaScript
Лодаш и Подчеркивание
источник
Вы можете использовать jQuery
isEmptyObject()
для проверки, содержит ли массив элементы или нет.Источник: https://api.jquery.com/jQuery.isEmptyObject/
источник
Простой способ, который не приводит к исключениям, если они не существуют, и конвертируется в логическое значение:
Пример:
источник
Как насчет этого ? проверка длины неопределенного массива может вызвать исключение.
источник
if
можно избежать, используя&&
, как вimage_array && image_array.length
случае короткого замыкания, еслиimage_array
не существует.Я уверен, что некоторые из высоко оцененных ответов «работают», когда я помещаю их в jsfiddle, но когда у меня есть динамически генерируемый список массивов, большая часть этого кода в ответах просто не работает для меня.
Это то, что работает для меня.
Заметьте, НЕТ кавычек не определено, и я не беспокоюсь о длине.
источник
typeof
возвращает строку, сравнениеundefined
всегда будет нечетким 2) вы не проверяете,from
определен ли он. ваш код выше выдаст ошибку, если это не такопциональная цепочка
Поскольку необязательное предложение по цепочке достигло стадии 4 и получило более широкую поддержку, есть очень элегантный способ сделать это
источник
Я часто сталкиваюсь с этой проблемой в Javascript. Для меня лучший способ сделать это - поставить очень широкую проверку перед проверкой длины. Я видел некоторые другие решения в этом Q & A, но я хотел , чтобы иметь возможность проверить любой
null
илиundefined
или любое другое ложное значение.Это будет первым проверить
undefined
,null
или другие ложные ценности. Если какой-либо из них верен, он завершит логическое значение, так как этоOR
. Затем можно проверить более рискованную проверкуarray.length
, которая может привести к ошибке, если массив не определен. Это никогда не будет достигнуто, еслиarray
естьundefined
илиnull
, поэтому порядок условий очень важен.источник
Используя undescore или lodash :
_.isArray(image_array) && !_.isEmpty(image_array)
источник
Вот моя скрипка, используемая для изучения этой проблемы ( источник )
источник
Если у вас нет переменной, объявленной как массив, вы можете создать проверку:
Это проверяет, существует ли переменная x, и если это так, проверяет, является ли она заполненным массивом. иначе он создает пустой массив (или вы можете делать другие вещи);
Если вы уверены, что переменная массива создана, выполните простую проверку:
Вы можете проверить мою скрипку здесь, показывая наиболее возможные способы проверки массива.
источник
Вы должны сделать это
источник
Я думаю, что этот простой код будет работать:
источник
в тс
в HTML
(photos == undefined ||! (isArray (photos) && photos.length> 0))
источник
Когда вы создаете свой image_array, он пуст, поэтому ваш image_array.length равен 0
Как указано в комментарии ниже, я редактирую свой ответ на основе ответа на этот вопрос ):
внутри скобок else ничего не меняется на image_array, определенный ранее в коде
источник
[]var image_array = []
внутри блока else, я не уверен, что его можно увидеть снаружи. Попробуйтеimage_array = []