수조를 검출하는 일반적인 방법과 고급 방법
1619 단어 프런트엔드배열instanceof
체크 배열
instanceof
어떤 대상이 수조인지 아닌지를 판단하면 웹 페이지나 전역 역할 영역에 대해
instanceof
조작부호를 사용하면 만족스러운 결과를 얻을 수 있다.if(value instanceof Array){// }
//instanceof
function instanceOf(left,right) {
//
let prototype = right.prototype
//
left = left.__proto__
//
while (true){
if(left == null){
return false
}
if(prototype === left){
return true
}
left = left.__proto__
}
}
instanceof
조작부호의 문제는 전체적인 실행 환경만 있다고 가정하는 데 있다.만약에 웹 페이지에 여러 개의 프레임워크(한 페이지에 여러 개의 프레임이 포함)가 포함된다면 실제로는 두 개 이상의 전역 실행 환경이 존재하고 두 개 이상의 서로 다른 버전Array
의 구조 함수(Array window
가 존재한다.만약 한 프레임워크에서 다른 프레임워크로 하나의 그룹을 전송한다면, 전송된 그룹과 두 번째 프레임워크에서 원생적으로 만들어진 그룹은 각각 다른 구조 함수를 가지고 있다.Array.isArray()
ES5는 이 문제를 해결하기 위해
Array.isArray()
방법을 새로 추가했습니다.이 방법의 목적은 어떤 값이 수조인지 아닌지를 최종적으로 확인하는 것이다. 그것이 어느 전역 실행 환경에서 만들어졌든지 상관없다.사용법은 다음과 같습니다.if(Array.isArray(value)){// }
모든 값에서 Object 기본 toString() 방법을 호출하면 [object Native ConstructorName] 형식의 문자열이 반환됩니다.모든 클래스는 내부에 [[[Class]] 속성이 있는데 이 속성은 상기 문자열의 구조 함수 이름을 지정한다.예:
alert(Object.prototype.toString.call(value));
//“[object Array]”
원본 배열의 구조 함수 이름은 전역 역할 영역과 무관하기 때문에 toSting()을 사용하면 일치된 값을 되돌릴 수 있습니다.이를 통해 다음과 같은 함수를 생성할 수 있습니다.
function isArray(value){
return Object.prototype.toString.call(value)=="[object Array]";
}
마찬가지로 이 사고방식을 바탕으로 어떤 값이 원생 함수나 정규 표현식인지 테스트할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 배열에서 부분열을 꺼내면 Array형이 아닌 ArraySlice형이 된다Swift 3.2.0 Swift 3에서 배열에서 Range 객체를 사용하여 부분 열을 검색하는 경우 다음과 같은 코드로 구현할 수 있습니다. map1.swift 평상시 자신은 Swift를 쓸 때 형추론을 사용하지 않...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.