JavaScript 判断数据类型的4种方法


Posted in Javascript onSeptember 11, 2020

本文提供四种方法判断js数据类型,这里记录了它们之间的差异,分别是 typeof 运算符、instanceof 运算符、constructor 属性、Object.prototype.toString 方法。

一、使用 typeof 判断数据类型

console.log('测试 Number ->', typeof 1); // number
console.log('测试 Boolean ->', typeof true); // boolean
console.log('测试 String ->', typeof ''); // string
console.log('测试 null ->', typeof null); // object
console.log('测试 undefined ->', typeof undefined); // undefined
console.log('测试 NaN ->', typeof NaN); // number
console.log('测试 function ->', typeof function () { }); // function
console.log('测试 Object ->', typeof {}); // object
console.log('测试 Array ->', typeof []); // object
console.log('测试 Date ->', typeof new Date()); // object
console.log('测试 Error ->', typeof new Error()); // object
console.log('测试 RegExp ->', typeof new RegExp()); // object
console.log('测试 Symbol ->', typeof Symbol()); // symbol
console.log('测试 Map ->', typeof new Map()); // object
console.log('测试 Set ->', typeof new Set()); // object

控制台输出如下:

测试 Number -> number
测试 Boolean -> boolean
测试 String -> string
测试 null -> object
测试 undefined -> undefined
测试 NaN -> number
测试 function -> function
测试 Object -> object
测试 Array -> object
测试 Date -> object
测试 Error -> object
测试 RegExp -> object
测试 Symbol -> symbol
测试 Map -> object
测试 Set -> object

总结:

1、typeof只能判断:

  • String(返回string),
  • Number(返回number),
  • Boolean(返回boolean),
  • undefined(返回undefined),
  • function(返回function),
  • Symbol(返回symbol)

2、对于new构造出来的都是返回object

3、对于Object和Array都是返回object

二、使用 instanceof 判断数据类型

console.log('测试 Number ->', 1 instanceof Number); // false
console.log('测试 Boolean ->', true instanceof Boolean); // false
console.log('测试 String ->', '' instanceof String); // false
// console.log('测试 null ->', null instanceof null); // TypeError: Cannot read property 'constructor' of null
// console.log('测试 undefined ->', undefined instanceof undefined); // TypeError: Cannot read property 'constructor' of undefined
console.log('测试 NaN ->', NaN instanceof Number); // false
console.log('测试 function ->', function () { } instanceof Function); // true
console.log('测试 Object ->', {} instanceof Object); // true
console.log('测试 Array ->', [] instanceof Array); // true
console.log('测试 Date ->', new Date() instanceof Date); // true
console.log('测试 Error ->', new Error() instanceof Error); // true
console.log('测试 RegExp ->', new RegExp() instanceof RegExp); // true
console.log('测试 Symbol ->', Symbol() instanceof Symbol); // false
console.log('测试 Map ->', new Map() instanceof Map); // true
console.log('测试 Set ->', new Set() instanceof Set); // true

console.log('测试 new Number ->', new Number(1) instanceof Number); // true
console.log('测试 new Boolean ->', new Boolean(true) instanceof Boolean); // true
console.log('测试 new String ->', new String('') instanceof String); // true

控制台输出如下:

测试 Number -> false
测试 Boolean -> false
测试 String -> false
测试 NaN -> false
测试 function -> true
测试 Object -> true
测试 Array -> true
测试 Date -> true
测试 Error -> true
测试 RegExp -> true
测试 Symbol -> false
测试 Map -> true
测试 Set -> true
测试 new Number -> true
测试 new Boolean -> true
测试 new String -> true

总结:

1、不能判断 null,undefined

2、基本数据类型 Number,String,Boolean 不能被判断

3、instanceof 用来判断对象是否为某一数据类型的实例,
上例中1,true,''不是实例,所以判断为false

三、使用 constructor 判断数据类型

console.log('测试 Number ->', (1).constructor === Number); // true
console.log('测试 Boolean ->', true.constructor === Boolean); // true
console.log('测试 String ->', ''.constructor === String); // true
// console.log('测试 null ->', null.constructor === null); // TypeError: Cannot read property 'constructor' of null
// console.log('测试 undefined ->', undefined.constructor); // TypeError: Cannot read property 'constructor' of undefined
console.log('测试 NaN ->', NaN.constructor === Number); // true 注意:NaN和infinity一样是Number类型的一个特殊值
console.log('测试 function ->', function () { }.constructor === Function); // true
console.log('测试 Object ->', {}.constructor === Object); // true
console.log('测试 Array ->', [].constructor === Array); // true
console.log('测试 Date ->', new Date().constructor === Date); // true
console.log('测试 Error ->', new Error().constructor === Error); // true
console.log('测试 RegExp ->', new RegExp().constructor === RegExp); // true
console.log('测试 Symbol ->', Symbol().constructor === Symbol); // true
console.log('测试 Map ->', new Map().constructor === Map); // true
console.log('测试 Set ->', new Set().constructor === Set); // true

控制台输出如下:

测试 Number -> true
测试 Boolean -> true
测试 String -> true
测试 NaN -> true
测试 function -> true
测试 Object -> true
测试 Array -> true
测试 Date -> true
测试 Error -> true
测试 RegExp -> true
测试 Symbol -> true
测试 Map -> true
测试 Set -> true

总结:

不能判断null,undefined,其它的都可以

四、使用 Object.prototype.toString 判断数据类型

console.log('测试 Number ->', Object.prototype.toString.call(1)); // [object Number]
console.log('测试 Boolean ->', Object.prototype.toString.call(true)); // [object Boolean]
console.log('测试 String ->', Object.prototype.toString.call('')); // [object String]
console.log('测试 null ->', Object.prototype.toString.call(null)); // [object Null]
console.log('测试 undefined ->', Object.prototype.toString.call(undefined)); // [object Undefined]
console.log('测试 NaN ->', Object.prototype.toString.call(NaN)); // [object Number]
console.log('测试 function ->', Object.prototype.toString.call(function () { })); // [object Function]
console.log('测试 Object ->', Object.prototype.toString.call({})); // [object Object]
console.log('测试 Array ->', Object.prototype.toString.call([])); // [object Array]
console.log('测试 Date ->', Object.prototype.toString.call(new Date())); // [object Date]
console.log('测试 Error ->', Object.prototype.toString.call(new Error())); // [object Error]
console.log('测试 RegExp ->', Object.prototype.toString.call(new RegExp())); // [object RegExp]
console.log('测试 Symbol ->', Object.prototype.toString.call(Symbol())); // [object Symbol]
console.log('测试 Map ->', Object.prototype.toString.call(new Map())); // [object Map]
console.log('测试 Set ->', Object.prototype.toString.call(new Set())); // [object Set]

控制台输出如下:

测试 Number -> [object Number]
测试 Boolean -> [object Boolean]
测试 String -> [object String]
测试 null -> [object Null]
测试 undefined -> [object Undefined]
测试 NaN -> [object Number]
测试 function -> [object Function]
测试 Object -> [object Object]
测试 Array -> [object Array]
测试 Date -> [object Date]
测试 Error -> [object Error]
测试 RegExp -> [object RegExp]
测试 Symbol -> [object Symbol]
测试 Map -> [object Map]
测试 Set -> [object Set]

总结:

目前最完美的判断数据类型的方法

结语:以上为笔者的测试和总结。如有误或不完整地方,欢迎各位老铁指正。

以上就是JavaScript 判断数据类型的4种方法的详细内容,更多关于JavaScript判断数据类型的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
让插入到 innerHTML 中的 script 跑起来的实现代码
Jul 01 Javascript
学习js所必须要知道的一些
Mar 07 Javascript
Javascript 篱式条件判断
Aug 22 Javascript
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
JavaScript DOM 学习第三章 内容表格
Feb 19 Javascript
基于jquery的一个浮动框(扩展性比较好 )
Aug 27 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
Oct 02 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
JS控件bootstrap datepicker使用方法详解
Mar 25 Javascript
JS实现的集合去重,交集,并集,差集功能示例
Mar 13 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
Oct 31 Javascript
jQuery实现日历效果
Sep 11 #jQuery
JS实现密码框效果
Sep 10 #Javascript
JavaScript常用工具函数库汇总
Sep 17 #Javascript
el-form 多层级表单的实现示例
Sep 10 #Javascript
详解React的回调渲染模式
Sep 10 #Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 #Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 #Javascript
You might like
php二维数组转成字符串示例
2014/02/17 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python如何为创建大量实例节省内存
2018/03/20 Python
python放大图片和画方格实现算法
2018/03/30 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
面试后的英文感谢信
2014/02/01 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书