>  기사  >  웹 프론트엔드  >  js_javascript 팁에서 숫자 속성 이름을 가진 객체를 배열로 변환

js_javascript 팁에서 숫자 속성 이름을 가진 객체를 배열로 변환

WBOY
WBOY원래의
2016-05-16 18:09:391173검색

일반적으로 사용되지는 않지만 숫자가 포함된 속성을 객체에 속성 이름으로 추가할 수 있습니다.

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

var obj = {};
obj[0] = 1;
obj[1] = 2;

배열형인데 배열형으로 변환할 수 있는 방법이 있나요? jQuery 코드는 Array.prototype.slice를 사용하여 이런 종류의 객체를 배열로 변환했지만 여러 번 시도했지만 작동하지 않았습니다.
코드 복사 코드는 다음과 같습니다.

var obj = {}
obj[0] = 1
obj[1]
alert(Array.prototype .slice.call(obj));

위 코드는 IE에서는 오류를 직접 보고하지만 출력 내용은 비어 있습니다. 즉, 변환이 실패했습니다. 이 내장 메소드에 대한 문제는 ECMA-262를 확인하는 것이 가장 좋습니다. 슬라이스 메소드 실행 프로세스의 처음 두 단계는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.

1. A를 new Array() 표현식에 의해 생성된 새 배열이라고 가정합니다.
2. "length" 인수를 사용하여 이 개체의 [[Get] ] 메서드를 호출합니다.

여기서 매개변수 길이가 언급됩니다. obj 객체에는 숫자 인덱스가 있지만 길이 속성은 없습니다. 사실, 그게 문제입니다: 슬라이스 메소드는 이 객체의 길이를 모릅니다. 간단히 코드를 수정하고 길이 속성을 추가하세요.
코드 복사 코드는 다음과 같습니다.

var obj = {};
obj[0] = 1;
obj.length = 2; obj));


출력 내용은 "1,2"이며, 복사가 성공했습니다. 이는 슬라이스 메소드를 호출할 때 숫자 인덱스와 길이 속성이 있는 한

배열로 변환할 수 있다는 뜻인가요? . 이 법칙은 대부분의 브라우저에 적용됩니다. 그러나 IE 환경에서는

HtmlCollection

과 같은 DOM 요소 모음의 경우 위와 같은 특성을 갖고 있어도 슬라이스 호출 시 오류를 보고하게 됩니다.

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