如检查数组是否为空?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (116)

对于第一个加载页面,我需要检查是否有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; ?>
提问于
用户回答回答于

若要检查数组是否为空,请执行以下操作。

显式方式

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

紧凑方式

  if(typeof array != "undefined" && array != null && array.length > 0){}

CoffeeScript方式

  if array?.length > 0

为什么?

未定义

未定义变量是一个尚未分配任何内容的变量。

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

Null

一般来说,NULL是指缺少值的状态。例如,当你丢失或未能检索某些数据时,变量为NULL。

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

案例不是数组

JavaScript有一个动态类型系统。这意味着我们不能保证变量包含的对象类型。

There is a chance that we're not talking to an instance of `Array`.
supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

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

用户回答回答于
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
}

扫码关注云+社区

领取腾讯云代金券