Pour le chargement de la première page, je dois vérifier s'il y a image_array
charger la dernière image, sinon bloquer les boutons d'aperçu alerter l'utilisateur au bouton Push new image; créer un tableau vide pour y mettre des images;
Le problème est que image_array
dans la else
se déclenche tout le temps. Si un tableau existe, il le remplace, mais le dosage des alertes fonctionne.
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 = [];
}
MISE À JOUR Avant de charger HTML, j'ai quelque chose comme ça
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
if (typeof image_array !== 'undefined' && image_array.length > 0) {
// the array is defined and has at least one element
}
Votre problème peut être dû à un mélange de variables globales implicites et de levage variable. Assurez-vous d'utiliser var
chaque fois que vous déclarez une variable:
<?php echo "var image_array = ".json_encode($images);?>
// add var ^^^ here
Et assurez-vous de ne jamais redéclarer cette variable par accident plus tard:
else {
...
image_array = []; // no var here
}
Remarque: utilisez non comme ceci, il existe un meilleur moyen de trouver si un tableau existe et qu'il n'est pas vide .
typeof array != "undefined"
&& array != null
&& array.length != null
&& array.length > 0
Version compacte
if(typeof array != "undefined" && array != null && array.length != null && array.length > 0){}
Version CoffeeScript
if array?.length > 0
Une variable indéfinie est une variable à laquelle vous n’avez encore rien assigné.
aray = new Array(); // "aray" !== "array"
typeof array == "undefined"; // => true
D'une manière générale, null est un état d'absence de valeur . Par exemple, une variable est nulle lorsque vous avez manqué ou échoué lors de l'extraction de certaines données.
array = searchData(); // can't find anything
array == null; // => true
Javascript a un système de type dynamique. Cela signifie que nous ne pouvons pas garantir le type d'objet qu'une variable détient.
Il est possible que nous ne parlions pas à une instance de Array
.
supposedToBeArray = new SomeObject();
typeof supposedToBeArray.length; // => "undefined"
array = new Array();
typeof array.length; // => "number"
Maintenant que nous avons testé toutes les autres possibilités, nous parlons d'une instance de Array
.
Afin de vous assurer que ce n'est pas vide, nous demandons le nombre d'éléments qu'il détient, et en vous assurant qu'il a plus de zéro élément.
firstArray = [];
firstArray.length > 0; // => false
secondArray = [1,2,3];
secondArray.length > 0; // => true
Qu'en est-il de (ECMA 5.1):
if(Array.isArray(image_array) && image_array.length){
// array exists and is not empty
}
Tu devrais utiliser:
if (image_array !== undefined && image_array.length > 0)
Si vous voulez vérifier si la variable de tableau d’images a été définie, vous pouvez le faire comme ceci:
if(typeof image_array === 'undefined') {
// it is not defined yet
} else if (image_array.length > 0) {
// you have a greater than zero length array
}
Vous pouvez utiliser la fonction isEmptyObject()
de jQuery pour vérifier si le tableau contient des éléments ou non.
var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true
JavaScript
( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )
Lodash & Underscore
( _.isArray(myArray) && myArray.length > 0 )
Pour moi, certaines des réponses les mieux notées "fonctionnent" lorsque je les mets dans jsfiddle, mais lorsque j'ai une quantité de tableaux générée dynamiquement, la plupart de ce code dans les réponses ne fonctionne tout simplement pas pour moi.
C'est ce que IS travaille pour moi.
var from = [];
if(typeof from[0] !== undefined) {
//...
}
Remarquez, PAS de citations non définies et je ne me soucie pas de la longueur.
Que dis-tu de ça ? vérifier la longueur d'un tableau non défini peut générer une exception.
if(image_array){
//array exists
if(image_array.length){
//array has length greater than zero
}
}
Je rencontre pas mal de problème en Javascript. Pour moi, la meilleure façon de le faire est de faire un test très large avant de vérifier la longueur. J'ai vu d'autres solutions dans ce Q & A, mais je voulais pouvoir vérifier si null
ou undefined
ou toute autre valeur fausse.
if(!array || array.length == 0){
console.log("Array is either empty or does not exist")
}
Cela vérifie d'abord undefined
, null
ou d'autres valeurs fausses. Si l'une d'entre elles est vraie, le booléen sera complet car il s'agit d'une OR
. Ensuite, la vérification plus risquée de array.length
, qui pourrait nous induire en erreur si le tableau n'est pas défini, peut être vérifiée. Ceci ne sera jamais atteint si array
est undefined
ou null
, la commande des conditions est donc très importante.
Si vous n'avez pas de variable déclarée en tant que tableau, vous pouvez créer une vérification:
if(x && x.constructor==Array && x.length){
console.log("is array and filed");
}else{
var x= [];
console.log('x = empty array');
}
Ceci vérifie si la variable x existe et si c'est le cas, vérifie s'il s'agit d'un tableau rempli. sinon, cela crée un tableau vide (ou vous pouvez faire d'autres choses);
Si vous êtes certain, une variable de tableau est créée. Une vérification simple:
var x = [];
if(!x.length){
console.log('empty');
} else {
console.log('full');
}
Vous pouvez vérifier mon violon ici avec montre la plupart des façons possibles de vérifier tableau.
Ce qui suit est ma solution intégrée dans une fonction qui génère également des erreurs pour gérer quelques problèmes liés à la portée des objets et à tous les types de types de données possibles transmis à la fonction.
Voici mon violon utilisé pour examiner ce problème ( source )
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);
}
Vous devriez faire ceci
if (!image_array) {
// image_array defined but not assigned automatically coerces to false
} else if (!(0 in image_array)) {
// empty array
// doSomething
}
Un moyen simple qui ne génère pas d'exceptions sinon existe et convertit en booléen:
!!array
Exemple:
if (!!arr) {
// array exists
}