자바스크립트에서 배열인지 아닌지 확인하는 함수인데... 채택완료
홈짱
10년 전
조회 9,862
<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개
채택된 답변
+20 포인트
10년 전
입력받은 변수가 배열인 경우 Array Object가 되는데, Array Object의 생성자는 Array()입니다. 그래서 입력받은 변수의 생성자를 문자열로 읽어들여서 Array 이라는 단어가 있는지를 확인하는 함수입니다.
로그인 후 평가할 수 있습니다
답변에 대한 댓글 10개
�
홈짱
10년 전
P
PWneo
10년 전
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 가 기록되게 됩니다.
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 가 기록되게 됩니다.
P
PWneo
10년 전
추가) 객체(Class)에서 .(마침표)는 메서드를 호출하는 용도로 사용됩니다.
�
홈짱
10년 전
너무너무 자세하게 설명해주셔어 정말정말 고맙습니다. ^*^ 덕분에 기초가 튼튼해졌습니다.
[http://blog-imgs-44.fc2.com/w/a/r/wareureu/227.gif]
[http://blog-imgs-44.fc2.com/w/a/r/wareureu/227.gif]
�
홈짱
10년 전
PS.
위 설명에서,
---------------------------------------------------------------------------------------------------
myArray가 정상적으로 배열이었다면, myArray.constructor.toString().indexOf("Array")는 최소 1보다는 크겠죠.
---------------------------------------------------------------------------------------------------
라고 하셨는데, 0부터 순서를 세니까 최소 0 이상이 맞는거 아닌가요?
위 설명에서,
---------------------------------------------------------------------------------------------------
myArray가 정상적으로 배열이었다면, myArray.constructor.toString().indexOf("Array")는 최소 1보다는 크겠죠.
---------------------------------------------------------------------------------------------------
라고 하셨는데, 0부터 순서를 세니까 최소 0 이상이 맞는거 아닌가요?
P
PWneo
10년 전
Array로 시작하는게 아니라
function Array로 시작합니다.
function Array로 시작합니다.
P
PWneo
10년 전
[code]
123456789
function Array() {
[/code]
로 해서 Array는 10번째에 있죠. (0은 nl이...차지했네요)
123456789
function Array() {
[/code]
로 해서 Array는 10번째에 있죠. (0은 nl이...차지했네요)
�
홈짱
10년 전
그럼, myArray 변수에 할당된 데이터의 생성자를 Array() 가 아닌 function Array() {처럼 function 까지 넣어서 순서를 세야된다는 말씀이신가요?
그렇다해도, 순서는 0부터 세니까 9가 되야 할 것 같은데....
그렇다해도, 순서는 0부터 세니까 9가 되야 할 것 같은데....
�
홈짱
10년 전
http://jsfiddle.net/9xgsajjf/ 코드 실행해보니, 9가 맞네요. 덕분에 또 좋은 거 알았습니다.
님 아니였으면 왜 9가 나오나 미칠 뻔 했네요. ㅎㅎ
님 아니였으면 왜 9가 나오나 미칠 뻔 했네요. ㅎㅎ
P
PWneo
10년 전
네. 브라우저마다 조금씩 틀립니다. 제 IE11에서는 10이나오네요 ㅎㅎ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
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보다 크다는 식의 결과가 참거짓의 참으로 나오나요?
.(마침표)는 어떤 용도로 사용되는지?