当页面第一次加载时,我需要检查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; ?>
检查数组是否为空
一个现代的方式,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
}
CoffeeScript方式:
if array?.length > 0
Why?
情况下定义
未定义变量是一个你还没有给它赋值的变量。
let array = new Array(); // "array" !== "array"
typeof array == "undefined"; // => true
情况下空
一般来说,null是缺少值的状态。例如,当您错过或未能检索某些数据时,变量为空。
array = searchData(); // can't find anything
array == null; // => true
Case不是数组
Javascript有一个动态类型系统。这意味着我们不能保证变量持有什么类型的对象。有可能我们不是在与Array的实例对话。
supposedToBeArray = new SomeObject();
typeof supposedToBeArray.length; // => "undefined"
array = new Array();
typeof array.length; // => "number"
Case空数组
现在,由于我们测试了所有其他可能性,我们正在与Array的一个实例对话。为了确保它不是空的,我们询问它所持有的元素的数量,并确保它的元素大于0。
firstArray = [];
firstArray.length > 0; // => false
secondArray = [1,2,3];
secondArray.length > 0; // => true
你可以使用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/
如果你没有一个变量声明为数组,你可以创建一个检查:
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');
}
你可以检查我的提琴这里显示最可能的方法来检查数组。
这就是我用的。第一个条件包含true,它有null和undefined。第二个条件检查空数组。
if(arrayName && arrayName.length > 0){
//do something.
}
或者感谢tsemer的评论,我添加了第二个版本
if(arrayName && arrayName.length)
然后我在Firefox中使用Scratchpad对第二个条件进行了测试:
var array1;
Var array2 = [];
Var array3 = ["one", "two", "three"];
Var array4 = null;
console.log (array1);
console.log (array2);
console.log (array3);
console.log (array4);
If (array1 && array1.length) {
console.log(“array1 !有价值!”);
}
If (array2 && array2.length) {
console.log(“array2 !有价值!”);
}
If (array3 && array3.length) {
console.log(“array3 !有价值!”);
}
If (array4 && array4.length) {
console.log(“array4 !有价值!”);
}
这也证明了if(array2 && array2.length)和if(array2 && array2.length)长度> 0)完全相同
下面是我的解决方案包装在一个函数,也抛出
错误来管理对象范围和所有类型的几个问题
传递给函数的可能数据类型。
这是我用来研究这个问题的小提琴(来源)
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);
}