详解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 相关文章推荐
jQuery数据缓存功能的实现思路及简单模拟
May 27 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
Nov 21 Javascript
Jquery实现简单的轮播效果(代码管用)
Mar 14 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
JS排序之冒泡排序详解
Apr 08 Javascript
在bootstrap中实现轮播图实例代码
Jun 11 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
微信小程序数字滚动插件使用详解
Feb 02 Javascript
vue项目国际化vue-i18n的安装使用教程
Mar 14 Javascript
webstorm中vue语法的支持详解
May 09 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
python简单实现获取当前时间
2016/08/27 Python
python实现学生管理系统
2018/01/11 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python ChainMap的使用和说明详解
2019/06/11 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
python3获取url文件大小示例代码
2019/09/18 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Python matplotlib可视化实例解析
2020/06/01 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
公司人力资源的自我评价
2014/01/02 职场文书
妇产医师自荐信
2014/01/29 职场文书
将相和教学反思
2014/02/04 职场文书
教室标语大全
2014/06/21 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
golang中的空slice案例
2021/04/27 Golang