JS 데이터 유형 판단의 몇 가지 상용 방법
typeof 판단(최상용)
typeof
는 JS에서 제공하는 연산자로 변수의 유형을 검사하는 데 전문적으로 쓰인다. typeof
에는 두 가지 사용 방식이 있는데 그것이 바로 typeof(표현식)와 typeof 변수 이름이다. 첫 번째는 표현식에 대한 연산이고 두 번째는 변수에 대한 연산이다.
function doSomething() {
console.log('Hello World!');
}
console.log(typeof 1); // number
console.log(typeof 'Hello'); // string
console.log(typeof []); // object
console.log(typeof {}); // object
console.log(typeof doSomething); // function
console.log(typeof true); // boolean
console.log(typeof new Date()); // object
console.log(typeof new RegExp()); // object
console.log(typeof JSON.stringify({
name: 'zhencanhua'
})); // string
console.log(typeof null); // object
console.log(typeof undefined); // undefined
console.log(typeof (new Error('error!'))); // object
console.log(typeof a); // undefined
console.log(typeof Symbol()); // symbol
console.log(typeof new Set()); // object
console.log(typeof new Map()); // object
위의 인쇄 결과를 보면 typeof
인용형 데이터의 유형과null을 구분할 수 없습니다.그리고 우리는 Array를 사용할 수 있습니다.isArray(arr)는 그룹 형식의 데이터를 선별합니다.instanceof 판단(이해)
instanceof
구조 함수의 prototype
속성이 특정한 실례 대상의 원형 체인에 나타나는지 검사하는 데 사용된다.문법:object (실례 대상) instanceof constructor (구조 함수).그렇다면true로 돌아가고, 그렇지 않으면false로 돌아갑니다.따라서 instanceof
연산자는 대상의 판단으로만 사용할 수 있다.typeof
판단할 수 없는 인용형 데이터에 대해 우리는 instanceof
연산자를 사용할 수 있다.
let arr1 = [1, 2, 3];
let obj1 = {
name: ' '
};
function Persion() { }
let persion1 = new Persion();
console.log(arr1 instanceof Array); // true
console.log(arr1 instanceof Object); // true,Array Object
console.log(obj1 instanceof Object); // true
console.log(obj1 instanceof Array); // false
console.log(Persion instanceof Function, Persion instanceof Object); // true true
console.log(null instanceof Object); // false
console.log(persion1 instanceof Persion, persion1 instanceof Function, persion1 instanceof Object); // true false true
// String Date Object
let str1 = 'Hello';
let str2 = new String();
let str3 = new String(' ');
let myDate = new Date();
console.log(str1 instanceof String, str1 instanceof Object); // false, false
console.log(str2 instanceof String, str2 instanceof Object); // true, true
console.log(str3 instanceof String, str3 instanceof Object); // true, true
console.log(myDate instanceof Date, myDate instanceof Object); // true, true
위의 판단을 통해 알 수 있듯이 instanceof
의 사용 제한이 매우 많고 하나의 실례가 수조인지 대상이나 방법인지 명확하고 편리하게 판단할 수 없다.위의 방법의 폐단에 대하여 우리는 Object를 사용할 수 있다.prototype의 원본 toString () 방법으로 데이터의 유형을 측정합니다.
Object.prototype.toString.call() 판단(가장 믿을 만함)
Object는 JS에서 제공하는 원래 객체입니다. Object.prototype.toString은 모든 변수에 "[object class]"문자열을 되돌려줍니다. class는 JS 내장 대상의 구조 함수 이름입니다.call은 호출 함수 작용역을 바꾸는 데 사용됩니다.
Object.prototype.toString()은 toString 메서드가 호출될 때 다음 절차를 수행합니다.
위의 설명을 읽었습니다.call의 관건은 첫 번째 단계입니다.this 대상을 얻었습니다.call을 추가하지 않고 역할 영역을 바꿀 때this가 가리키는 것은 Object입니다.prototype.
function doSomething() {
console.log('Hello World!');
}
// Object.prototype.toString.call
console.log(Object.prototype.toString.call(1)); // [object Number]
console.log(Object.prototype.toString.call('Hello')); // [object String]
console.log(Object.prototype.toString.call(false)); // [object Boolean]
console.log(Object.prototype.toString.call({})); // [object Object]
console.log(Object.prototype.toString.call([1, 2, 3])); // [object Array]
console.log(Object.prototype.toString.call(new Error('error!'))); // [object Error]
console.log(Object.prototype.toString.call(new Date())); // [object Date]
console.log(Object.prototype.toString.call(new RegExp())); // [object RegExp]
console.log(Object.prototype.toString.call(doSomething)); // [object Function]
console.log(Object.prototype.toString.call(null)); // [object Null]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]
console.log(Object.prototype.toString.call(JSON.stringify({
name: 'zhencanhau'
}))); // [object String]
console.log(Object.prototype.toString.call(Math)); // [object Math]
console.log(Object.prototype.toString.call(Symbol('abc'))); // [object Symbol]
console.log(Object.prototype.toString.call(new Set())); // [object Set]
console.log(Object.prototype.toString.call(new Map())); // [object Map]
그러나 실제 응용 프로그램에서 우리는 되돌아오는 결과의 두 번째 항목, 예를 들어 "[object Number]"만 가져오고 싶을 뿐, 우리는 Number라는 문자만 원한다. 그러면 우리는 함수를 써서 필터를 할 수 있다.
//
function getTypeName(val) {
let str = Object.prototype.toString.call(val);
return /^\[object (.*)\]$/.exec(str)[1];
}
console.log(getTypeName(false)); // Boolean
console.log(getTypeName()); // Undefined
console.log(getTypeName(null)); // Null
위의 문제는 완벽하게 해결되었다.constructor 판단(상용)
모든 대상의 실례는
constrcutor
대상을 통해 구조 함수에 접근할 수 있다.JS에는 Object, Array, Function, Date, RegExp, String 등 구조 함수가 내장되어 있다.우리는 데이터의 constrcutor
구조 함수와 같은지 여부를 통해 데이터의 유형을 판단할 수 있다.
var arr = [];
var obj = {};
var date = new Date();
var num = 110;
var str = 'Hello';
var getName = function(){};
var sym = Symbol();
var set = new Set();
var map = new Map();
arr.constructor === Array; // true
obj.constructor === Object; // true
date.constructor === Date; // true
str.constructor === String; // true
getName.constructor === Function; // true
sym.constructor === Symbol; // true
set.constructor === Set; // true
map.constructor === Map // true
그러나 이런 방식은 여전히 폐단이 있다. 바로 constructor
이 가리키는 구조 함수는 수정될 수 있다는 것이다.
function Name(name) {
this.name = name;
}
function Stuent(age) {
this.age = age;
}
// Name Student ,Student , 。
Stuent.prototype = new Name(' ');
Stuent.prototype.constructor === Name; // true
Stuent.prototype.constructor === Stuent; // false
이상은 제가 프로젝트에서 사용한 데이터 유형의 판단 방법입니다. 구체적으로 어떤 것을 사용하는지 자신의 실제 수요에 따라 선택을 판단해야 합니다.JS 데이터 형식 판단에 관한 몇 가지 자주 사용하는 방법에 관한 이 글을 소개합니다. JS 데이터 형식 판단 내용과 관련된 더 많은 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.