Lorsque la page se charge pour la première fois, je dois vérifier s'il y a une image dans image_array
et charger la dernière image.
Sinon, je désactive les boutons de prévisualisation, alerte l'utilisateur de pousser le nouveau bouton d'image et crée un tableau vide pour mettre les images;
Le problème est que image_array
dans les else
incendies tout le temps. Si un tableau existe - il le remplace simplement, mais l'alerte ne fonctionne pas.
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 du HTML, j'ai quelque chose comme ceci:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
javascript
jquery
user1564141
la source
la source
image_array
- qu'obtenez-vous?Réponses:
Votre problème peut se produire en raison d'un mélange de variables globales implicites et de levage de variables. Assurez-vous d'utiliser
var
chaque fois que vous déclarez une variable:Et puis assurez-vous de ne jamais redéclarer accidentellement cette variable plus tard:
la source
image_array.length
suffit pas ? (sans préciser>0
)if (image_array && image_array.length){ // array exists and has elements
Pour vérifier si un tableau est vide ou non
Une manière moderne, ES5 +:
Une façon old-school:
Une manière compacte:
Une façon CoffeeScript:
Pourquoi?
Case Undefined
Undefined variable est une variable à laquelle vous ne lui avez encore rien attribué.
Case Null
D'une manière générale, null est l'état de manque de valeur. Par exemple, une variable est nulle lorsque vous avez manqué ou échoué à récupérer certaines données.
Case Not an Array
Javascript a un système de type dynamique. Cela signifie que nous ne pouvons pas garantir quel type d'objet contient une variable. Il est possible que nous ne parlions pas d'une instance de
Array
.Case Empty Array
Maintenant que nous avons testé toutes les autres possibilités, nous parlons d'une instance de
Array
. Afin de nous assurer qu'il n'est pas vide, nous demandons le nombre d'éléments qu'il contient et nous assurons qu'il contient plus de zéro élément.la source
(typeof array != "undefined" && array.length > 0)
car s'ilarray
est nul, nous l'obtiendronsTypeError: Cannot read property 'length' of null
.!(typeof array !== "undefined") || !(array.length > 0)
? Je viens de l'essayer, j'ai la même erreur. Pouvez-vous nous donner un exemple complet de la façon d'utiliser||
?(typeof array != "undefined" || array.length > 0)
(typeof array != "undefined" || array.length > 0)
renvoietrue
ifarray = null
.!(typeof array != "undefined" || array.length > 0)
renvoiefalse
ifarray = [1,2]
. Désolé de ne pas comprendre, mais @Elsa pouvez-vous fournir un exemple de travail? Merci d'avance.Que diriez-vous (ECMA 5.1):
la source
.. && image_array.length)
. À mon humble avis, alors que vous pouvez compter en toute sécurité sur le typage lâche de JS, pour convertir un0
entier enfalse
et unnon-zero
entier entrue
, je considère préférable, pour plus de lisibilité à l'avenir, de "dire ce que vous voulez dire". Je le ferais.. && image_array.length > 0)
.C'est ce que j'utilise. La première condition couvre la vérité, qui est à la fois nulle et non définie. La deuxième condition vérifie la présence d'un tableau vide.
ou grâce au commentaire de tsemer j'ai ajouté une deuxième version
Ensuite, j'ai fait un test pour la deuxième condition, en utilisant Scratchpad dans Firefox:
ce qui prouve cela
if(array2 && array2.length)
etif(array2 && array2.length > 0)
fait exactement la même chosela source
if (arrayName && arrayName.length)
var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0
type pour isNotEmpty ne serait pas booléen, il serait booléen | non défini.Tu devrais utiliser:
la source
Si vous voulez tester si la variable du tableau d'images a été définie, vous pouvez le faire comme ceci
la source
Javascript
Lodash & Underscore
la source
Vous pouvez utiliser jQuery
isEmptyObject()
pour vérifier si le tableau contient des éléments ou non.Source: https://api.jquery.com/jQuery.isEmptyObject/
la source
Un moyen simple qui ne génère pas d'exceptions s'il n'existe pas et convertit en booléen:
Exemple:
la source
Que dis-tu de ça ? la vérification de la longueur d'un tableau non défini peut générer une exception.
la source
if
peut être évité en utilisant&&
, comme dansimage_array && image_array.length
, il court-circuitera s'ilimage_array
n'existe pas.Pour moi, certaines des réponses les mieux notées "fonctionnent" lorsque je les mets dans jsfiddle, mais lorsque j'ai une quantité de liste de tableaux générée dynamiquement, une grande partie de ce code dans les réponses ne fonctionne tout simplement pas pour moi.
C'est ce qui fonctionne pour moi.
Remarquez, PAS de guillemets indéfinis et je ne me soucie pas de la longueur.
la source
typeof
renvoie une chaîne, la comparaison avecundefined
sera toujours flasy 2) vous ne vérifiez pas si ellefrom
est définie. votre code ci-dessuschaînage optionnel
Comme la proposition de chaînage facultative a atteint l'étape 4 et obtient un soutien plus large, il existe un moyen très élégant de le faire
la source
Je rencontre beaucoup ce problème en Javascript. Pour moi, la meilleure façon de le faire est de mettre un chèque très large avant de vérifier la longueur. J'ai vu d'autres solutions dans ce Q&R, mais je voulais pouvoir vérifier l'une
null
ou l' autreundefined
ou toute autre valeur fausse.Ce sera d' abord vérifier
undefined
,null
ou d' autres valeurs fausses. Si l'une d'entre elles est vraie, cela complètera le booléen car c'est unOR
. Ensuite, la vérification plus risquée dearray.length
, qui pourrait nous induire en erreur si le tableau n'est pas défini, peut être vérifiée. Cela ne sera jamais atteint siarray
estundefined
ounull
, donc l'ordre des conditions est très important.la source
Utilisation de Undescore ou Lodash :
_.isArray(image_array) && !_.isEmpty(image_array)
la source
Voici mon violon utilisé pour examiner ce problème ( source )
la source
Si vous n'avez pas de variable déclarée comme tableau, vous pouvez créer une vérification:
Cela vérifie si la variable x existe et si elle l'est, vérifie s'il s'agit d'un tableau rempli. sinon, il crée un tableau vide (ou vous pouvez faire d'autres choses);
Si vous êtes certain qu'une variable de tableau est créée, il suffit de vérifier:
Vous pouvez vérifier mon violon ici avec la plupart des façons possibles de vérifier le tableau.
la source
Vous devriez faire ceci
la source
Je pense que ce code simple fonctionnerait:
la source
en ts
en html
(photos == non défini ||! (isArray (photos) && photos.length> 0))
la source
Lorsque vous créez votre image_array, il est vide, donc votre image_array.length est 0
Comme indiqué dans le commentaire ci-dessous, je modifie ma réponse en fonction de la réponse à cette question ):
à l'intérieur des parenthèses else ne change rien à l'image_array définie auparavant dans le code
la source
[]var image_array = []
à l'intérieur du bloc else, je ne suis pas sûr qu'il puisse être vu à l'extérieur. Essayezimage_array = []