Quando a página está carregando pela primeira vez, preciso verificar se há uma imagem image_array
e carregar a última imagem.
Caso contrário, desabilito os botões de visualização, alerta o usuário a pressionar o botão de nova imagem e cria uma matriz vazia para colocar as imagens;
O problema é que image_array
nos else
incêndios o tempo todo. Se existe uma matriz - ela simplesmente a substitui, mas o alerta não 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 = [];
}
ATUALIZAÇÃO Antes de carregar o html, tenho algo parecido com isto:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
javascript
jquery
user1564141
fonte
fonte
image_array
- o que você recebe?Respostas:
Seu problema pode estar acontecendo devido a uma mistura de variáveis globais implícitas e içamento de variáveis. Certifique-se de usar
var
sempre que declarar uma variável:E certifique-se de nunca redeclarar acidentalmente essa variável mais tarde:
fonte
image_array.length
suficiente? (sem especificar>0
)if (image_array && image_array.length){ // array exists and has elements
Para verificar se uma matriz está vazia ou não
Uma maneira moderna, ES5 +:
Uma maneira antiga:
Uma maneira compacta:
Uma maneira do CoffeeScript:
Por quê?
Caso Indefinido A
variável indefinida é uma variável que você ainda não atribuiu a ela.
Nulo do caso
Em geral, nulo é o estado em que falta um valor. Por exemplo, uma variável é nula quando você perdeu ou não conseguiu recuperar alguns dados.
Caso Não é uma matriz
Javascript possui um sistema de tipos dinâmicos. Isso significa que não podemos garantir que tipo de objeto uma variável contém. Há uma chance de que não estamos falando com uma instância do
Array
.Case Empty Array
Agora que testamos todas as outras possibilidades, estamos falando de uma instância de
Array
. Para garantir que não esteja vazio, perguntamos sobre o número de elementos que ele contém e certificando-se de que ele possui mais de zero elementos.fonte
(typeof array != "undefined" && array.length > 0)
porque searray
é nulo nós vamos chegarTypeError: Cannot read property 'length' of null
.!(typeof array !== "undefined") || !(array.length > 0)
? Apenas tentei, tenho o mesmo erro. Você pode nos dar um exemplo completo de como usar||
?(typeof array != "undefined" || array.length > 0)
(typeof array != "undefined" || array.length > 0)
retornatrue
searray = null
.!(typeof array != "undefined" || array.length > 0)
retornafalse
searray = [1,2]
. Desculpe por não entender, mas @Elsa você pode fornecer um exemplo de trabalho? Desde já, obrigado.Que tal (ECMA 5.1):
fonte
.. && image_array.length)
. IMHO, embora você possa confiar com segurança na digitação solta de JS, para converter um0
número inteiro parafalse
e umnon-zero
número inteiro paratrue
, considero preferível, para facilitar a leitura no futuro, "dizer o que você quer dizer". Eu faria.. && image_array.length > 0)
.É isso que eu uso. A primeira condição abrange a verdade, que é nula e indefinida. A segunda condição verifica se há uma matriz vazia.
ou, graças ao comentário do tsemer, adicionei uma segunda versão
Então eu fiz um teste para a segunda condição, usando o Scratchpad no Firefox:
o que também prova isso
if(array2 && array2.length)
eif(array2 && array2.length > 0)
está fazendo exatamente o mesmofonte
if (arrayName && arrayName.length)
var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0
tipo para isNotEmpty não seria booleano, seria booleano | indefinido.Você deveria usar:
fonte
Se você quiser testar se a variável de matriz de imagem foi definida, faça-o desta maneira
fonte
Javascript
Lodash & Sublinhado
fonte
Você pode usar o jQuery
isEmptyObject()
para verificar se a matriz contém elementos ou não.Fonte: https://api.jquery.com/jQuery.isEmptyObject/
fonte
Uma maneira simples que não resulta em exceções, se não existir, e converta para booleano:
Exemplo:
fonte
Que tal agora ? a verificação do comprimento da matriz indefinida pode gerar uma exceção.
fonte
if
pode ser evitado usando&&
, como emimage_array && image_array.length
, entrará em curto-circuito seimage_array
não existir.Para mim, algumas das respostas mais bem classificadas "funcionam" quando eu as coloco no jsfiddle, mas quando tenho uma quantidade gerada dinamicamente de uma lista de arrays, muito desse código nas respostas simplesmente não funciona para mim.
É isso que está funcionando para mim.
Observe, sem aspas indefinidas e não estou me incomodando com o comprimento.
fonte
typeof
retorna uma string, comparando comundefined
será sempre flasy 2) você não verifica sefrom
está definido. seu código acima irá lançar um erro se não éencadeamento opcional
Como a proposta de encadeamento opcional chegou ao estágio 4 e está recebendo um suporte mais amplo, há uma maneira muito elegante de fazer isso
fonte
Me deparei com esse problema bastante em Javascript. Para mim, a melhor maneira de fazer isso é fazer uma verificação muito ampla antes de verificar o comprimento. Vi algumas outras soluções nesta sessão de perguntas e respostas, mas queria poder verificar se havia um
null
ouundefined
outro valor falso.Isto irá primeiro verificar se há
undefined
,null
ou outros valores falsos. Se algum deles for verdadeiro, ele completará o booleano, pois é umOR
. Em seguida, a verificação mais arriscadaarray.length
, que pode causar erros se a matriz for indefinida, pode ser verificada. Isso nunca será alcançado searray
forundefined
ounull
, portanto, a ordenação das condições é muito importante.fonte
Usando undescore ou lodash :
_.isArray(image_array) && !_.isEmpty(image_array)
fonte
Aqui está o meu violino usado para examinar este problema ( fonte )
fonte
Se você não tiver uma variável declarada como matriz, poderá criar uma verificação:
Isso verifica se a variável x existe e, se existe, verifica se é uma matriz preenchida. caso contrário, ele cria uma matriz vazia (ou você pode fazer outras coisas);
Se você tem certeza de que existe uma variável de matriz criada, há uma verificação simples:
Você pode verificar meu violino aqui com as maneiras mais possíveis de verificar a matriz.
fonte
Você deve fazer isso
fonte
Eu acho que esse código simples funcionaria:
fonte
em st
em html
(fotos == indefinido ||! (isArray (fotos) && photos.length> 0))
fonte
Quando você cria seu image_array, ele está vazio; portanto, o image_array.length é 0
Conforme declarado no comentário abaixo, edito minha resposta com base na resposta desta pergunta ):
dentro dos colchetes else não muda nada para o image_array definido anteriormente no código
fonte
[]var image_array = []
dentro do bloco else, não tenho certeza de que possa ser visto lá fora. Tenteimage_array = []