博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
检测数据类型的四种方法
阅读量:5169 次
发布时间:2019-06-13

本文共 2124 字,大约阅读时间需要 7 分钟。

   自己总结的四种检测数据类型的方法。如有不足,虚心接受大家的指点。

1.typeof检测基本数据类型的操作符

   语法:result = typeof variable;

   1)首先返回的都是字符串,其次字符串中为对应的数据类型。例如:“number”,“string”,“boolean”,“undefined”,“function”,“object”

局限性:不能具体细分是什么值,适合检测基本数据类型,不适合检测引用数据类型。

typeof null -> "object"

var str = 'wenjia';

var num = 25;
var nul = null;
var bool = true;
var unde = undefined;
var ary = [];
var obj = {};
var reg = /^$/;
function fn(){}
console.log(typeof num);//字符串number

 

2.instanceof检测引用数据类型,某个值是什么类型的对象.某一个实例是否属于某个类

   语法:result = variable instanceof constructor;

局限性:

    1)不能检测和处理字面量创建出来的基本数据类型的值
        字面量创建和实例创建检测值是有区别的,从严格意义上来讲,只有实例创建的菜属于对象,也属于某个类的实例,字面量创建的值为基本数据类型,不是严谨的实例,由于js松散特点,可以用对象原型上的方法。
        console.log(1 instanceof Number) -> false
        console.log(new Number(1) instanceof Number) ->true
     2)instanceof特性:只要在当前实例的原型链上,我们用其检测出来的结果都为true。
         在类的原型继承中,我们最后检测出来的结果未必准确
         console.log(ary instanceof Array); ->true

 

3.constructor 构造函数 作用和instaceof非常相似

   语法:result = variable.constructor === constructor;

   局限性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor覆盖了,这样测出来的结果就不准确.

   console.log(ary.constructor === Array);

   constructor能检测基本数据类型
   console.log(num.constructor === Number);

 

 4.Object.prototype.toString.call(); 最准确最常用方式

    首先获取Object原型上的toString方法,让方法执行,并且改变方法中this关键字的指向
    Object.prototype.toString作用返回当前方法执行的主体,所属类的详细信息
    console.log(Object.prototype.toString.call(str)); //-> [object String]
    console.log(Object.prototype.toString.call(num));//-> [object Number]
    console.log(Object.prototype.toString.call(nul));//-> [object Null]
    console.log(Object.prototype.toString.call(bool));//-> [object Boolean]
    console.log(Object.prototype.toString.call(unde));//-> [object Undefined]
    console.log(Object.prototype.toString.call(obj));//-> [object Object]
    console.log(Object.prototype.toString.call(reg));//-> [object RegExp]
    console.log(Object.prototype.toString.call(fn));//-> [object Function]

    判断某个值是否属于某个数据类型

    console.log(Object.prototype.toString.call(str) === "[object String]");
    或者用正则判断
    var reg = /^\[object Array\]$/;
    console.log(reg.test(Object.prototype.toString.call(ary)));//true

 

总结:只需要检测基本数据类型,用typeof即可。检测引用数据类型细分用Object.prototype.toString.call()。

 

转载于:https://www.cnblogs.com/wenjiajia/p/5946523.html

你可能感兴趣的文章
spring security退出方法
查看>>
从获得字符串中获取数字
查看>>
传入一个月份获取该月的统计信息
查看>>
分组取出值最大的数据
查看>>
java判断为空的方法
查看>>
double类型的数值转为小数点2位
查看>>
java比较两个时间年月份的大小
查看>>
服务器上配置JDK
查看>>
java后台生成APP和H5所需要支付宝订单
查看>>
接口传递的json后台如何获得值
查看>>
分页工具的使用
查看>>
如何在Linux启动jar 包
查看>>
微信支付java后台
查看>>
小明买了一箱鸡蛋,假设有n个,可以一天吃1个,也可以一天吃2个,请问有多 少种方法可以吃完?...
查看>>
BigDecimal浮点精度加减乘除运算
查看>>
java生成仿银行卡的会员号
查看>>
线程的等待状态
查看>>
生成仿信用卡的卡号
查看>>
线程池
查看>>
写一个生产者消费者的例子
查看>>