Chrome 콘솔을 사용하면 이것이 내 입력 및 출력입니다.
[0].map(Array);
[[0, 0, [0]]]; // output
여기서 무슨 일이 일어나고 있습니까?
편집하다
이것이 나를 궁금하게 만드는 이유는
[0].map(String);
돌아올 것이다
["0"];
그리고
["0", "0", "String"]
답변
.map()
함수가 호출되는 Array()
세 개의 인자이며 배열 요소의 값에 함수 0
도, 그 요소의 인덱스 0
, 전체 어레이에 대한 참조.
따라서 다음과 같습니다.
var a = [0];
var index = 0
Array(a[index], index, a); // create array with three elements
그러면 반환 된 Array()
배열이 .map()
생성 되는 배열의 첫 번째 요소가 되므로 [[0, 0, [0]]]
결과 에 추가 중첩 수준이 적용 됩니다.
당신의 편집에 대한 편집 : 당신이 말할 때 [0].map(String);
의 그 결과 String()
같은 같은 세 개의 인수로 호출되고는 String(a[index], index, a)
있지만, String()
반면에 기능을 제외한 모든 첫 번째 인수를 무시 Array()
가 사용하는 모든 인수를 공급했다.
답변
첫째 , Array
배열을 만드는 함수로 사용할 수 있습니다.
var arr = Array(1, 2, "Hello");
console.log(arr); // [1, 2, "Hello"]
둘째 , map
콜백에 세 개의 매개 변수를 전달합니다. 요소, 배열의 색인 및 배열 자체입니다.
따라서 배열에 하나의 요소가 포함되어 있으므로 다음 줄은 다음과 같습니다.
[0].map(Array);
다음과 같습니다.
[Array(0, 0, [0])]; // the element 0 in the original array will be mapped into Array(0, 0, [0])
답변
질문을 업데이트 한 후. 다른 답변은 지도 에 대한 정보를 제공합니다.
배열과 문자열이 다른 이유에 답하려면 생성자를 찾습니다.
문자열 생성자는 1 개의 매개 변수 String (thing) 을 받아들이고 배열 new Array (element0, element1 [, … [, elementN]])
답변
이 전화
[0].map(Array);
다음과 같이 작성한 것과 동일한 결과를 제공합니다.
[0].map(function (value, index, array) {
return Array(value, index, array);
})
Map 함수는 요소 값, 요소 인덱스 및 전체 배열의 세 가지 매개 변수로 Array 함수를 호출 합니다. 이 호출은 Array
값 (number 0
), 인덱스 (number 0
), 전체 배열 ( [0]
)의 3 개 요소가있는 배열 을 반환합니다 .
그리고이 새 배열은 원래 요소 (number 0
)를 새 요소 (3 개 요소의 배열)에 매핑했기 때문에 원래 Array에 래핑됩니다.
참고 : 다음과 같이 첫 번째 매개 변수 만 사용하는 데 익숙 할 수 있습니다.
array.map(function (a) { return a * a; });
또는 색인을 얻기 위해 두 개만 사용하면
array.map(function (item, index) { return "index=" + index + ", value=" + item; });
그러나 map
콜백 함수에서 무시하면되는 3 개의 매개 변수 가 여전히 제공 된다는 점을 기억해야 합니다. 이것이 코드가 다음과 같은 이유이기도합니다.
[0].map(String);
보고
["0"]
String 함수는 첫 번째 매개 변수에만 관심이 있고 전달 된 다른 매개 변수는 무시 하기 때문 입니다. 전화하면
String(11, "Some", "other", "ignored", "parameters")
당신은 여전히 얻을 것이다
"11"