JS数据类型分类及常用判断方法


Posted in Javascript onNovember 19, 2020

数据类型判断的方法

在探索数据类型判断方法的时候我们需要知道JS中有哪些数据类型:

我们可以把JS中数据类型分为两类:

1.基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(es6中新增)

2.引用类型(复杂数据类型):里面包含 function、Array、Date 等

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

1.typeof

我相信typeof这个判断数据类型的方法是大家平常用的比较多的,闲话不多说,直接上代码:

console.log(typeof 1);//number
console.log(typeof 'hello');//string
console.log(typeof true);//boolean
console.log(typeof null);//object
console.log(typeof Symbol(1));//symbol
console.log(typeof undefined);//undefined
console.log(typeof function(){});//function
console.log(typeof []);//object
console.log(typeof {});//object

通过以上代码和输出我们大概可以看出,typeof这个判断能判断出大部分的数据类型,但是基本类型中有null的类型被判断为object

所以这个判断还不是那么精确,我们需要其它判断方法

2.instanceof 用于检测构造函数的 prototype 属性是否出现在某个实例的原型链上

1.instanceof 左为实例,右为构造函数。即判断左是不是右的实例对象。内部机制是通过原型链来判断的

2.instanceof 可以精准判断引用数据类型 Array,Function,Object,而基本数据类型不能被 instanceof 精准判断,因为它本身不是一个实例对象

console.log(2 instanceof Number);//false
console.log(new Number(2) instanceof Number);//true
console.log('str' instanceof String); //false
console.log(new String('str') instanceof String); //true
console.log([] instanceof Array);//true
console.log([]instanceof Object);//true
console.log({} instanceof Object);//true
console.log({} instanceof Array);//false
console.log(function(){} instanceof Function); // true 

在以上代码中,我们可以看出这个判断方法还是没解决实际性的问题,比如我们想判断null为null,所以接下来介绍一个精确的判断方法

3.Object.prototype.toString.call()

1.使用 Object 对象的原型方法 toString,使用 call 改变 this 指向

见代码:

const a = Object.prototype.toString;
console.log(a.call(2)); // [object Number]
console.log(a.call(true)); // [object Boolean]
console.log(a.call('str')); // [object String]
console.log(a.call(Symbol())) // [object Symbol]
console.log(a.call([])); // [object Array]
console.log(a.call(function(){})); // [object Function]
console.log(a.call({})); // [object Object]
console.log(a.call(undefined)); // [object Undefined]
console.log(a.call(null)); // [object Null]
console.log(a.call(new Date())) // [object Date]
console.log(a.call(new Error())) // [object Error]
console.log(a.call(new RegExp())) // [object RegExp

见上面输出可知,Object.prototype.toString.call()可以判断出复杂类型中的Array,Function,Date等类型,所以我们知道,当我们需要判断复杂类型时,或者判断简单数据类型中的null为null时我们可以用次方法,判断简单类型中的其他数据类型我们可以用typeof来判断就可以

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
YUI 读码日记之 YAHOO.lang.is*
Mar 22 Javascript
IE JS编程需注意的内存释放问题
Jun 23 Javascript
Jquery 获得服务器控件值的方法小结
May 11 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
JavaScript中for循环的使用详解
Jun 03 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
深入了解JavaScript代码覆盖
Jun 13 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
JS正则表达式验证密码强度
Mar 18 Javascript
vue+canvas实现拼图小游戏
Sep 18 Javascript
JavaScript构造函数原理及实现流程解析
Nov 19 #Javascript
javascript this指向相关问题及改变方法
Nov 19 #Javascript
JavaScript实现alert弹框效果
Nov 19 #Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 #Vue.js
如何使用 vue-cli 创建模板项目
Nov 19 #Vue.js
原生js实现自定义消息提示框
Nov 19 #Javascript
原生js实现点击按钮复制内容到剪切板
Nov 19 #Javascript
You might like
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
PHP中一个控制字符串输出的函数
2006/10/09 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
php输出图像的方法实例分析
2017/02/16 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
python使用marshal模块序列化实例
2014/09/25 Python
关于python的list相关知识(推荐)
2017/08/30 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
俄语专业毕业生推荐信
2013/10/28 职场文书
高职教师岗位职责
2013/12/24 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
小班教师个人总结
2015/02/05 职场文书
护理培训心得体会
2016/01/22 职场文书
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python