함수의 실제 매개변수를 array_javascript 기술로 변환하는 방법

WBOY
풀어 주다: 2016-05-16 18:35:57
원래의
910명이 탐색했습니다.

다행히 배열의 슬라이스 메소드를 통해 인수 객체를 실제 배열로 변환할 수 있습니다:
var args = Array.prototype.slice.call(arguments);
슬라이스 메소드의 경우 ECMAScript 262 15.4. Array.prototype.slice(시작, 끝) 장에 메모가 있습니다:

코드 복사 코드는 다음과 같습니다.



"Pro JavaScript Design Patterns" ("JavaScript Design Patterns")의 저자인 Dustin Diaz는 다음과 같이 지적했습니다.

대신…
var args = Array.prototype.slice.call(arguments); // Yi Fei의 메모: 이하에서는 방법 1이라고 합니다.
이 작업을 수행하세요.
var args = [].slice.call(arguments, 0); Fei의 메모: 이하 두 번째 방법이라고 합니다


그런데 둘 사이에 성능 차이가 실제로 존재할까요? 간단한 개인 테스트 후 다음을 발견했습니다.

arguments.length가 작을 경우 방법 2가 성능 면에서 약간 이점이 있지만,args.length가 클 경우 방법 1이 약간 이점이 있습니다.

마지막으로 가장 구식인 세 번째 방법이 첨부됩니다.


var args = [];
for (var i = 1; i args.push(arguments[i] );
}


그러나 일반적인 경우에는 개인적으로 두 번째 방법을 사용하는 것이 좋지만 어떤 솔루션에도 최선은 없고 가장 적합한 방법만 있습니다.


var args = [].slice.call(arguments, 0);
두 가지 이유가 있습니다.


일반 함수의 인수 길이가 10 이내이고, 두 번째 방법의 장점이 있습니다.
두 번째 방법의 코드 양도 적습니다. 첫 번째 방법은 최소한 바이트를 줄일 수 있습니다^^


NodeList(예: document.getElementsByTagName('div'))를 배열로 변환하는 방법은 무엇입니까? 해결 방법은 다음과 같이 간단합니다.


function nodeListToArray(nodes ){
var arr, length;
try {
// IE를 제외한 모든 브라우저에서 작동합니다.
arr = [].slice.call(nodes)
return arr;
} catch(err){
// 속도는 느리지만 IE에서는 작동합니다.
arr = []
length = node.length; < length; i ){
arr.push(nodes[i]);
return arr;
}
NodeList가 불가능한 이유 IE[ ].slice.call(nodes) 메소드 변환에 사용됩니까?
Internet Explorer에서는 DOM NodeList가 JavaScript 객체가 아니기 때문에 Array.prototype.slice.call(nodes)을 실행할 수 없다는 오류가 발생합니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿