详解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 去字符串空格终极版(支持utf8)
Nov 14 Javascript
script的async属性以非阻塞的模式加载脚本
Jan 15 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
jQuery中extend函数详解
Jul 13 Javascript
谈谈javascript中使用连等赋值操作带来的问题
Nov 26 Javascript
JavaScript事件 "事件对象"的注意要点
Jan 14 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
vue axios整合使用全攻略
May 24 Javascript
layui 对table中的数据进行转义的实例
Sep 12 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
Jul 20 Javascript
vue+spring boot实现校验码功能
May 27 Vue.js
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创建基本身份认证站点的方法详解
2013/06/08 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
javascript 闭包
2011/09/15 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python基础语法(Python基础知识点)
2016/02/28 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
python和ruby,我选谁?
2017/09/13 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
python实现windows下文件备份脚本
2018/05/27 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
人力资源部经理的岗位职责
2014/03/04 职场文书
预备党员承诺书
2014/03/25 职场文书
民主生活会发言材料
2014/10/20 职场文书
工作时间调整通知
2015/04/24 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
公司年会晚会开幕词
2019/04/02 职场文书