>  기사  >  웹 프론트엔드  >  JavaScript는 객체가 객체인지 Array_Basic 지식인지 결정합니다.

JavaScript는 객체가 객체인지 Array_Basic 지식인지 결정합니다.

WBOY
WBOY원래의
2016-05-16 18:35:38995검색

1. Typeof 연산자는 Function, String, Number, Undefine 등 여러 유형의 객체에 대해 완전한 능력을 갖고 있지만 Array

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

var arr=new Array("1","2","3","4", "5");
alert(typeof(arr));


약간 실망스러운 개체 응답을 받게 됩니다.
2.instanceof 연산자, instanceof JavaScript 연산자의 연산은 객체가 특정 클래스의 인스턴스인지 여부를 나타내는 부울 값을 반환합니다.
사용 방법: 결과 = 클래스 객체 인스턴스, 지금은 여전히 ​​배열입니다. 다시 시도해 보세요.
코드 복사 코드는 다음과 같습니다.

var arrayStr=new Array("1","2","3","4","5")
Alert(arrayStr instanceof Array );


간단히 요약: 오늘 논의한 질문에 대한 답변이 된 것 같지만 실제로는 여러 프레임 사이를 이동하면 큰 문제가 발생합니다.

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

var iframe = document. createElement('iframe' );
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array; var arr = new xArray("1 ","2" ,"3","4","5");//이 쓰기 방법은 IE에서 지원되지 않습니다. FF에만
alert(arr instanceof Array); // false
alert가 있습니다. (arr. constructor === Array); // false

반환 결과는 False 2개로 실망스럽습니다.

ECMA-262는
Object.prototype.toString( ) toString 메소드가 호출되면 다음 단계를 수행합니다.
1. 이 객체의 [[Class]] 속성을 가져옵니다.
2. "[object ", Result (1) 및 "]" 세 문자열을 연결하여 문자열 값을 계산합니다.
3. Return Result (2)
위 사양은 Object를 정의합니다. 프로토타입.toString: 먼저 객체의 내부 속성 [[Class]]를 얻은 다음 이 속성을 기반으로 한 결과로 "[object Array]"와 유사한 문자열을 반환합니다(ECMA 표준을 읽은 사람은 알아야 함) 즉, [[]]는 언어 내부적으로 사용되며 외부에서 직접 접근할 수 없는 속성("내부 속성"이라고 함)을 나타내는 데 사용됩니다. 호출과 결합된 이 방법을 사용하면 모든 객체의 내부 속성 [[Class]]을 얻은 다음 유형 감지를 문자열 비교로 변환하여 목적을 달성할 수 있습니다. 먼저 ECMA 표준의 Array에 대한 설명을 살펴보겠습니다.
ECMA-262는
new Array([ item0[, item1 [,…]]])
[[Class]] 속성을 씁니다. 새로 생성된 객체는 "배열"로 설정됩니다.
이를 활용하여 세 번째 방법이 나타납니다.
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]'
} 호출은 toString의 this 참조를 감지할 객체로 변경합니다. 그런 다음 이 객체의 문자열 표현을 비교하여 이 문자열이 '[object Array]'인지 확인하고 이것이 Array의 인스턴스인지 여부를 결정합니다. 어쩌면 o.toString()을 직접적으로 물어보는 것이 어떨까요? Array는 Object에서 상속되지만 toString 메서드도 가지게 되지만 이 메서드는 다시 작성되어 요구 사항을 충족하지 못할 수 있으며 Object.prototype은 호랑이 엉덩이이므로 감히 건드릴 사람이 거의 없습니다. 어느 정도 "순수함"을 보장할 수 있습니다 :)
이전 솔루션과 달리 이 방법은 크로스 프레임 객체 구성 문제를 매우 잘 해결했으며, 테스트 결과 주요 브라우저의 호환성도 매우 좋습니다. 안심하고 사용하실 수 있습니다. 좋은 소식은 jQuery, Base2 등과 같은 많은 프레임워크가 이 방법을 사용하여 배열, 정규식 등과 같은 특정 유형의 특수 객체를 직접 작성할 필요 없이 구현할 계획이라는 것입니다.

또한 Ext3도 이렇게 작성했습니다

코드를 복사하세요 코드는 다음과 같습니다.
isArray : function(v){
return toString.apply(v) === '[객체 배열]'
}

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