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 相关文章推荐
javascript parseInt与Number函数的区别
Jan 21 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
Oct 19 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
May 11 Javascript
Vue仿支付宝支付功能
May 25 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 Javascript
Vue Router 实现动态路由和常见问题及解决方法
Mar 06 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
在Python中编写数据库模块的教程
2015/04/29 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
致跳远、跳高运动员广播稿
2014/01/09 职场文书
写求职信有什么意义
2014/02/17 职场文书
商铺消防安全责任书
2014/07/29 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
保证书格式
2015/01/16 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android