usuario1564141
Cuando la página se carga por primera vez, necesito verificar si hay una imagen en image_array
y carga la última imagen.
De lo contrario, deshabilito los botones de vista previa, alerto al usuario para que presione el botón de nueva imagen y cree una matriz vacía para colocar las imágenes;
El problema es ese image_array
en el else
incendios todo el tiempo. Si existe una matriz, simplemente la anula, pero la alerta no funciona.
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 = [];
}
ACTUALIZAR Antes de cargar html, tengo algo como esto:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
bebe
if (typeof image_array !== 'undefined' && image_array.length > 0) {
// the array is defined and has at least one element
}
Su problema puede estar ocurriendo debido a una combinación de variables globales implícitas y elevación de variables. Asegúrate de usar var
cada vez que se declara una variable:
<?php echo "var image_array = ".json_encode($images);?>
// add var ^^^ here
Y luego asegúrese de nunca volver a declarar accidentalmente esa variable más tarde:
else {
...
image_array = []; // no var here
}
-
No. Esto explotará cuando image_array sea nulo. La ley de Murphy establece que algún día lo hará.
– Marco Faustinelli
20 de marzo de 2015 a las 6:32
-
no es
image_array.length
¿suficiente? (sin especificar>0
)– mcont
12 de abril de 2015 a las 12:56
-
Curioso: ¿Puede encontrar algún caso de uso que se rompa con la respuesta de @JamesDrinkard?
– tsemer
24 de agosto de 2016 a las 9:01
-
if (image_array && image_array.length){ // array exists and has elements
– YeeHaw1234
4 de noviembre de 2016 a las 18:53
-
esto falla por
let image_array = new Array(10);
.– Saket Kumar
12 de noviembre de 2020 a las 0:30
Pooyan Khosravi
Para verificar si una matriz está vacía o no
Una forma moderna, ES5+:
if (Array.isArray(array) && array.length) {
// array exists and is not empty
}
Una manera de la vieja escuela:
typeof array != "undefined"
&& array != null
&& array.length != null
&& array.length > 0
Una forma compacta:
if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
// array exists and is not empty
}
Una forma de CoffeeScript:
if array?.length > 0
¿Por qué?
Caso indefinido
Una variable indefinida es una variable a la que aún no le ha asignado nada.
let array = new Array(); // "array" !== "array"
typeof array == "undefined"; // => true
caso nulo
En términos generales, nulo es un estado de falta de valor. Por ejemplo, una variable es nula cuando se perdió o no pudo recuperar algunos datos.
array = searchData(); // can't find anything
array == null; // => true
Caso no es una matriz
Javascript tiene un sistema de tipo dinámico. Esto significa que no podemos garantizar qué tipo de objeto contiene una variable. Existe la posibilidad de que no estemos hablando de una instancia de Array
.
supposedToBeArray = new SomeObject();
typeof supposedToBeArray.length; // => "undefined"
array = new Array();
typeof array.length; // => "number"
Matriz vacía de caso
Ahora que probamos todas las demás posibilidades, estamos hablando con una instancia de Array
. Para asegurarnos de que no esté vacío, preguntamos sobre la cantidad de elementos que contiene y nos aseguramos de que tenga más de cero elementos.
firstArray = [];
firstArray.length > 0; // => false
secondArray = [1,2,3];
secondArray.length > 0; // => true
-
Tenga en cuenta que es no suficiente para comprobar
(typeof array != "undefined" && array.length > 0)
porque siarray
es nulo obtendremosTypeError: Cannot read property 'length' of null
.– Pooyan Khosravi
9 mayo 2014 a las 20:56
-
Tal vez cambie && con ||
– Sahar Ch.
30 de mayo de 2014 a las 13:42
-
!(typeof array !== "undefined") || !(array.length > 0)
? Acabo de intentarlo, tengo el mismo error. ¿Puede darnos un ejemplo completo de cómo usar||
?– Pooyan Khosravi
30 de mayo de 2014 a las 16:12
-
me refería
(typeof array != "undefined" || array.length > 0)
– Sahar Ch.
30 de mayo de 2014 a las 23:24
-
Gracias por la aclaración.
(typeof array != "undefined" || array.length > 0)
devolucionestrue
siarray = null
.!(typeof array != "undefined" || array.length > 0)
devolucionesfalse
siarray = [1,2]
. Perdón por no entender, pero @Elsa, ¿puede dar un ejemplo de trabajo? Gracias por adelantado.– Pooyan Khosravi
02/06/2014 a las 20:50
Queequeg
¿Qué tal (ECMA 5.1):
if(Array.isArray(image_array) && image_array.length){
// array exists and is not empty
}
-
Re
.. && image_array.length)
. En mi humilde opinión, mientras tú pueden confíe de forma segura en la escritura suelta de JS, para convertir un0
entero afalse
y unnon-zero
entero atrue
, considero preferible, para facilitar la lectura en el futuro, “decir lo que quieres decir”. yo lo haría.. && image_array.length > 0)
.– El fabricante de herramientas Steve
12 de octubre de 2019 a las 12:17
james bebedor
Esto es lo que uso. La primera condición cubre la veracidad, que tiene tanto nula como indefinida. La segunda condición comprueba si hay una matriz vacía.
if(arrayName && arrayName.length > 0){
//do something.
}
o gracias al comentario de tsemer agregué una segunda versión
if(arrayName && arrayName.length)
Luego hice una prueba para la segunda condición, usando Scratchpad en Firefox:
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! has a value!");
}
if (array2 && array2.length) {
console.log("array2! has a value!");
}
if (array3 && array3.length) {
console.log("array3! has a value!");
}
if (array4 && array4.length) {
console.log("array4! has a value!");
}
lo que también prueba que if(array2 && array2.length)
y if(array2 && array2.length > 0)
están haciendo exactamente lo mismo
encadenamiento opcional
Como la propuesta de encadenamiento opcional alcanzó la etapa 4 y está recibiendo un apoyo más amplio, hay una forma muy elegante de hacerlo.
if(image_array?.length){
// image_array is defined and has at least one element
}
Deberías usar:
if (image_array !== undefined && image_array.length > 0)
Si desea probar si la variable de matriz de imagen se ha definido, puede hacerlo así
if(typeof image_array === 'undefined') {
// it is not defined yet
} else if (image_array.length > 0) {
// you have a greater than zero length array
}
-
-
@ user1564141 es difícil saber dónde se declara la función en relación con la configuración de image_array. Es posible que tenga un problema de alojamiento, por lo que es posible que deba declarar esa variable como var index_array = … Además, es la etiqueta del script donde configuró index_array que se cierra. No parece tan de la captura de pantalla.
–Mike Brant
31 de julio de 2012 a las 15:35
-
En el resto también está alerta, que se dispara solo cuando la matriz está vacía, pero la var image_array funciona siempre … No puedo entender por qué.
– usuario1564141
31 de julio de 2012 a las 15:38
-
@ user1564141 Sería útil si pudiera actualizar su pregunta para mostrar la fuente como salida. Todavía no tengo una idea de dónde reside su lógica if-else dentro de la fuente en relación con la ubicación de su declaración index_array.
–Mike Brant
31 de julio de 2012 a las 15:41
Registro de la consola
image_array
– ¿qué sacas?– Mitia
31 de julio de 2012 a las 15:23
@Utkanos si hay var image_array = [] – indefinido si //var image_array = [] (comentado) – matriz real.
– usuario1564141
31 de julio de 2012 a las 15:31
array?.length: ampliamente compatible y pronto será una característica nativa
– Anbu Agarval
9 de junio de 2020 a las 14:33