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

Javascript 检查数组是否为空或是否存在,javascript,jquery,arrays,Javascript,Jquery,Arrays,第一次加载页面时,我需要检查image\u array中是否有图像,然后加载最后一个图像 否则,我禁用预览按钮,提醒用户按下新图像按钮,并创建一个空数组来放置图像 问题是else中的image\u数组一直处于激发状态。如果数组存在-它只是覆盖它,但警报不起作用 if(image_array.length > 0) $('#images').append('<img src="'+image_array[image_array.length-1]+'" class="image

第一次加载页面时,我需要检查
image\u array
中是否有图像,然后加载最后一个图像

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

问题是
else
中的
image\u数组一直处于激发状态。如果数组存在-它只是覆盖它,但警报不起作用

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 = [];
}
if(image\u array.length>0)
$(“#图像”)。追加(“”);
否则{
$('prev#u image').attr('disabled','true');
$('next_image').attr('disabled','true');
警报(“请获取新图像”);
var image_数组=[];
}
更新 在加载html之前,我有如下内容:

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>

创建图像数组时,它是空的,因此图像数组的长度为0

如以下评论所述,我根据以下内容编辑我的答案:

在else括号内,不会更改之前在代码中定义的图像数组的任何内容

您应该使用:

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

如果要测试image数组变量是否已定义,可以这样做

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}
您的问题可能是由于隐式全局变量和变量的混合而发生的。确保在声明变量时使用
var

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here
检查数组是否为空 现代方式,ES5+:

if(Array.isArray(Array)和&Array.length){
//数组存在且不为空
}
老派的方式:

typeof数组!=“未定义”
&&阵列!=无效的
&&array.length!=无效的
&&数组长度>0
紧凑的方式:

if(数组类型!=“未定义”&&array!=null&&array.length!=null&&array.length>0){
//数组存在且不为空
}
一种咖啡方式:

if数组?.length>0

为什么? 未定义大小写
未定义变量是一个尚未分配任何内容的变量

let array=new array();//“数组”!==“数组”
数组类型==“未定义”/>真的
大小写为空
一般来说,null是缺少值的状态。例如,当您丢失或检索某些数据失败时,变量为null

array=searchData();//什么也找不到
数组==null;//=>真的
大小写不是数组
Javascript有一个动态类型系统。这意味着我们不能保证一个变量包含什么类型的对象。我们可能不是在讨论
数组的实例

EssentialdTobeArray=newsomeObject();
假定的TypedTobeArray.length;//=>“未定义”
数组=新数组();
数组的类型。长度;//=>“数字”
大小写空数组
现在,由于我们测试了所有其他可能性,我们正在讨论
Array
的一个实例。为了确保它不是空的,我们询问它包含的元素的数量,并确保它包含的元素多于零

firstArray=[];
firstArray.length>0;//=>假的
secondArray=[1,2,3];
secondArray.length>0;//=>真的

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

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

来源:

如果未将变量声明为数组,则可以创建检查:

if(x && x.constructor==Array && x.length){
   console.log("is array and filed");
}else{
    var x= [];
    console.log('x = empty array');
}
这将检查变量x是否存在,如果存在,则检查它是否为填充数组。否则它会创建一个空数组(或者你可以做其他事情)

如果您是确定的创建了一个数组变量,则有一个简单的检查:

var x = [];

if(!x.length){
    console.log('empty');
} else {
    console.log('full');
}

您可以查看显示了检查数组的最可能的方法。

对于我来说,当我将一些高评级的答案放入JSFIDLE时,它们肯定会“起作用”,但当我有一个动态生成的数组列表时,答案中的许多代码对我来说根本不起作用

这正是对我有效的方法。

var from = [];

if(typeof from[0] !== undefined) {
  //...
}
请注意,未定义的周围没有引号,我也不担心长度。

如何(ECMA 5.1):

你应该这样做

    if (!image_array) {
      // image_array defined but not assigned automatically coerces to false
    } else if (!(0 in image_array)) {
      // empty array
      // doSomething
    }

这是我用的。第一个条件包括truthy,它既有null,也有undefined。第二个条件检查是否存在空数组

if(arrayName && arrayName.length > 0){
    //do something.
}
或者感谢tsemer的评论,我添加了第二个版本

if(arrayName && arrayName.length)
然后,我使用Firefox中的Scratchpad对第二个条件进行了测试:

var数组1;
var array2=[];
var array3=[“一”、“二”、“三”];
var array4=null;
控制台日志(array1);
控制台日志(array2);
控制台日志(array3);
控制台日志(array4);
if(array1&&array1.length){
log(“array1!有一个值!”);
}
if(array2&&array2.length){
log(“array2!有一个值!”);
}
if(array3&&array3.长度){
log(“array3!有一个值!”);
}
if(array4&&array4.length){
log(“array4!有一个值!”);

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

if(!array || array.length == 0){
    console.log("Array is either empty or does not exist")
}
这将首先检查
未定义
空值
或其他假值。如果其中任何一个为真,它将完成布尔运算,因为这是一个
。然后,可以检查对
array.length
进行的风险更高的检查,如果数组未定义,则可能会使我们出错。如果
数组
未定义的
空的
,则永远无法达到此目的,因此条件的顺序非常重要。

使用或:


.isArray(图像数组)&&&&。isEmpty(图像数组)

一种简单的方法,如果不存在,则不会导致异常,并将其转换为布尔值:

!!array
例如:

if (!!arr) {
  // array exists
}

这个怎么样?检查未定义数组的长度可能引发异常

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}
JavaScript

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )
Lodash&下划线

( _.isArray(myArray) && myArray.length > 0 )
在ts中

在html中

(照片)
if (!!arr) {
  // array exists
}
if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}
( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )
( _.isArray(myArray) && myArray.length > 0 )
 isArray(obj: any) 
{
    return Array.isArray(obj)
  }
var jill = [0];
var jack;
//"Uncaught ReferenceError: jack is not defined"

//if (typeof jack === 'undefined' || jack === null) {
//if (jack) {
//if (jack in window) {
//if (window.hasOwnP=roperty('jack')){
//if (jack in window){

function isemptyArray (arraynamed){
    //cam also check argument length
  if (arguments.length === 0) { 
    throw "No argument supplied";
  }

  //console.log(arguments.length, "number of arguments found");
  if (typeof arraynamed !== "undefined" && arraynamed !== null) {
      //console.log("found arraynamed has a value");
      if ((arraynamed instanceof Array) === true){
        //console.log("I'm an array");
        if (arraynamed.length === 0) {
            //console.log ("I'm empty");
            return true;
        } else {
          return false;
        }//end length check
      } else {
        //bad type
        throw "Argument is not an array";
      } //end type check
  } else {
    //bad argument
    throw "Argument is invalid, check initialization";;
  }//end argument check
}

try {
  console.log(isemptyArray(jill));
} catch (e) {
    console.log ("error caught:",e);
}
if(!(image_array<=0)){
//Specify function needed
}
if(image_array instanceof Array && image_array.length)
    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);