Cuando la página se carga por primera vez, necesito verificar si hay una imagen image_array
y cargar la última imagen.
De lo contrario, deshabilito los botones de vista previa, alerta al usuario para que presione el botón de nueva imagen y creo una matriz vacía para colocar las imágenes;
El problema es que image_array
en los 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 = [];
}
ACTUALIZACIÓN 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; ?>
javascript
jquery
usuario1564141
fuente
fuente
image_array
: ¿qué obtienes?Respuestas:
Su problema puede estar ocurriendo debido a una combinación de variables globales implícitas y elevación de variables. Asegúrese de usar
var
cada vez que declare una variable:Y luego asegúrese de nunca volver a declarar accidentalmente esa variable más tarde:
fuente
image_array.length
suficiente? (sin especificar>0
)if (image_array && image_array.length){ // array exists and has elements
Para verificar si una matriz está vacía o no
Una forma moderna, ES5 +:
Una manera de la vieja escuela:
Una forma compacta:
Una manera de CoffeeScript:
¿Por qué?
Caso sin definir La
variable sin definir es una variable a la que todavía no se le ha asignado nada.
Caso nulo
En términos generales, nulo es el estado de falta de valor. Por ejemplo, una variable es nula cuando omitió o no pudo recuperar algunos datos.
Case Not an Array
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
.Case Empty Array
Ahora, dado que probamos todas las demás posibilidades, estamos hablando de una instancia de
Array
. Para asegurarnos de que no esté vacío, preguntamos por el número de elementos que contiene y nos aseguramos de que tenga más de cero elementos.fuente
(typeof array != "undefined" && array.length > 0)
porque siarray
es nulo vamos a llegarTypeError: Cannot read property 'length' of null
.!(typeof array !== "undefined") || !(array.length > 0)
? Solo lo intenté, obtuve el mismo error. ¿Puede darnos un ejemplo completo de cómo usarlo||
?(typeof array != "undefined" || array.length > 0)
(typeof array != "undefined" || array.length > 0)
devuelvetrue
siarray = null
.!(typeof array != "undefined" || array.length > 0)
devuelvefalse
siarray = [1,2]
. Perdón por no entender, pero @Elsa ¿puedes dar un ejemplo de trabajo? Gracias por adelantado.¿Qué tal (ECMA 5.1):
fuente
.. && image_array.length)
. En mi humilde opinión, si bien puede confiar en el tipeo suelto de JS, para convertir un0
número entero enfalse
unnon-zero
número enterotrue
, considero preferible, para facilitar la lectura en el futuro, "decir lo que quiere decir". Haría.. && image_array.length > 0)
.Esto es lo que yo uso. La primera condición cubre la verdad, que tiene valores nulos e indefinidos. La segunda condición verifica si hay una matriz vacía.
o gracias al comentario de tsemer agregué una segunda versión
Luego hice una prueba para la segunda condición, usando Scratchpad en Firefox:
que también prueba eso
if(array2 && array2.length)
yif(array2 && array2.length > 0)
están haciendo exactamente lo mismofuente
if (arrayName && arrayName.length)
var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0
type for isNotEmpty no sería boolean, sería boolean | undefined.Deberías usar:
fuente
Si desea probar si se ha definido la variable de matriz de imagen, puede hacerlo así
fuente
JavaScript
Lodash y subrayado
fuente
Puede usar jQuery's
isEmptyObject()
para verificar si la matriz contiene elementos o no.Fuente: https://api.jquery.com/jQuery.isEmptyObject/
fuente
Una forma simple que no genera excepciones si no existe y se convierte a booleano:
Ejemplo:
fuente
Qué tal esto ? comprobar la longitud de la matriz indefinida puede generar una excepción.
fuente
if
se puede evitar utilizando&&
, como enimage_array && image_array.length
, se cortocircuitará siimage_array
no existe.Para mí, seguro que algunas de las respuestas mejor calificadas "funcionan" cuando las pongo en jsfiddle, pero cuando tengo una cantidad generada dinámicamente de la lista, mucho de este código en las respuestas simplemente no funciona para mí.
Esto es lo que ESTÁ trabajando para mí.
Tenga en cuenta que NO hay citas indefinidas y no me estoy molestando con la longitud.
fuente
typeof
devuelve una cadena, en comparación conundefined
siempre será parpadeante 2) no verifica sifrom
está definido. su código anterior arrojará un error si no es asíencadenamiento opcional
Como la propuesta de encadenamiento opcional llegó a la etapa 4 y está obteniendo un soporte más amplio, hay una manera muy elegante de hacerlo
fuente
Me encuentro con este problema bastante en Javascript. Para mí, la mejor manera de hacerlo es poner un control muy amplio antes de verificar la longitud. Vi algunas otras soluciones en este Q & A, pero quería ser capaz de verificar, ya sea para
null
oundefined
o cualquier otro valor falso.Esto primera comprobar
undefined
,null
u otros valores falsos. Si alguno de esos es verdadero, completará el booleano ya que es unOR
. Luegoarray.length
, se puede verificar la comprobación más arriesgada , que podría confundirnos si la matriz no está definida. Esto nunca se alcanzará siarray
esundefined
onull
, por lo que el orden de las condiciones es muy importante.fuente
Usando undescore o lodash :
_.isArray(image_array) && !_.isEmpty(image_array)
fuente
Aquí está mi violín utilizado para examinar este problema ( fuente )
fuente
Si no tiene una variable declarada como matriz, puede crear una verificación:
Esto verifica si la variable x existe y si es así, verifica si es una matriz llena. de lo contrario, crea una matriz vacía (o puede hacer otras cosas);
Si está seguro de que hay una variable de matriz creada, hay una simple verificación:
Puede verificar mi violín aquí con la mayoría de las formas posibles de verificar la matriz.
fuente
Usted debe hacer esto
fuente
Creo que este código simple funcionaría:
fuente
en ts
en html
(photos == undefined ||! (isArray (photos) && photos.length> 0))
fuente
Cuando crea su image_array, está vacío, por lo tanto, su image_array.length es 0
Como se indica en el comentario a continuación, edito mi respuesta en función de la respuesta de esta pregunta ):
dentro de los corchetes else no cambia nada al conjunto de imágenes definido anteriormente en el código
fuente
[]var image_array = []
dentro del bloque else, no estoy seguro de que se pueda ver afuera. Pruebaimage_array = []