Wenn die Seite zum ersten Mal image_array
geladen wird , muss ich überprüfen, ob ein Bild vorhanden ist, und das letzte Bild laden.
Andernfalls deaktiviere ich die Vorschau-Schaltflächen, warne den Benutzer, die Schaltfläche für neue Bilder zu drücken, und erstelle ein leeres Array, um die Bilder zu platzieren.
Das Problem ist, dass image_array
in den else
Bränden die ganze Zeit. Wenn ein Array vorhanden ist, wird es nur überschrieben, aber die Warnung funktioniert nicht.
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 = [];
}
UPDATE Vor dem Laden von HTML habe ich ungefähr Folgendes:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
javascript
jquery
user1564141
quelle
quelle
image_array
- was bekommen Sie?Antworten:
Ihr Problem kann aufgrund einer Mischung aus impliziten globalen Variablen und variablem Heben auftreten. Stellen Sie sicher, dass Sie beim
var
Deklarieren einer Variablen Folgendes verwenden:Und stellen Sie dann sicher, dass Sie diese Variable später nie versehentlich neu deklarieren:
quelle
image_array.length
genug (ohne Angabe>0
)if (image_array && image_array.length){ // array exists and has elements
Um zu überprüfen, ob ein Array leer ist oder nicht
Ein moderner Weg, ES5 +:
Ein Weg der alten Schule:
Ein kompakter Weg:
Ein CoffeeScript-Weg:
Warum?
Fall undefiniert
Undefinierte Variable ist eine Variable, der Sie noch nichts zugewiesen haben.
Fall Null Im
Allgemeinen ist Null der Zustand, in dem ein Wert fehlt. Beispielsweise ist eine Variable null, wenn Sie einige Daten verpasst oder nicht abgerufen haben.
Fall Kein Array
Javascript hat ein dynamisches Typsystem. Dies bedeutet, dass wir nicht garantieren können, welchen Objekttyp eine Variable enthält. Es besteht die Möglichkeit, dass wir nicht mit einer Instanz von sprechen
Array
.Case Empty Array
Da wir nun alle anderen Möglichkeiten getestet haben, sprechen wir mit einer Instanz von
Array
. Um sicherzustellen, dass es nicht leer ist, fragen wir nach der Anzahl der Elemente, die es enthält, und stellen sicher, dass es mehr als null Elemente enthält.quelle
(typeof array != "undefined" && array.length > 0)
denn wennarray
null ist, erhalten wirTypeError: Cannot read property 'length' of null
.!(typeof array !== "undefined") || !(array.length > 0)
? Habe es gerade versucht, habe den gleichen Fehler bekommen. Können Sie uns ein vollständiges Beispiel für die Verwendung geben||
?(typeof array != "undefined" || array.length > 0)
(typeof array != "undefined" || array.length > 0)
gibttrue
if zurückarray = null
.!(typeof array != "undefined" || array.length > 0)
gibtfalse
if zurückarray = [1,2]
. Entschuldigung für das Unverständnis, aber @Elsa können Sie ein funktionierendes Beispiel liefern? Danke im Voraus.Wie wäre es mit (ECMA 5.1):
quelle
.. && image_array.length)
. IMHO, während Sie sich sicher auf die lose Eingabe von JS verlassen können , um eine0
Ganzzahl infalse
und einenon-zero
Ganzzahl in umzuwandelntrue
, halte ich es aus Gründen der Lesbarkeit in Zukunft für vorzuziehen, "zu sagen, was Sie meinen". Ich würde es tun.. && image_array.length > 0)
.Das benutze ich. Die erste Bedingung betrifft die Wahrheit, die sowohl null als auch undefiniert ist. Die zweite Bedingung prüft auf ein leeres Array.
oder dank tsemers kommentar habe ich eine zweite version hinzugefügt
Dann habe ich mit Scratchpad in Firefox einen Test für die zweite Bedingung durchgeführt:
das beweist auch das
if(array2 && array2.length)
und machtif(array2 && array2.length > 0)
genau das gleichequelle
if (arrayName && arrayName.length)
var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0
Typ für isNotEmpty nicht boolesch, sondern boolesch | undefiniert wäre.Du solltest benutzen:
quelle
Wenn Sie testen möchten, ob die Image-Array-Variable definiert wurde, können Sie dies folgendermaßen tun
quelle
JavaScript
Lodash & Unterstrich
quelle
Mit jQuery's können Sie
isEmptyObject()
überprüfen, ob das Array Elemente enthält oder nicht.Quelle: https://api.jquery.com/jQuery.isEmptyObject/
quelle
Ein einfacher Weg, der keine Ausnahmen zur Folge hat, wenn er nicht existiert und in einen Booleschen Wert konvertiert wird:
Beispiel:
quelle
Wie wäre es damit ? Das Überprüfen der Länge eines undefinierten Arrays kann eine Ausnahme auslösen.
quelle
if
kann vermieden werden&&
, indem wie inimage_array && image_array.length
, es wird kurzgeschlossen, wennimage_array
nicht vorhanden.Für mich "funktionieren" sicher einige der hoch bewerteten Antworten, wenn ich sie in jsfiddle einfüge, aber wenn ich eine dynamisch generierte Menge an Array-Listen habe, funktioniert ein Großteil dieses Codes in den Antworten einfach nicht für MICH.
Das ist es, was für mich funktioniert.
Beachten Sie, dass KEINE Anführungszeichen undefiniert sind und ich mich nicht um die Länge kümmere.
quelle
typeof
gibt einen String zurück, der Vergleich mitundefined
wird immer flasy sein 2) Sie überprüfen nicht, obfrom
definiert ist. Ihr Code oben wird einen Fehleroptionale Verkettung
Da der optionale Verkettungsvorschlag Stufe 4 erreicht hat und eine breitere Unterstützung erhält, gibt es eine sehr elegante Möglichkeit, dies zu tun
quelle
Ich stoße in Javascript ziemlich oft auf dieses Problem. Für mich ist der beste Weg, dies zu tun, eine sehr breite Prüfung durchzuführen, bevor die Länge überprüft wird. Ich sah einige andere Lösungen in diesem Q & A, aber ich wollte entweder überprüfen können ,
null
oderundefined
oder anderen falschen Wert.Dies wird zunächst prüfen
undefined
,null
oder andere falsche Werte. Wenn einer dieser Punkte zutrifft, wird der Boolesche Wert vervollständigt, da dies ein istOR
. Dann kann die riskantere Überprüfung überprüft werdenarray.length
, die uns Fehler machen kann, wenn das Array nicht definiert ist. Das wird nie erreicht werden , wennarray
istundefined
odernull
, so die Reihenfolge der Bedingungen sehr wichtig ist.quelle
Verwenden von undescore oder lodash :
_.isArray(image_array) && !_.isEmpty(image_array)
quelle
Hier ist meine Geige, mit der dieses Problem untersucht wurde ( Quelle )
quelle
Wenn Sie keine Variable als Array deklariert haben, können Sie eine Prüfung erstellen:
Dies prüft, ob die Variable x existiert und ob es sich um ein gefülltes Array handelt. Andernfalls wird ein leeres Array erstellt (oder Sie können andere Aufgaben ausführen).
Wenn Sie sicher sind , dass eine Array-Variable erstellt wurde, gibt es eine einfache Überprüfung:
Sie können meine Geige hier mit den meisten Möglichkeiten überprüfen, um das Array zu überprüfen.
quelle
Du solltest das tun
quelle
Ich denke, dieser einfache Code würde funktionieren:
quelle
in ts
in html
(photos == undefined ||! (isArray (photos) && photos.length> 0))
quelle
Wenn Sie Ihr image_array erstellen, ist es leer, daher ist Ihre image_array.length 0
Wie im Kommentar unten angegeben, bearbeite ich meine Antwort basierend auf der Antwort dieser Frage :
In den else-Klammern ändert sich nichts an dem zuvor im Code definierten image_array
quelle
[]var image_array = []
innerhalb des else-Blocks definieren, bin ich mir nicht sicher, ob er draußen zu sehen ist. Versuchen Sieimage_array = []