详解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 相关文章推荐
JAVASCRIPT 对象的创建与使用
Mar 09 Javascript
XP折叠菜单&仿QQ2006菜单
Dec 16 Javascript
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
js取值中form.all和不加all的区别介绍
Jan 20 Javascript
浅谈javascript实现八大排序
Apr 27 Javascript
js实现新年倒计时效果
Dec 10 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
Feb 18 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
Jun 06 Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
JavaScript 反射学习技巧
Oct 16 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
网页常用特效代码整理
2006/06/23 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
javascript实现雪花飘落效果
2020/08/19 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
优秀学生获奖感言
2014/02/15 职场文书
护士岗位职责
2014/02/16 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
企业年检委托书范本
2014/10/14 职场文书
副总经理岗位职责
2015/02/02 职场文书
2015年新教师工作总结
2015/04/28 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
Python 数据可视化之Bokeh详解
2021/11/02 Python
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python