js 배열(ArrayLike)이란 무엇인가요? js 클래스 배열에는 길이 속성이 있고 기타 속성(인덱스)은 음수가 아닌 정수입니다(객체의 인덱스는 문자열로 처리되지만 여기서는 음수가 아닌 정수 문자열로 이해할 수 있습니다). 배열의 메소드를 가지고 있습니다.
예:
//类数组示例 var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei'//非类数组示例 var c = {'1':2}; //没有length属性就不是类数组
JavaScript의 일반적인 클래스 배열에는 인수 개체와 DOM 메서드의 반환 결과가 포함됩니다.
예: document.getElementsByTagName().
function isArrayLike(o) { if (o && // o is not null, undefined, etc. typeof o === 'object' && // o is an object isFinite(o.length) && // o.length is a finite number o.length >= 0 && // o.length is non-negative o.length===Math.floor(o.length) && // o.length is an integer o.length < 4294967296) // o.length < 2^32 return true; // Then o is array-like else return false; // Otherwise it is not}
3. js 클래스 배열을 배열 메소드로 변환
Array.prototype.slice.call(arrayLike)
//将arguments转化为数组后,截取第一个元素之后的所有元素 var args = Array.prototype.slice.call(arguments,1);
Array.prototype.slice.call(arrayLike).forEach(function(element,index){ //可以随意操作每一个element了 })
와 같이 배열의 메소드를 직접 호출할 수 있습니다. (1) Array.prototype.slice는 배열의 프로토타입에 있는 슬라이스 메소드를 나타냅니다. 이 슬라이스 메소드는 Array 유형 객체를 반환합니다.
//slice的内部实现Array.prototype.slice = function(start,end){ var result = new Array(); start = start || 0; end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键 for(var i = start; i < end; i++){ result.push(this[i]); } return result; }(2) call을 호출할 수 있는 유일한 방법은 [].call을 사용할 수 없고, [].slice를 사용해야 합니다. call의 첫 번째 매개변수는 실제로 슬라이스가 호출되는 환경이 arrayLike 객체가 됨을 나타냅니다. 따라서 arrayLike에도 배열 메서드가 있는 것과 같습니다.
(3) js 클래스 배열을 배열로 변환하는 일반 함수
var toArray = function(s){ try{ return Array.prototype.slice.call(s); } catch(e){ var arr = []; for(var i = 0,len = s.length; i < len; i++){ //arr.push(s[i]); arr[i] = s[i]; //据说这样比push快 } return arr; }
4가 첨부되어 있습니다. 배열을 매개변수 목록(클래스 배열)으로 변환
관련 권장 사항:
위 내용은 js 배열 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!