javascript数据类型的判断方法

简介: 新手学习js过程部分总结,欢迎各位大佬补充规正

前言

  js数据类型大致可分为八种,这八种又可以分为两部分 :

1. 基本数据类型 : Number , BigInt(ie不兼容) , String , Boolean , Null , Undefined , Symbol

2. 引用数据类型 : Object (包括Object , Array , Function , Date ... )

 

常用判断方法

typeof 判断

查看字面量或者变量的数据类型

typeof能判断如下类型 : number , string , boolean , symbol , undefined , function ; null , Array , Object 的判断检测结果均为object,因此这三者的鉴别需要进一步判断

typeof1// 'number'typeof'1'// 'string'typeoftrue// 'boolean'typeof {}               // 'object'typeof []               // 'object'typeofnull//  'object'typeofnewDate()       // 'object'typeof (() => {})       // 'function'typeofundefined// 'undefined'typeofSymbol(1)        // 'symbol'

           

 

instanceof 判断 (instanceof - JavaScript | MDN (mozilla.org)

可以检测构造函数(constructor)的prototype属性是否位于实例对象的原型链上 , 一般用于判断自定义的构造函数实例

({}) instanceofObject// true[] instanceofArray// truefunctionFoo() {}
constfoo=newFoo();
fooinstanceofFoo// truefooinstanceofObject// trueps:由于是利用对象prototype的constructor进行判断,因此只有对象构造的数据类型变量适用该方法,不适用于非对象类型的变量letstr='string数据类型字符串';
letstrObject=newString('Object构造的string字符串');
strinstanceofString;  // falsestrObjectinstanceofString;  // true

 

constructor 判断

能判断如下类型 : Number , String , Boolean , Symbol , Function , Object , Array ; null undefined没有constructor属性,所以不能判断

console.log((1).constructor===Number);    // trueconsole.log(''.constructor===String);     // trueconsole.log(false.constructor===Boolean);  // trueconsole.log([].constructor===Array);     // trueconsole.log(({}).constructor===Object);   // trueconsole.log((functionfoo() {}).constructor===Function);// trueconsole.log(Symbol('1').constructor===Symbol);// true

 

Object.prototype.toString 判断

利用基础数据类型都可以通过引用数据类型包装得到的特性,即Object是其他基础数据类型的父类,重写Object的toString方法,用来判断Array, Null等较难判断的数据类型

functionFoo(){};
constfoo=newFoo();
Object.prototype.toString.call(1); // '[object Number]'Object.prototype.toString.call('1'); // '[object String]'Object.prototype.toString.call(true); // '[object Boolean]'Object.prototype.toString.call(undefined); // '[object Undefined]'Object.prototype.toString.call(null); // '[object Null]'Object.prototype.toString.call(Symbol(1)); // '[object Symbol]'Object.prototype.toString.call(Foo); // '[object Function]'Object.prototype.toString.call(foo); // '[object Object]' , 实例化对象属于ObjectObject.prototype.toString.call({}); // '[object Object]'Object.prototype.toString.call([]); // '[object Array]'Object.prototype.toString.call(NaN); // '[object Number]' ,此方法判断NaN也属于Number

 

判断 Object , Array 的方法

判断 Object 基础对象类型

Object.prototype.toString.call({key : 'value'}) ==='[object Object]'补充:判断空对象functionObj(){
// 1. 利用转换为JSON字符串的方法Obj.prototype.isEmptyJson=function(obj){
returnJSON.stringify(obj)==='{}'  }
// 2. 利用keys遍历自身非原型属性返回的数组长度进行判断Obj.prototype.isEmptyKeys=function(obj) {
returnObject.keys(obj).length===0;
  }
// 3. 利用枚举,逐个检查的方法Obj.prototype.isEmptyIterator=function(obj) {
// 有则进入迭代,没有直接返回truefor (varkeyinobj) {
returnfalse;
    }
returntrue;
  }
}
constobj=newObj()
constemptyObject= {}
console.log(obj.isEmptyJson(emptyObject)) //trueconsole.log(obj.isEmptyKeys(emptyObject)) //trueconsole.log(obj.isEmptyIterator(emptyObject)) //trueconstnotEmptyObject= {name:'zs'}
console.log(obj.isEmptyJson(notEmptyObject)) //falseconsole.log(obj.isEmptyKeys(notEmptyObject)) //falseconsole.log(obj.isEmptyIterator(notEmptyObject)) //false

 

判断是否为数组Array

functionArr(){
// 1. 利用es6的新方法Array.isArray()Arr.prototype.isArray1=function(arr){
returnArray.isArray(arr)
  }
// 2. 利用instanceof进行判断Arr.prototype.isArray2=function(arr) {
returnarrinstanceofArray; 
  }
// 3. 利用constructor进行判断Arr.prototype.isArray3=function(arr){
if(arr) returnarr.constructor===Arrayreturnfalse  }
// 4.利用重写toString方法返回的"[object Array]"进行判断Arr.prototype.isArray4=function(arr) {
if(arr) returnObject.prototype.toString.call(arr).indexOf('Array')>-1;
returnfalse  }
}
constarr=newArr()
constisArr= []
console.log(arr.isArray1(isArr)) //trueconsole.log(arr.isArray2(isArr)) //trueconsole.log(arr.isArray3(isArr)) //trueconsole.log(arr.isArray4(isArr)) //true
相关文章
|
15天前
|
存储 JavaScript 索引
JS中数组的相关方法介绍
JS中数组的相关方法介绍
|
15天前
|
JavaScript
JS 获取对象数据类型的键值对的键与值
JS 获取对象数据类型的键值对的键与值
|
17天前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
18 0
|
18天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
1月前
|
JavaScript 前端开发
解释 JavaScript 中的`map()`、`filter()`和`reduce()`方法的用途。
解释 JavaScript 中的`map()`、`filter()`和`reduce()`方法的用途。
19 1
|
15天前
|
JavaScript 前端开发 索引
JavaScript中与字符串相关的方法
JavaScript中与字符串相关的方法
|
1月前
|
JavaScript
JS数组增删方法的原理,使用原型定义
JS数组增删方法的原理,使用原型定义
|
8天前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
js 垃圾回收机制的方法
|
8天前
|
JavaScript 前端开发
js数据类型有几类?一共有几种?判断数据类型的方法是什么?
js数据类型有几类?一共有几种?判断数据类型的方法是什么?
|
9天前
|
JavaScript 前端开发
js绑定事件的方法
js绑定事件的方法
22 11