자바스크립트에서 배열인지 아닌지 확인하는 함수인데...

자바스크립트에서 배열인지 아닌지 확인하는 함수인데...

QA

자바스크립트에서 배열인지 아닌지 확인하는 함수인데...

본문



<p id="demo"></p>


<script>

var fruits = ["Banana", "Orange", "Apple", "Mango"];

document.getElementById("demo").innerHTML = isArray(fruits);


function isArray(myArray) {

    return myArray.constructor.toString().indexOf("Array") > -1;

}

</script>


 

위 식의 정확한 의미를 좀 알려주세요. 특히, 아래 식의 부분부분과 전체 의미를 알고 싶습니다.
return myArray.constructor.toString().indexOf("Array") > -1;

이 질문에 댓글 쓰기 :

답변 1

입력받은 변수가 배열인 경우 Array Object가 되는데, Array Object의 생성자는 Array()입니다. 그래서 입력받은 변수의 생성자를 문자열로 읽어들여서 Array 이라는 단어가 있는지를 확인하는 함수입니다. 

답변 고맙습니다. 근데, 이해가 안 가는 게...


document.getElementById("demo").innerHTML = isArray(fruits); 가 isArray 함수에 변수 fruits를 넣어 돌린 값을 출력시키라는 의미잖아요.

isArray 함수의 내용이 아래 식이구요.
------------------------------------------------------------------
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}
------------------------------------------------------------------
myArray는 뭐고,
또, constructor 는 뭐고,
toString()은 뭐고,
indexOf("Array") 는 뭐고,
이것들을 .(마침표)로 합친 식인 myArray.constructor.toString().indexOf("Array")는 뭔가요?

그리고, 왜 myArray.constructor.toString().indexOf("Array")이 -1보다 크다는 식의 결과가 참거짓의 참으로 나오나요?


.(마침표)는 어떤 용도로 사용되는지?

1. myArray는 isArray(myArray)에서 받아온 변수값입니다.
2. constructor(생성자)는 myArray라는 변수(객체)가 생성될때 처음 호출되는 함수입니다. 배열 객체의 경우에는 Array() 함수가 실행됩니다.
3. toString은 생성자 함수(여기선 Array(){ [Native Code] }가 되겠죠)를 문자열로 반환합니다.
4. indexOf("Array")는 변환한 문자열에서 Array이라는 글자의 위치를 찾습니다. 만약 Array 이라는 문자가 있다면 해당 문자열이 시작되는 곳의 Index 번호를 반환하겠죠. 없다면 -1을 반환합니다. myArray가 정상적으로 배열이었다면, myArray.constructor.toString().indexOf("Array")는 최소 1보다는 크겠죠. 그래서 > -1이 더 붙어서 Boolean형태로 변환되어 '참(true)' 값을 반환합니다.
그럼 결과적으로 id가 demo 인 엘리먼트의 내부 Html값으로 true 또는 false 가 기록되게 됩니다.

PS.

위 설명에서,

---------------------------------------------------------------------------------------------------
 myArray가 정상적으로 배열이었다면, myArray.constructor.toString().indexOf("Array")는 최소 1보다는 크겠죠. 
---------------------------------------------------------------------------------------------------

 라고 하셨는데, 0부터 순서를 세니까 최소 0 이상이 맞는거 아닌가요?

그럼, myArray 변수에 할당된 데이터의 생성자를 Array() 가 아닌 function Array() {처럼  function 까지 넣어서 순서를 세야된다는 말씀이신가요?
그렇다해도, 순서는 0부터 세니까 9가 되야 할 것 같은데....

답변을 작성하시기 전에 로그인 해주세요.
전체 13
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT