[javascript] 배열이 비어 있거나 존재하는지 확인

페이지가 처음으로로드 될 때 이미지가 있는지 확인 image_array하고 마지막 이미지를로드해야합니다.

그렇지 않으면 미리보기 버튼을 비활성화하고 사용자에게 새 이미지 버튼을 누르고 빈 배열을 만들어 이미지를 넣도록 경고합니다.

문제는 항상 불 image_array속에 있다는 것 입니다 else. 배열이 존재하면 배열을 재정의하지만 경고는 작동하지 않습니다.

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 = [];
}

업데이트 html을로드하기 전에 다음과 같은 것이 있습니다.

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>


답변

if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

내재 된 전역 변수와 변수 게양으로 인해 문제가 발생할 수 있습니다. var변수를 선언 할 때마다 사용하십시오 :

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here

그런 다음 나중에 실수로 해당 변수를 다시 선언하지 마십시오.

else {
    ...
    image_array = []; // no var here
}

답변

배열이 비어 있는지 확인하려면

현대적인 ES5 + 방법 :

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}

옛날 방식 :

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

컴팩트 한 방법 :

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

CoffeeScript 방식 :

if array?.length > 0

왜?

Case Undefined
정의 되지 않은 변수는 아직 아무것도 할당하지 않은 변수입니다.

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

Case Null
일반적으로 null은 값이없는 상태입니다. 예를 들어 일부 데이터를 놓치거나 검색하지 못한 경우 변수는 null입니다.

array = searchData();  // can't find anything
array == null;         // => true

배열이 아닌 경우
Javascript에는 동적 유형 시스템이 있습니다. 따라서 변수에 어떤 유형의 객체가 있는지 보장 할 수 없습니다. 의 인스턴스와 대화하지 않을 가능성이 Array있습니다.

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"

Case Empty Array
이제 다른 모든 가능성을 테스트 했으므로의 인스턴스와 대화하고 Array있습니다. 비어 있지 않은지 확인하기 위해 보유하고있는 요소의 수와 0 개 이상의 요소가 있는지 확인합니다.

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true

답변

어떻습니까 (ECMA 5.1) :

if(Array.isArray(image_array) && image_array.length){
  // array exists and is not empty
}

답변

이것이 내가 사용하는 것입니다. 첫 번째 조건은 진실성 (null 및 undefined)을 모두 포함합니다. 두 번째 조건은 빈 배열을 확인합니다.

if(arrayName && arrayName.length > 0){
    //do something.
}

또는 tsemer의 의견 덕분에 두 번째 버전을 추가했습니다.

if(arrayName && arrayName.length)

그런 다음 Firefox에서 Scratchpad를 사용하여 두 번째 조건을 테스트했습니다.

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!");
}

이는 또한 증명 if(array2 && array2.length)if(array2 && array2.length > 0)정확히 같은 일을하고 있습니다


답변

다음을 사용해야합니다.

  if (image_array !== undefined && image_array.length > 0)

답변

이미지 배열 변수가 정의되었는지 테스트하려면 다음과 같이하십시오.

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}

답변

자바 스크립트

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )

Lodash 및 밑줄

( _.isArray(myArray) && myArray.length > 0 )