>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 Array.apply 구문 분석

JavaScript에서 Array.apply 구문 분석

小云云
小云云원래의
2018-02-28 13:39:564100검색

먼저 질문을 살펴보겠습니다.

Array.apply(null, {length:5})의 {length:5}를 이해하는 방법? 이 기사에서는 주로 JavaScript의 Array.apply 분석을 공유합니다. 모두를 돕기 위해.

테스트해봤습니다

Array.apply(null, {length:5}) //返回[undefined, undefined, undefined, undefined, undefined]
Array.apply(null, [{length:5}])和Array({length:5})返回的结果是一样的,为[[object Object] { length: 5 }]

두번째,세번째도 이해가 되네요! 첫 번째를 어떻게 이해해야 할까요?

사실 이건 Array와는 전혀 관련이 없고, Array를 사용하다가 우연히 접하게 되었습니다.

이 문제는 Function.call과 Function.apply로 해결해야 한다고 생각합니다.
이 두 함수의 메서드는 동일한 함수를 가지며 둘 다 this의 포인터를 변경하는 데 사용됩니다.
유일한 차이점은 매개변수가 다르다는 것입니다. Apply의 두 번째 매개변수는 배열에 전달되어야 합니다.

먼저 iAmArray를 정의하는 함수가 있어야 합니다.

var iAmArray = function(){
    return arguments;
};

여기서는 걱정하지 마세요. 정상적으로 호출하는 세 가지 방법이 있습니다.

//方便你复制到 Console 中测试,在此再写一遍
var iAmArray = function(){
    return arguments;
};

//普通写法
iAmArray(1,2,3);
/*
    [1, 2, 3]
*/

//call写法
iAmArray.call(null,1,2,3);
/*
    [1, 2, 3]
*/

//apply写法
iAmArray.apply(null,[1,2,3]);
/*
    [1, 2, 3]
*/

적용 모드에서 호출하면 다음과 같습니다. 아마도 작은 버그일 것입니다. 객체인 한 배열로 처리되는 길이도 있습니다. 이는 실제로 Array와 관련이 없습니다.

//方便你复制到 Console 中测试,在此再写一遍
var iAmArray = function(){
    return arguments;
};

var iHaveLength = function(length){
    this.length = length || 5;
    this[2] = "第三个元素";
};

/*
   只要是 Object,还有length,他就当作数组处理了。
*/
iAmArray.apply(null, new iHaveLength());
/*
    [undefined, undefined, "第三个元素", undefined, undefined]
*/
iAmArray.apply(null, new iHaveLength(3));
/*
    [undefined, undefined, "第三个元素"]
*/

최종 요약

그러면 사실 두 번째 매개변수는 배열형 객체만 있으면 됩니다. 예를 들어 {length: 5}는 길이가 5인 배열형 객체로 간주할 수 있습니다. v[ 0] 과 같은 각 요소는 정의되지 않습니다.

그래서 Array.apply(null, { 길이: 5})는
Array(undefine, undefine, undefine, undefine, undefine)


과 동일합니다.

위 내용은 JavaScript에서 Array.apply 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.