最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JS中数据类型检测的四种方法简单介绍

来源:懂视网 责编:小采 时间:2020-11-27 19:32:44
文档

JS中数据类型检测的四种方法简单介绍

JS中数据类型检测的四种方法简单介绍:JS中我们只用一个var就能定义所有类型的变量,非常方便,但是也同样给我们造成了困扰,如果我们想知道一个函数的返回值是什么类型的,或者输入的信息是什么类型的时候就要通过对数据进行检测,所以我们该如何进行数据类型的检测呢? 数据类型检测方式:typ
推荐度:
导读JS中数据类型检测的四种方法简单介绍:JS中我们只用一个var就能定义所有类型的变量,非常方便,但是也同样给我们造成了困扰,如果我们想知道一个函数的返回值是什么类型的,或者输入的信息是什么类型的时候就要通过对数据进行检测,所以我们该如何进行数据类型的检测呢? 数据类型检测方式:typ

var num = 2;
console.log(typeof num); // ->控制台
输出字符串numberconsole.log(typeof typeof typeof typeof function () {}); // 输出的结果为字符串String,因为第一次使用typeof检测后结果为一个字符串数据类型的数据,以后每次检测都是String

typeof的局限性
1. typeof null 的结果为“object”
2. 不能具体细分是数组还是正则,还是对象中的其他值,因为使用typeof检测数据类型,对于对象数据类型中左右的值,最后返回的结果都是“object”


instanceof
instanceof:用来检测某个实例是不是属于某个类;使用方法: 实例 instanceof 类名

instanceof的局限性
1. 不能用来处理字面量创建出来的基本类型值:对于基本的数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定的区别的,从严格的意义上来讲,只有实例创建出来的结果才是标准对象数据类型的值,也是标准的Number这一个类的实例;对于字面量方式创建的结果是基本的数据类型值,不是严谨的实例,但是由于JS的松散性,导致可以使用Number.prototype上提供的方法

 console.log(1 instanceof Number);//->控制台
输出false console.log(new Number(1) instanceof Number);//-> 控制台输出true
  1. instanceof只要在当前实例的原型链上,我们检测出来的结果都为true

  2. 在类的原型链继承当中,我们最后检测出来的结果未必正确

 function Fn() {
 } 
 var ary = new Array;
 Fn.prototype = ary;//原型继承:让子类的原型等于父类的一个实例
 var f =new Fn; // f->Fn.prototype->Array.prototype->Object.prototype
 console.log(f instanceof Array); //-> true

constructor:构造函数
constructor:构造函数 这种方法与instanceof非常相似

var obj = [];
console.log(obj.constructor === Array ); //->trueconsole.log(obj.constructor === RegExp); //->false//console还可以出来基本的数据类型var num = 1;
console.log(num.constructor === Number);//->true// constructor检测和instanceof一同,一般情况下是检测不了的var reg = /^$/;
console.log(reg.constructor === RegExp);//-> trueconsole.log(reg.constructor === RegExp);//-> false

局限性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor覆盖了,这样检测出来的结果就是不准确的;对于特殊的数据类型null和undefined,它们的所属类是Null和Undefined,但是浏览器吧这两个类保护起来了,不允许我们进行访问使用

function Fn() {} 
Fn.prototype = new Array;var f =new Fn;
console.log(f.constructor);//-> Array

Object.prototype.toString.call()
这种方法是我们真是项目中最长用的也是现在最准确的一种方式
首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向
在了解这种方式之前我们先了解下toString这个方法
toString:从字面上来看是转化成字符串,但是某些toString方法不仅仅是转化成字符串;对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是①把当前的数据类型转化为字符串的类型(它们的作用仅仅只是用来转成字符串);但是在Object原型上的toString方法不同于这些,②它的作用是返回当前方法的执行主体(方法中的this)所属的类的详细信息。
第一中类型转成字符串

 //Number.prototype.toString方法是转化为字符串 
 console.log((1).toString()); //->这里的toString是Number.prototype.toString用法是转成字符串-> '1'
 console.log((1).__proto__.__proto__.toString());//[object Object]
 console.log((128).toString(2/8/10));//把数字转化为二进制、八进制、十进制

Object原型上的

 ({name:'编程'}).toString();
 console.log(obj.toString());//-> toString中的this是Obj,返回的是obj所属类的信息->[Object Object]第一个Object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是obj所属的类是ObjectMath.toString();//->toString中的this是Math,返回的是Math所属类的信息 -> [Object Math]console.log(Object.prototype.toString.call([])); //->[object Array]console.log(Object.prototype.toString.call(/^$/)); //->[object Array]console.log(({}).toString.call(new Date)); //->[object Date]console.log(Object.prototype.toString.call(1)); //->[object Number]console.log(Object.prototype.toString.call('编程')); //->[object String]console.log(Object.prototype.toString.call(null)); //->[object Null]console.log(Object.prototype.toString.call(undefined)); //->[object Undefined]console.log(Object.prototype.toString.call(function () {})); //->[object Function]

所有经过对比我们第四中方式的准确性是最高的,所以也是我们项目中经常使用的。Are you get it!!!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JS中数据类型检测的四种方法简单介绍

JS中数据类型检测的四种方法简单介绍:JS中我们只用一个var就能定义所有类型的变量,非常方便,但是也同样给我们造成了困扰,如果我们想知道一个函数的返回值是什么类型的,或者输入的信息是什么类型的时候就要通过对数据进行检测,所以我们该如何进行数据类型的检测呢? 数据类型检测方式:typ
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top