일반적으로 사용되지는 않지만 숫자가 포함된 속성을 객체에 속성 이름으로 추가할 수 있습니다.
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 요소 모음의 경우 위와 같은 특성을 갖고 있어도 슬라이스 호출 시 오류를 보고하게 됩니다.