JS判断数据类型的几种方法

您所在的位置:网站首页 js判断文件类型有哪些 JS判断数据类型的几种方法

JS判断数据类型的几种方法

2024-07-13 23:00| 来源: 网络整理| 查看: 265

首先,我们回顾一下JavaScript中的数据类型总共分为两大类,基本数据类型和引用数据类型:

基本数据类型:

String、Number、Boolean、Null、Undefined、Symbol(es6新增的)

引用数据类型:

Object、Array、Function

判断数据类型的方法:

typeof:通常用来判断基本数据类型,它返回表示数据类型的字符串,注意,使用typeof来判断null和引用数据类型返回结果都是'object' typeof 1 //number typeof 'a' //string typeof null //object typeof [1,2] //object function Fn(){} typeof new Fn() //object instanceof:如:A instanceof B 判断A是否为B的实例(即B的prototype属性所指向的对象是否在A的原型链上 A 的 _proto_ 指向 B 的 prototype ),如果是返回true,否则返回false。instanceof只能用来判断两个对象是否属于实例关系,而不能判断一个对象实例具体属于哪种类型。 function B(name,age){ this.name = name; this.age = age; } A = new B('张三',18); console.log(A instanceof B) //true let obj = {}; //创建一个空对象obj console.log(obj instanceof Object); // true arr = new Array() //创建一个空数组arr 或arr = [] console.log(arr instanceof Array ); // true date = new Date() console.log(date instanceof Date ); // true // 注意:instanceof后面一定要是对象类型,instanceof前面相当于它的实例对象

但是这种方式判断有个弊端:对于number,string,boolean这三种基本数据类型,只有通过构造函数定义比如:let num =new Number(1);这样定义才能检测出。let num = 1; 这样定义是检测不出来的

constructor:针对instanceof的弊端,我们使用constructor检测,constructor是原型对象的属性,指向构造函数 let num = 23; let date = new Date(); let str = "biu~"; let reg = new RegExp(); let bool = true; let fn = function () { console.log(886); }; let udf = undefined; let nul = null; let array = [1, 2, 3]; console.log(num.constructor); // [Function: Number] console.log(date.constructor); // [Function: Date] console.log(str.constructor); // [Function: String] console.log(bool.constructor); // [Function: Boolean] console.log(fn.constructor); // [Function: Function] console.log(reg.constructor); // [Function: RegExp] console.log(array.constructor); // [Function: Array]

constructor解决了instanceof的弊端,可以检测出除了undefined和null之外的9种数据类型(因为它俩没有原生构造函数)

console.log(udf.constructor);//Cannot read property "constructor" of undefined console.log(nul.constructor);//Cannot read property "constructor" of null Object下的toString.call():可以判断基本数据类型和引用数据类型 Object.prototype.toString.call(); console.log(toString.call(123)); //[object Number] console.log(toString.call('123')); //[object String] console.log(toString.call(undefined)); //[object Undefined] console.log(toString.call(true)); //[object Boolean] console.log(toString.call({})); //[object Object] console.log(toString.call([])); //[object Array] console.log(toString.call(function(){})); //[object Function]

在《你不知道的javaScript》(中卷)中讲到:所有typeof返回值为"object"的对象,都包含一个内部属性[[Class]],我们可以把他看作一个内部的分类,而非传统意义上面向对象的类,这个属性无法直接访问,一般通过Object.prototype.toString(…)来查看。并且对于基本数据类类型null,undefined这样没有原生构造函数,内部的[[Class]]属性值仍然是Null和Undefined



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3