当页面第一次加载时,我需要检查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不是数组,而是一些对象的长度属性(如字符串)-尝试

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”));

其他回答

我在Javascript中遇到过很多这样的问题。对我来说,最好的方法是在检查长度之前进行广泛的检查。我在这个问答中看到了一些其他的解决方案,但我希望能够检查null或未定义或任何其他假值。

if(!array || array.length == 0){
    console.log("Array is either empty or does not exist")
}

这将首先检查未定义、空值或其他假值。如果其中任何一个为真,它将完成布尔值,因为这是一个OR。然后是更危险的数组检查。长度,如果数组是未定义的,可能会出错,可以检查。如果数组未定义或为空,这将永远不会达到,因此条件的顺序非常重要。

我发现工作的方法(来自另一种语言)是做一个简单的函数来测试。

创建一个函数,检查数组的大小,并通过参数传递长度。

isEmpty(size){
        if(size==0) {
            return true;
        } else  {
            return false;
        }
    }

//then check
if(isEmpty(yourArray.length)==true){
            //its empty
        } else {
            //not empty
        }

如果你想测试图像数组变量是否已经定义,你可以这样做

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}

最好是这样检查:

    let someArray: string[] = [];
    let hasAny1: boolean = !!someArray && !!someArray.length;
    let hasAny2: boolean = !!someArray && someArray.length > 0; //or like this
    console.log("And now on empty......", hasAny1, hasAny2);

查看完整的样本列表:

JavaScript

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

Lodash & Underscore

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