当页面第一次加载时,我需要检查image_array中是否有图像,并加载最后一张图像。

否则,我禁用预览按钮,提醒用户按新的图像按钮,并创建一个空数组来放置图像;

问题是else中的image_array一直被触发。如果一个数组存在-它只是覆盖它,但警报不工作。

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; ?>

当前回答

当你创建image_array时,它是空的,因此你的image_array。长度为0

正如下面的评论所述,我根据这个问题的答案编辑了我的答案):

var image_array = []

在else括号内,不会对前面代码中定义的image_array进行任何更改

其他回答

JavaScript

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )

Lodash & Underscore

( _.isArray(myArray) && myArray.length > 0 )

可选的链接

随着可选链接提议达到了第4阶段,并得到了更广泛的支持,有一种非常优雅的方式可以做到这一点

if(image_array?.length){

  // image_array is defined and has at least one element

}

你应该使用:

  if (image_array !== undefined && image_array.length > 0)

可能你的image_array不是数组,而是一些对象的长度属性(如字符串)-尝试

if(image_array instanceof Array && image_array.length)

函数测试(image_array) { if(image_array instanceof Array && image_array.length) { Console.log (image_array,'-它不是空数组!') }其他{ Console.log (image_array,'-它是空数组或根本不是数组!') } } 测试({长度:5}); 测试(“定义”); 测试([]); 测试((“abc”));

你可以使用jQuery的isEmptyObject()来检查数组是否包含元素。

var testArray=[1,2,3,4,5]; 
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true 

来源:https://api.jquery.com/jQuery.isEmptyObject/