Javascript 대상 이 존재 하 는 지, 그 유형 을 판단 합 니 다.

6053 단어 JavaScript
1. 대상 의 존재 여부 만 판단
if (typeof myObj == "undefined") {
    var myObj = { };
  }
2. 대상 이 존재 하 는 지 여 부 를 제외 하고 대상 에 null 값 이 있 는 지 판단 해 야 한다.
if (!myObj) {
    var myObj = { };
  }
3. JavaScript 에서 대상 유형 을 판단 하 는 여러 가지 방법
JavaScript 에서 대상 유형 을 검사 하 는 연산 자 는 type: of, instanceof, 그리고 대상 의 constructor 속성 이 있 습 니 다.
1) type: of 연산 자 type: of 는 1 원 연산 자 이 며, 결 과 를 되 돌려 주 는 것 은 연산 수 형식 을 설명 하 는 문자열 입 니 다.예 를 들 어 "number", "string", "boolean", "object", "function", "undefined" (변수 가 존재 하 는 지 판단 하 는 데 사용).그러나 type: of 의 능력 은 한계 가 있 습 니 다. Array, Null, Date, RegExp 형식 에 대해 서 는 모두 "object" 를 되 돌려 줍 니 다.
if(typeof myObj == "undefined"){}
 
 2) instanceof 연산 자.
instanceof 연산 자 는 왼쪽 의 연산 수 를 대상 으로 하고 오른쪽 연산 수 는 대상 류 의 이름 이나 구조 함수 입 니 다.object 가 class 나 구조 함수 의 인 스 턴 스 라면 instanceof 연산 자 는 true 로 돌아 갑 니 다.object 가 지정 한 클래스 나 함수 의 인 스 턴 스 가 아니 거나 object 가 null 이면 false 로 돌아 갑 니 다.
따라서 인 스 턴 스 of 연산 자 를 사용 하여 대상 이 배열 형식 인지 아 닌 지 를 판단 할 수 있 습 니 다.function isArray(arr){     return arr instanceof Array; }
3) constructor 속성.(type: of 는 변수 가 정의 되 어 있 는 지 확인 할 수 있 으 며, construct 는 정 의 된 변수의 유형 만 검사 할 수 있 습 니 다)
JavaScript 에 서 는 대상 마다 constructor 속성 이 있 습 니 다. 이 대상 을 초기 화 하 는 구조 함 수 를 참조 하여 알 수 없 는 대상 의 유형 을 판단 하 는 데 사 용 됩 니 다.지식 을 구 하 는 값 을 지정 하면 type: of 연산 자 를 통 해 원시 값 인지 대상 인지 판단 합 니 다.대상 이 라면 constructor 속성 을 사용 하여 유형 을 판단 할 수 있 습 니 다.그래서 배열 을 판단 하 는 함수 도 이렇게 쓸 수 있다.function isArray(arr){     return typeof arr == "object" && arr.constructor == Array; }
 
 
4) Object.prototype.toString.call([]);

(cross-frame) , (iframe) prototype 。(constructor )。 :

< script > window.onload=function(){ var iframe_arr=new window.frames[0].Array; alert(iframe_arr instanceof Array); // false alert(iframe_arr.constructor == Array); // false } </ script >
해결 방법:
크로스 프로 토 타 입 체인 호출 toString () 방법: Object. prototype. toString ().위의 크로스 프레임 문 제 를 해결 할 수 있다.Object. prototype. toString (o) 을 실행 하면 다음 절 차 를 수행 합 니 다. 1) 대상 o 의 class 속성 을 가 져 옵 니 다.2) 연결 문자열: "[object" + 결과 (1) + "]" 3) 결 과 를 되 돌려 줍 니 다 (2) 예 를 들 어:
1
2 Object.prototype.toString.call([]); // "[object Array]" Object.prototype.toString.call(/reg/ig); // "[object RegExp]"
 
이렇게 하면 우 리 는 건장 한 판단 대상 이 배열 인지 아 닌 지 를 판단 하 는 함 수 를 쓸 수 있다.
1
2
3 function isArray(arr){     return Object.prototype.toString.call(arr) === "[object Array]" ; }
 
왜 Function. prototype. toString 이나 다른 것 이 아 닌 Object. prototype. toString 을 사용 합 니까?이것 은 그들의 toString 해석 방식 과 관계 가 있 습 니 다.
ECMA 에서 Object. prototype. toString 에 대한 설명:
Object.prototype.toString( )
When the toString method is called, the following steps are taken:
1. Get the [[Class]] property of
this object.
2. Compute a string value by concatenating the three strings
“[object “, Result (1), and “]”.
3. Return
Result (2)
그 과정 은 쉽게 말 하면 1. 대상 의 유형 (대상 유형) 을 가 져 옵 니 다. 2. 그리고 [object, 가 져 온 유형,] 을 조합 하여 되 돌려 줍 니 다.
 
 알 리 페 이 JS 프레임 워 크 base. js:
if (value instanceof Array || (!(value instanceof Object) && (Object.prototype.toString.call((value)) == '[object Array]') || typeof value.length == 'number' && typeof value.splice != 'undefined' && typeof value.propertyIsEnumerable != 'undefined' && !value.propertyIsEnumerable('splice'))) { return 'array'; }
 
확장 하여 다양한 대상 유형 을 검사 하 는 데 사용 합 니 다:
 
1
2
3
4
5
6
7
8
9
10
11
12
13 var is ={     types : [ "Array" , "Boolean" , "Date" , "Number" , "Object" , "RegExp" , "String" , "Window" , "HTMLDocument" ] }; for ( var i = 0, c; c = is.types[i ++ ]; ){     is[c] = ( function (type){         return function (obj){            return Object.prototype.toString.call(obj) == "[object " + type + "]" ;         }     )(c); } alert(is.Array([])); // true alert(is.Date( new Date)); // true alert(is.RegExp(/reg/ig)); // true
 
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기