检测数据类型的四种方法

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

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()。

时间: 2024-10-26 18:26:28

检测数据类型的四种方法的相关文章

JS 中检测数组的四种方法

今天和大家分享一下 JS 中检测是不是数组的四种方法,虽然篇幅不长,不过方法应该算是比较全面了. 1. instanceof 方法 instanceof 用于检测一个对象是不是某个类的实例,数组也是一种对象所以也可以利用 instaceof 来进行判断. let arr = [1, 2, 3]; console.log(arr.instanceof(Array)); // true 这种方法在只有一个全局作用域的环境下是可以的,但是如果一个网页中包含多个框架,那么就会存在不同的全局环境,不同的环

[转]js判断数据类型的四种方法

原文地址:https://www.cnblogs.com/crackedlove/p/10331317.html 1.typeof typeof是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型.返回的结果用该类型的字符串(全小写字母)形式表示,包括number,string,boolean,undefined,object,function,symbol等. typeof ""; //string typeof 1; //number typeof false; //b

Java解析XML文件的四种方法

[摘要] 可扩展标志语言(XML)在实现信息标准化.信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视.本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处.最后给出了一个简单的案例来对这四种解析进行代码介绍. [关键字] XML文件,DOM,SAX,JDOM,DOM4J [引言] XML即可扩展标记语言(EXtensible Markup Language),是标准通用标记语言的子集,是一种用于标记

IOS中Json解析的四种方法

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的ios版本,可以使用第三方库来解析Json. 本文将介绍TouchJso

Spring Security3的四种方法概述

使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac

20150503 imx257下实现I2C驱动的四种方法

20150503 imx257下实现I2C驱动的四种方法 2015-05-3 Lover雪儿 时间过得好快,转眼间五一假期就即将结束了,假期期间,大家都潇洒的去玩了,徒留辛辛苦苦的程序员还是窝在宿舍乖乖的敲着代码... 好啦,开开玩笑,辛酸史每家都有一大本,还是要积极的面对生活!!! 今天我们的任务是简单的入门linux内核下i2c设备驱动分离的四种写法. 一.一个简单的i2c驱动 和以前的驱动程序不同,i2c驱动分为drv驱动和dev设备驱动两个文件,不懂的可以参考我以前写的<20150313

【转】IOS中Json解析的四种方法

原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSer

使用Spring Security3的四种方法概述

使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac

转载:CSS实现三栏布局的四种方法示例

转载网址:http://www.jb51.net/css/529846.html 前言 其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具体的介绍了三栏布局的四种方法,并介绍了它的使用场景. 所谓三栏布局就是指页面分为左中右三部分然后对中间一部分做自适应的一种布局方式. 1.绝对定位法 HTML代码如下: <div class="left&quo