Gdy strona ładuje się po raz pierwszy, muszę sprawdzić, czy jest tam obraz image_array
i załadować ostatni obraz.
W przeciwnym razie wyłączam przyciski podglądu, ostrzegam użytkownika, aby nacisnął nowy przycisk obrazu i utworzyłem pustą tablicę, aby umieścić obrazy;
Problem polega na tym, że image_array
w else
pożarach cały czas. Jeśli tablica istnieje - po prostu ją zastępuje, ale alert nie działa.
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 = [];
}
AKTUALIZACJA Przed załadowaniem html mam coś takiego:
<?php if(count($images) != 0): ?>
<script type="text/javascript">
<?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
javascript
jquery
użytkownik1564141
źródło
źródło
image_array
- co otrzymujesz?Odpowiedzi:
Twój problem może występować z powodu połączenia niejawnych zmiennych globalnych i podnoszenia zmiennych. Upewnij się, że używasz
var
za każdym razem, gdy deklarujesz zmienną:A potem upewnij się, że nigdy później przypadkowo nie zmienisz tej zmiennej:
źródło
image_array.length
wystarczy (bez wyszczególnienia>0
)if (image_array && image_array.length){ // array exists and has elements
Aby sprawdzić, czy tablica jest pusta, czy nie
Nowoczesny sposób, ES5 +:
Oldschoolowy sposób:
Kompaktowy sposób:
Sposób na CoffeeScript:
Dlaczego?
Case Undefined
Niezdefiniowana zmienna to zmienna, do której jeszcze jej nie przypisałeś.
Przypadek Null
Ogólnie mówiąc, null to stan braku wartości. Na przykład zmienna ma wartość NULL, gdy niektóre dane zostały pominięte lub nie powiodło się.
Case Not an Array
JavaScript ma dynamiczny system typów. Oznacza to, że nie możemy zagwarantować, jaki typ obiektu posiada zmienna. Istnieje szansa, że nie rozmawiamy z żadnym przypadkiem
Array
.Case Empty Array
Teraz, odkąd przetestowaliśmy wszystkie inne możliwości, rozmawiamy o instancji
Array
. Aby upewnić się, że nie jest pusty, pytamy o liczbę elementów, które zawiera i upewniając się, że ma więcej niż zero elementów.źródło
(typeof array != "undefined" && array.length > 0)
ponieważ jeśliarray
jest zerowy, dostaniemyTypeError: Cannot read property 'length' of null
.!(typeof array !== "undefined") || !(array.length > 0)
? Po prostu spróbowałem, dostałem ten sam błąd. Czy możesz podać nam pełny przykład korzystania||
?(typeof array != "undefined" || array.length > 0)
(typeof array != "undefined" || array.length > 0)
zwracatrue
jeśliarray = null
.!(typeof array != "undefined" || array.length > 0)
zwracafalse
jeśliarray = [1,2]
. Przepraszamy za brak zrozumienia, ale @Elsa możesz podać działający przykład? Z góry dziękuję.Co powiesz na (ECMA 5.1):
źródło
.. && image_array.length)
. IMHO, podczas gdy można bezpiecznie polegać na luźne wpisywanie JS jest, aby przekonwertować0
liczbę całkowitąfalse
inon-zero
liczbę całkowitątrue
, uważam to korzystne, dla czytelności w przyszłości, aby „powiedzieć, co masz na myśli”. Zrobiłbym.. && image_array.length > 0)
.Tego używam. Pierwszy warunek obejmuje prawdę, która ma zarówno wartość zerową, jak i niezdefiniowaną. Drugi warunek sprawdza pustą tablicę.
lub dzięki komentarzowi tsemera dodałem drugą wersję
Następnie wykonałem test dla drugiego warunku, używając Scratchpad w Firefox:
co również to potwierdza
if(array2 && array2.length)
iif(array2 && array2.length > 0)
robią dokładnie to samoźródło
if (arrayName && arrayName.length)
var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0
typu dla isNotEmpty nie byłby boolowski, to byłby boolean | niezdefiniowany.Powinieneś użyć:
źródło
Jeśli chcesz sprawdzić, czy zmienna tablicy obrazów została zdefiniowana, możesz to zrobić w ten sposób
źródło
JavaScript
Lodash i podkreślenie
źródło
Za pomocą jQuery
isEmptyObject()
można sprawdzić, czy tablica zawiera elementy, czy nie.Źródło: https://api.jquery.com/jQuery.isEmptyObject/
źródło
Prosty sposób, który nie powoduje wyjątków, jeśli nie istnieje, i konwersję na wartość logiczną:
Przykład:
źródło
Co powiesz na to ? sprawdzenie długości niezdefiniowanej tablicy może spowodować wyjątek.
źródło
if
można uniknąć&&
, ponieważ wimage_array && image_array.length
przypadku zwarcia, jeśliimage_array
nie istnieje.Dla mnie na pewno niektóre z wysoko ocenianych odpowiedzi „działają”, kiedy umieszczam je w jsfiddle, ale kiedy mam dynamicznie generowaną listę tablic, wiele tego kodu w odpowiedziach po prostu nie działa dla MNIE.
To właśnie dla mnie działa.
Zauważ, ŻADNE cytaty nie są zdefiniowane i nie przejmuję się długością.
źródło
typeof
zwraca ciąg, w porównaniu doundefined
zawsze będzie flasy 2) nie sprawdzasz, czyfrom
jest zdefiniowany. powyższy kodopcjonalne łączenie
Ponieważ opcjonalna propozycja łączenia osiągnęła etap 4 i zyskuje szersze poparcie, istnieje bardzo elegancki sposób, aby to zrobić
źródło
Często spotykam się z tym problemem w Javascript. Dla mnie najlepszym sposobem na to jest sprawdzenie bardzo szerokiej kratki przed sprawdzeniem długości. Widziałem kilka innych rozwiązań w tym Q & A, ale chciałem być w stanie sprawdzić na obu
null
lubundefined
lub jakiejkolwiek innej fałszywej wartości.Będzie to pierwszy sprawdzić
undefined
,null
czy inne fałszywe wartości. Jeśli którakolwiek z tych prawd jest prawdą, dopełni boolean, ponieważ jest toOR
. Następnie można sprawdzić bardziej ryzykowne sprawdzeniearray.length
, które może nas pomylić, jeśli tablica jest niezdefiniowana. To nigdy nie zostanie osiągnięty, jeśliarray
jestundefined
lubnull
, więc kolejność warunków jest bardzo ważne.źródło
Za pomocą undescore lub lodash :
_.isArray(image_array) && !_.isEmpty(image_array)
źródło
Oto moje skrzypce użyte do zbadania tego problemu ( źródło )
źródło
Jeśli nie masz zmiennej zadeklarowanej jako tablica, możesz utworzyć czek:
Sprawdza, czy zmienna x istnieje, a jeśli tak, sprawdza, czy jest to wypełniona tablica. w przeciwnym razie tworzy pustą tablicę (lub możesz robić inne rzeczy);
Jeśli masz pewność, że utworzono zmienną tablicową, następuje proste sprawdzenie:
Możesz sprawdzić moje skrzypce tutaj, pokazując najbardziej możliwe sposoby sprawdzenia tablicy.
źródło
Powinieneś to zrobić
źródło
w ts
w html
(zdjęcia == undefined ||! (isArray (zdjęcia) && photos.length> 0))
źródło
Kiedy tworzysz tablicę obrazków, jest ona pusta, dlatego twoja tablica obrazków ma długość 0
Jak stwierdzono w komentarzu poniżej, edytuję swoją odpowiedź na podstawie odpowiedzi na to pytanie ):
w nawiasach klamrowych nic nie zmienia na obraz zdefiniowany wcześniej w kodzie
źródło
[]var image_array = []
wewnątrz bloku else, nie jestem pewien, czy można go zobaczyć na zewnątrz. Spróbujimage_array = []