Javascript 대상 이 존재 하 는 지, 그 유형 을 판단 합 니 다.
6053 단어 JavaScript
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.