Array.apply의 차이 JS 무엇입니까 (널 (null), 배열 (3)) 및 배열 (3)인가?

단어의 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))啦!

转发自:https://www.jianshu.com/p/6c7d0b18d4ca

추천

출처www.cnblogs.com/yf2196717/p/11583388.html