检查数组是否为空或存在检查数组是否为空

2022-08-29 23:07:10

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

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

问题是,在火灾中无时无刻不在。如果数组存在 - 它只是覆盖它,但警报不起作用。image_arrayelse

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

答案 1
if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

您的问题可能是由于隐式全局变量和变量提升的混合而发生的。确保在声明变量时使用:var

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here

然后确保以后不会意外地重新声明该变量:

else {
    ...
    image_array = []; // no var here
}

答案 2

检查数组是否为空

一种现代方式,ES5+:

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}

一种老派的方式:

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

紧凑的方式:

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

咖啡脚本方式:

if array?.length > 0

为什么?

案例未定义
未定义变量是您尚未为其分配任何内容的变量。

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

案例 Null
一般来说,null 是缺少值的状态。例如,当您错过或未能检索某些数据时,变量为 null。

array = searchData();  // can't find anything
array == null;         // => true

Case Not a Array
Javascript 有一个动态类型系统。这意味着我们无法保证变量包含哪种类型的对象。我们有可能没有与 的实例交谈。Array

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"

案例空数组
现在,由于我们测试了所有其他可能性,因此我们正在与 的实例进行交谈。为了确保它不是空的,我们询问它所包含的元素数量,并确保它的元素超过零个。Array

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true