나는 이상한 일을 우연히 발견했습니다 ....이 둘 사이의 차이를 설명하는 시도 할 수 있습니다 어쩌면 사람 : 항목이 동일자바 스크립트 배열 이상시 초기화
var a1=Array(2);
var a2=Array.apply(null,a1);
console.log(a1);
console.log(a2);
console.log(a1[0]===a2[0]);
통지하지만 배열 모양의 콘솔 로그를 다른 (Chrome 및 NodeJS에서).
또한 그들의 다른 측면은 다르게 작동하는 것 :뿐만 아니라 A1에 대한 대답을 위해 itereares지도
a1.map(function(i){console.log("!");})
a2.map(function(i){console.log("!");})
통지를.
이것은 NodeJS, Chrome 및 FF에서 발생합니다.
아이디어가 있으십니까?
var a = new Array(3) // a = [ , , ,]
당신이 map
또는 forEach
를 사용하여 반복하려고하면은, 자바 스크립트 구멍을 건너 뜁니다 : 자바 스크립트에서
문서를 점검하지 않고,'a1 = Array (2)'는'a1'을 길이가 2 인 배열로 설정하지만 어떤 요소도 명시 적으로 지정하지는 않는다고 말하고 싶습니다. 'a2 = Array.apply (null, a1) '은'a2 = Array (undefined, undefined)'를 말하는 것과 비슷합니다. 즉, 명시 적으로 두 요소의 값을'undefined '로 설정합니다. '.map()'은 명시 적으로 설정된 요소만을 반복합니다. – nnnnnn
즉, (이 경우에는)이 키를 추측하고있다. 두 가지 가능한 이유 때문에'someArray [someIndex]'는'undefined '를 반환 할 것이다. 1. someIndex의 요소에 결코 값이 할당되지 않았기 때문에, 또는 2. someIndex의 요소가 명시 적으로 'undefined'로 지정 되었기 때문에. 그리고 당신의'a1 [0] === a2 [0]'테스트는 이유 1을 '정의되지 않음'과 이유 2를 '정의되지 않음'으로 비교합니다. – nnnnnn