详解JavaScript中的数据类型,以及检测数据类型的方法


Posted in Javascript onSeptember 17, 2020

一.js中的数据类型有哪些?

在js中,基本数据类型有五种,分别是 string、number、boolean、null、undefined,不过在ES6中新增加的了一种基本数据类型Symbol(表示独一无二的值),其作用主要是从根本上防止属性名的冲突而设定的。

除了基本数据类型之外,还有引用数据类型object,也有人称之为复杂数据类型,包含了我们常见的Array、Object、Function等。

所以现在js中的数据类型共有七种。

PS: Symbol数据类型通过Symbol函数生成。也就是说,对象的属性名现在可以有原来的字符串以及现在的Symbol类型俩种了,凡是属性名属于Symbol类型,就是独一无二的,可以保证不会与其他属性名冲突。

Symbol函数还可以接收一个字符串参数,表示对Symbol实例的描述。

let s = Symbol()
console.log(typeof s) // "symbol"

let s1 = Symbol('s1')
let s2 = Symbol('s2')
console.log(s1) // Symbol(s1)
console.log(s2) // Symbol(s2)

注意:Symbol函数的参数只是表示对当前实例的描述,因此相同参数的Symbol的返回值是不相等的。

二.js数据类型检测的方法(一般有一下几种):

1.typeof:typeof一般用于检测基本数据类型,因为它检测引用数据类型都返回Objcet

console.log(typeof 1) // "number"
console.log(typeof 'a') // "string"
console.log(typeof undefined) // "undefined"
console.log(typeof true) // "boolean"
console.log(typeof null) // "object"
console.log(typeof ) // "symbol"
function fun(){ }
console.log(typeof fun) // "function"

注意:typeof检测null也会返回Object,这是js一直以来遗留的BUG。用typeof检测function返回的是'function'。

2.instanceof 这个方法主要是用来准备的检测引用数据类型的(不能用来检测基本数据类型),用来检测构造函数的prototype属性是否出现在对象原型链中的任意位置。

let fun = function(){ }
fun instanceof Function  //true
let obj ={ }
obj instanceof Object //true
let arr = [ ]
arr instanceof Array //true

曾今被面试官问过一道题 1 instanceof 返回的是什么? 当时给因为自身原因说了返回true,现在想想Emmm…

1 instanceof Number //false 
null instanceof Object // false

instanceof运算符直接访问的变量的原始值,不会自动建立包装类。因此不能用来判断基本数据类型。

3.Object.prototype.toString()可以用来准备的检测所有数据类型。

Object.prototype.toString.call([])
// "object Array"
Object.prototype.toString.call(1)
// "object Number"
Object.prototype.toString.call(null)
// "object Null"
Object.prototype.toString.call(undefined)
// "object Undefined"
Object.prototype.toString.call({})
// "object Object"
Object.prototype.toString.call(function add(){})
// "object Function"
....

4.constructor通过检测类型在原型链中的constructor指向来返回布尔值。

let arr =[]
arr.constructor==Array
// true
let fun = function(){}
fun.constructor==Function
//true

注意:null和undefined是没有constructor属性的,可以用其他方法判断。

通过几这次的总结,对于js的数据类型,以及如何检测数据类型有了深刻的认识,下次面试不慌张~

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

Javascript 相关文章推荐
js获取当前select 元素值的代码
Apr 19 Javascript
11款新鲜的jQuery插件[附所有demo下载]
Jan 24 Javascript
JS短路原理的应用示例 精简代码的途径
Dec 13 Javascript
Node.js 制作实时多人游戏框架
Jan 08 Javascript
jQuery实现的进度条效果
Jul 15 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
Ext JS动态加载JavaScript创建窗体的方法
Jun 23 Javascript
JavaScript事件用法浅析
Oct 31 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
package.json文件配置详解
Jun 15 Javascript
JavaScript编码小技巧分享
Sep 17 #Javascript
如何利用node转发请求详解
Sep 17 #Javascript
前端性能优化建议
Sep 17 #Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 #Javascript
JavaScript中如何调用Java方法
Sep 16 #Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 #Javascript
Vue父子组件传值的一些坑
Sep 16 #Javascript
You might like
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
30年同学聚会邀请函
2014/01/25 职场文书
优秀学生事迹材料
2014/02/08 职场文书
金融管理应届生求职信
2014/02/20 职场文书
班班通校本培训方案
2014/03/12 职场文书
致运动员赞词
2015/07/22 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
jquery插件实现搜索历史
2021/04/24 jQuery
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫