判断js中的数据类型的几种方法

判断js中的数据类型一般使用以下几种方法:typeof、instanceof、 Object.prototype.toString

先举几个例子

// 普通数据类型
var str = "132456465";
var num = 123;
var bool = true;
var nu = null;
var un = undefined;
var sym = Symbol(42);

// 引用数据类型
var obj = {
    hello: "你好哈喽"
};
var arr = ["1","c",5];
var map = new Map([[1,2],[2,5]]);
var set = new Set([1, 2, 3, 4, 5]);
var date = new Date();
var regexp = new RegExp('\\w+');
var math= Math.random();
var fun = function () {
    console.log("这是函数");
};
function* gen() { 
  yield 1;
  yield 2;
  yield 3;
};
var pro = new Promise((res)=>{res("你好")})
var weakmap = new WeakMap([[{}, 2], [{}, 5]]); 

 

1、最常见的判断方法:typeof 

  typeof 只能判读除null以外的基础数据类型,无法判断除function以外引用数据类型

console.log("-typeof-start-");
console.log(typeof str == "string"); // true
console.log(typeof num == "number"); // true
console.log(typeof bool == "boolean"); // true
console.log(typeof nu); // object
console.log(typeof un == "undefined"); // true
console.log(typeof sym == "symbol"); // true
console.log(typeof obj); // object
console.log(typeof arr); // object
console.log(typeof map); // object
console.log(typeof set); // object
console.log(typeof date); // object
console.log(typeof regexp); // object
console.log(typeof math); // number
console.log(typeof fun); // function
console.log(typeof gen); // function
console.log(typeof pro); // object
console.log(typeof weakmap); // object
//另外typeof 可以判断string、number、boolean、undefined的类型,其他还需要进一步判读
console.log("-typeof-end-");

 

2、判断已知数据是引用数据类型的方法: instanceof

但是纯object不能使用instanceof验证,因为其他的类型object也是object
console.log("-instanceof-start-");
console.log(str instanceof String); // false
console.log(num instanceof Number); // false
console.log(bool instanceof Boolean); // false
// console.log(nu instanceof null); // 报错
// console.log(un instanceof undefined); // 报错
console.log( sym instanceof Symbol); // true
console.log( obj instanceof Object); // true
console.log( arr instanceof Object); // true
console.log( arr instanceof Array); // true
console.log( map instanceof Map); // true
console.log( set instanceof Set); // true
console.log( date instanceof Date); // true
console.log( regexp instanceof RegExp); // true
console.log( math instanceof Number); // false
console.log( fun instanceof Function); // true
console.log( gen instanceof Function); // true
console.log( pro instanceof Promise); // true
console.log( weakmap instanceof WeakMap); // true
// instanceof几乎可以验证所有的object 但是纯object不能使用instanceof验证,因为其他的类型object也是object
console.log("-instanceof-end-");

 

3、非常通用,不存在死角的判断方法: Object.prototype.toString

  推荐使用这种方法封装判读方法作为util.js中的方法console.log("-Object.prototype.toString-start-");var toStr = Object.prototype.toString;

console.log(Object.prototype.toString.call(str)); // [object String]
console.log(Object.prototype.toString.call(str) == "[object String]"); // true
console.log(Object.prototype.toString.call(num)); // [object Number]
console.log(Object.prototype.toString.call(bool)); // [object Boolean]
console.log(Object.prototype.toString.call(nu)); // [object Null]
console.log(Object.prototype.toString.call(un)); // [object Undefined]
console.log(Object.prototype.toString.call(sym)); // [object Symbol]
console.log(Object.prototype.toString.call(obj)); // [object Object] console.log(Object.prototype.toString.call(arr)); // [object Array] console.log(Object.prototype.toString.call(map)); // [object Map] console.log(Object.prototype.toString.call(set)); // [object Set] console.log(Object.prototype.toString.call(date)); // [object Date] console.log(Object.prototype.toString.call(regexp)); // [object RegExp] console.log(Object.prototype.toString.call(math)); // [object Number] console.log(Object.prototype.toString.call(fun)); // [object Function] console.log(Object.prototype.toString.call(gen)); // [object GeneratorFunction] console.log(Object.prototype.toString.call(pro)); // [object Promise] console.log(Object.prototype.toString.call(weakmap)); // [object WeakMap] console.log("-Object.prototype.toString-end-");

 

function isString(val){
    return Object.prototype.toString.call(val) == "[object String]"
};
function isNumber(val){
    return Object.prototype.toString.call(val) == "[object Number]"
};
function isBoolean(val){
    return Object.prototype.toString.call(val) == "[object Boolean]"
};
function isNull(val){
    return Object.prototype.toString.call(val) == "[object Null]"
};
function isUndefined(val){
    return Object.prototype.toString.call(val) == "[object Undefined]"
};
function isSymbol(val){
    return Object.prototype.toString.call(val) == "[object Symbol]"
};
function isPlainObject(val){
    return Object.prototype.toString.call(val) == "[object Object]"
};
function isArray(val){
    return Object.prototype.toString.call(val) == "[object Array]"
};
function isMap(val){
    return Object.prototype.toString.call(val) == "[object Map]"
};
function isSet(val){
    return Object.prototype.toString.call(val) == "[object Set]"
};
function isDate(val){
    return Object.prototype.toString.call(val) == "[object Date]"
};
function isRegExp(val){
    return Object.prototype.toString.call(val) == "[object RegExp]"
};
function isFunction(val){
    return Object.prototype.toString.call(val) == "[object Function]"
};
function isGenerator(val){
    return Object.prototype.toString.call(val) == "[object GeneratorFunction]"
};
function isPromise(val){
    return Object.prototype.toString.call(val) == "[object Promise]"
};
function isWeakMap(val){
    return Object.prototype.toString.call(val) == "[object WeakMap]"
};

 

参考博客https://www.cnblogs.com/dushao/p/5999563.html

posted @ 2020-05-02 16:39  只争朝夕,不负韶华  阅读(315)  评论(0编辑  收藏  举报