JS 는 각종 데이터 형식 을 판단 하 는 방법 & 하나의 변수 가 배열 형식 인지 판단 합 니 다.
4713 단어 JS 프로 그래 밍
js 의 7 가지 데이터 형식: number, string, boolean, undefined, object, null, symbol 과 함수 형식 function.
방법 1: type: of, 배열, 대상 또는 null 을 검사 할 수 없습니다.
typeof 2 // number
typeof null // object
typeof {} // object
typeof [] // object
typeof (function(){}) // function
typeof undefined // undefined
typeof '222' // string
typeof true // boolean
방법 2: instanceof ,배열 과 대상 만 판단 할 수 있 고 string 과 boolean 유형 을 판단 할 수 없 으 며 배열 도 대상 에 속한다.
var o = {'name':'lee'};
var a = ['reg','blue'];
console.log(o instanceof Object);// true
console.log(a instanceof Array);// true
console.log(o instanceof Array);// false
배열 도 대상 에 속 하기 때문에 배열 인지 대상 인지 구분 할 수 없습니다. 개선: 하나의 방법 으로 배열 과 대상 을 판단 합 니 다.
var o = {'name':'lee'};
var a = ['reg','blue'];
var getDataType = function(o){
if(o instanceof Array){
return 'Array'
}else if( o instanceof Object ){
return 'Object';
}else{
return 'param is no object type';
}
};
console.log(getDataType(o));//Object。
console.log(getDataType(a));//Array。
방법 3: constructor 방법
var o = {'name':'lee'};
var a = ['reg','blue'];
console.log(o.constructor == Object);//true
console.log(a.constructor == Array);//true
방법 4: toString () 은 string 과 boolean 유형 을 판단 합 니 다.
var o = {'name':'lee'};
var a = ['reg','blue'];
function c(name,age){
this.name = name;
this.age = age;
}
var c = new c('kingw','27');
console.log(Object.prototype.toString.call(a));//[object Array]
console.log(Object.prototype.toString.call(o));//[Object Object]
console.log(Object.prototype.toString.call(c));//[Object Object]
2. 특수 치 의 상 은 엄격 한 비교 와 같다.
(function(){
console.log(null==undefined) // :true
console.log(null===undefined) // :false
console.log(null===null) // :true
console.log(undefined===undefined) // :true
console.log(NaN==undefined) // :false
console.log(NaN==null) // :false
console.log(NaN==NaN) // :false
console.log(NaN===NaN) // :false
})()
3. 문자열 이 같 음 (= =), 엄 격 히 같 음 (= = =) 연산 자
같은 (= =) 연산 을 비교 할 때 한 쪽 이 문자 이 고 한 쪽 이 숫자 라면 문자열 을 숫자 로 변환 한 다음 비교 합 니 다.
엄격하게 동일 (= = =) 하면 유형 전환 을 하지 않 고 유형 이 동일 한 지 비교 합 니 다.주 남 은 모든 값 과 비교 할 때 false 입 니 다.
4. 문자열 크기 의 비교, (>) 보다 크 고 작 음 (
javascript 문자열 은 (작 음) 보다 크 고 (작 음) 비교 할 때 첫 번 째 문자 의 ascii 값 코드 에 따라 비교 합 니 다. 숫자 (number) 와 문자열 (string) 을 비교 할 때 숫자 (number) 를 문자열 (string) 로 강제로 변환 한 다음 비교 합 니 다.
5. JS 는 하나의 변수 가 배열 형식 인지 판단 합 니 다.
참고 블 로그:https://blog.csdn.net/lee_magnum/article/details/11555981
1. instanceof 연산 자
instanceof 연산 자 는 constructor. prototype 이 매개 변수 object 의 원형 체인 에 존재 하 는 지 확인 하 는 데 사 용 됩 니 다.
obj instanceof Object; //true 인 스 턴 스 obj 는 Object 구조 함수 에 있 지 않 습 니 다.
var arr = [1,2,3,1];
alert(arr instanceof Array); // true
2. 대상 의 constructor 속성
var arr = [1,2,3,1];
alert(arr.constructor === Array); // true
두 번 째 방법 과 세 번 째 방법 은 흠 잡 을 데 가 없 는 것 같 지만 사실은 구멍 이 있 습 니 다. 여러 프레임 을 오 갈 때 이 두 가지 방법 은 알렉산더 입 니 다. iframe 마다 자신의 실행 환경 이 있 기 때문에 frame 을 뛰 어 넘 는 실례 화 된 대상 은 서로 원형 체인 을 공유 하지 않 기 때문에 상기 검 측 코드 가 효력 을 잃 습 니 다!
3、Object.prototype.toString (null 과 array 형식 을 구분 하 는 데 사용)
function isArrayFn (o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
var arr = [1,2,3,1];
alert(isArrayFn(arr));// true
call 은 toString 의 this 인용 을 검 측 대상 으로 바 꾸 고 이 대상 의 문자열 을 되 돌려 표시 한 다음 이 문자열 이 '[object Array]' 인지 비교 하여 Array 의 인 스 턴 스 인지 여 부 를 판단 합 니 다.
4.Array.isArray()
ECMAScript 5 는 Array. isArray () 를 자 바스 크 립 트 에 정식으로 도입 합 니 다. 하나의 값 이 배열 인지 정확하게 확인 하 는 것 이 목적 입 니 다. IE9 +, Firefox 4 +, Safari 5 +, Opera 10.5 +, Chrome 은 모두 이 방법 을 실 현 했 습 니 다. 그러나 IE8 이전 버 전 은 지원 되 지 않 습 니 다.
var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true