详解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实现的服务器验证控件的启用和禁用代码
Apr 27 Javascript
jQuery中jqGrid分页实现代码
Nov 04 Javascript
javascript中怎么做对象的类型判断
Nov 11 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
Dec 24 Javascript
jquery日历控件实现方法分享
Mar 07 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
jquery实现二级导航下拉菜单效果
Dec 18 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
angularjs 的数据绑定实现原理
Jul 02 Javascript
详解ES6 中的Object.assign()的用法实例代码
Jan 11 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
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
python ETL工具 pyetl
2020/06/07 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
资料员岗位职责
2013/11/17 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
2014年维稳工作总结
2014/11/18 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
礼貌问候语大全
2015/11/10 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书