>  기사  >  웹 프론트엔드  >  자바스크립트 객체 배열 메소드_자바스크립트 스킬 사용법에 대한 자세한 설명

자바스크립트 객체 배열 메소드_자바스크립트 스킬 사용법에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 17:47:31961검색
Array.prototype.push
push는 배열 끝에 항목을 추가하고 길이를 업데이트하여 배열 길이를 반환합니다.
객체에서 푸시를 사용하면 어떻게 되나요?
아래 코드를 보면 obj가 배열처럼 작동합니다. 길이는 자동으로 업데이트됩니다.
코드 복사 코드는 다음과 같습니다.

var push = Array.prototype.push;
var obj = {};
push.call(obj, "hello"); // 반환 값 1
// obj {"0":"hello", 길이:0}
push.call (obj, "world"); // 반환 값 2
// obj {"0":"hello", "1":"world",length:2}

Array .prototype.length Array.prototype.splice
Object에 길이와 splice를 부여
다음 코드를 보세요: Obj가 실제로 배열이 되나요? 실제로 그렇지 않으면 이는 디버깅 도구의 일부 출력 검사 문제일 수 있습니다.
instanceof를 사용하여 obj instanceof Array를 테스트합니다. //false
var obj = { length:0, splice:Array.prototype.splice};console.log( obj ) // 인쇄: []

계속해서 다음 코드를 살펴보세요:
obj.push(0)//Return obj.length
1obj.push(1)//Return obj.length
2obj.splice (0, 1);//첫 번째 항목을 삭제하고 삭제된 항목을 반환
[0]obj.length // 1 splice는 항목 삭제 시 길이 속성
도 업데이트하므로 성능이 향상됩니다. obj는 배열과 거의 동일합니다. 당연히 슬라이스, 팝, 시프트, 시프트 해제 등은 모두 객체에서 정상적으로 작동할 수 있습니다.
단, 길이를 직접 설정하면 아래 표에서 길이보다 큰 항목은 배열에서 삭제되지만 내부의 obj는 업데이트되지 않습니다.

어디에 적용되나요?
jQuery 객체는 배열처럼 동작하지만 실제로는 객체입니다. 이런 종류의 객체를 새로 만드는 방법은 무엇입니까?
실제로 jQuery는 이 jQuery 객체의 효과를 얻기 위해 Array 메소드를 Object에 빌려줍니다. push와 같은 Array 메소드도 jQuery 객체 내에서 직접 사용됩니다.
jQuery 소스코드 일부 보기(굵게 표시된 부분 참고)
코드 복사 코드는 다음과 같습니다.

// 빈 선택기로 시작
selector: "",
// 현재 사용 중인 jQuery 버전
jquery: "1.7.1",
// jQuery 객체의 기본 길이는 0입니다.
length: 0,
......
// 내부용으로만 사용됩니다.
// 배열의 메서드처럼 작동하지만, 그렇지 않습니다. jQuery 메서드
push: push,
sort: [].sort,
splice: [].splice

객체를 배열로 재생하려면 다음이 필요합니다. 길이 속성이 "배열" 항목의 합계에 해당하지 않는 잠재적인 문제가 있을 수 있습니다.
따라서 길이를 직접 사용하여 길이를 설정하는 것은 지원되지 않습니다.

아래 jquery 코드를 보세요. 길이는 업데이트되지만 jquery 개체는 업데이트되지 않습니다. (물론 이것은 jquery에는 문제가 되지 않습니다.)
var jq = $('div') //페이지에서 40
divjq.length를 얻는다고 가정합니다. // 40
jq.length = 0; jq //? jq에는 여전히 40개의 dom 객체가 저장되어 있으며 길이 속성은 "배열" 항목의 합계와 일치하지 않습니다.
객체의 배열 사용 방법은 여전히 ​​정상적으로 작동할 수 있는데, 이는 다소 예상치 못한 일입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.