javascript - Hvordan sjekke om et array er tomt eller eksisterer?
Når siden lastes for første gang, må jeg sjekke om det finnes et bilde i image_array og laste det siste bildet.
Ellers deaktiverer jeg forhåndsvisningsknappene, varsler brukeren om å trykke på ny bildeknapp og oppretter en tom matrise for å legge bildene i;
Problemet er at image_array i else utløses hele tiden. Hvis et array eksisterer - overskriver det det bare, men alert fungerer ikke.
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 = [];
}
OPPDATER Før jeg laster inn HTML, har jeg noe slik:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
Svar #1
if (typeof image_array !== 'undefined' && image_array.length > 0) {
// the array is defined and has at least one element
}
Ditt problem kan oppstå på grunn av en blanding av implisitte globale variabler og variabelhoisting. Sørg for å bruke var hver gang du erklærer en variabel:
<?php echo "var image_array = ".json_encode($images);?>
// add var ^^^ here
Og sørg deretter for at du aldri ved et uhell erklærer den variabelen på nytt senere:
else {
...
image_array = []; // no var here
}
Svar #2
For å sjekke om en matrise enten er tom eller ikke
En moderne måte, ES5+:
if (Array.isArray(array) && array.length) {
// array exists and is not empty
}
En gammeldags måte:
typeof array != "undefined"
&& array != null
&& array.length != null
&& array.length > 0
En kompakt måte:
if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
// array exists and is not empty
}
En CoffeeScript-måte:
if array?.length > 0
Hvorfor?
Udefinert sak
Udefinert variabel er en variabel som du ikke har tilordnet noe til ennå.
let array = new Array(); // "array" !== "array"
typeof array == "undefined"; // => true
Case Null
Generelt sett er null en tilstand der det mangler en verdi. For eksempel er en variabel null når du har glemt eller mislyktes i å hente noen data.
array = searchData(); // can't find anything
array == null; // => true
Case ikke et array
Javascript har et dynamisk typesystem. Dette betyr at vi ikke kan garantere hvilken type objekt en variabel inneholder. Det er en sjanse for at vi ikke snakker med en instans av Array.
supposedToBeArray = new SomeObject();
typeof supposedToBeArray.length; // => "undefined"
array = new Array();
typeof array.length; // => "number"
Håndtere tomt array
Nå som vi har testet alle andre muligheter, snakker vi med en instans av Array. For å være sikker på at den ikke er tom, spør vi om hvor mange elementer den inneholder, og sørger for at den har mer enn null elementer.
firstArray = [];
firstArray.length > 0; // => false
secondArray = [1,2,3];
secondArray.length > 0; // => true
Svar #3
Hva med (ECMA 5.1):
if(Array.isArray(image_array) && image_array.length){
// array exists and is not empty
}
Svar #4
Dette er hva jeg bruker. Den første betingelsen dekker truthy, som inkluderer både null og undefined. Den andre betingelsen sjekker for en tom array.
if(arrayName && arrayName.length > 0){
//do something.
}
eller takket være Tsemer sin kommentar la jeg til en andre versjon
if(arrayName && arrayName.length)
Deretter laget jeg en test for den andre betingelsen, ved å bruke Scratchpad i 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!");
}som også beviser at if(array2 && array2.length) og if(array2 && array2.length > 0) gjør nøyaktig det samme
Svar #5
valgfri kjeding
Ettersom forslaget om valgfri kjeding har nådd fase 4 og får bredere støtte, finnes det en veldig elegant måte å gjøre dette på
if(image_array?.length){
// image_array is defined and has at least one element
}
Svar #6
Du bør bruke:
if (image_array !== undefined && image_array.length > 0)
Svar #7
Hvis du vil teste om bildebvektoren har blitt definert, kan du gjøre det slik
if(typeof image_array === 'undefined') {
// it is not defined yet
} else if (image_array.length > 0) {
// you have a greater than zero length array
}
