단어의 0.642017.09.15 18시 12분 35초 수는 2992 (434)를 읽고
문제가 발생
공식 문서 vue.js 보면, 나는 그런 구절을 발견 :
내가 그들을 이해하지 못했다 Array.apply(null, { length: 20 })
직접 새로운 어레이 (20)를 사용하지 왜합니까?
시험
나는 다음과 같은 코드를 시도하고 길이 (20)의 배열이 왜 777에 할당되지 않은 발견?
let arr = new Array(20).map(function() { return 777; }) console.log(arr); // (20) [undefined × 20]
나는 고개를 MDN이 발견을 :
배열, 결코 과제 중 새 Array (), map 함수는 우리가 원하는 값을 얻을 수 있다는 의미.
하지만 브라우저의 배열을 인쇄하고, 어, 분명 아, 값 (정의)를 가지고있다, 발견! 의아해.
해결
로 : 나는 마침내 이해 유래를 보았다 new Array(3)
인수의 배열, 사실, 단지 길이, 인덱스는 하늘의 배열 요소가 아닌, 그래서 우리가 일반적으로 배열을 생성하지 않습니다.
다음은이 배열 인덱스를 증명할 수 :
let a = new Array(10) console.log(2 in a); // false
지도 및 배열 프로토 다른 방법은 호출자 값 비어 배열 가능한 반복 예상되므로, 직접 새로운 배열 () 어레이는 원하는 결과를 얻을 수있는 주행 맵 () 밖으로 아니다.
그리고 Array.apply(null,Array(3))
에 사실과 동등한에 Array.apply(null,[undefined,undefined,undefined])
, 그것은에 해당 Array(undefined,undefined,undefined)
인덱스 값과 결과 배열이 비어 있지 않은, 그래서 우리는 담대하게지도 () 메소드를 사용할 수 있습니다!
관련 질문
- vue.js 문서
Array.apply(null, { length: 20 })
이다{ length: 20 }
반복 가능한 객체는 객체의 클래스 배열 사실 때문에 동일한 사용할 수있다. - 我在vue.js文档提过一个issue,说splice方法不能像文档中那样增加数组长度,有人给我解答,说最好不要直接赋值长度,因为看起来变长了,其实里面都是空索引,与这次这个问题很类似。所以,以后都用最好都用
Array.apply(null,Array(3))
啦!