前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9种数据类型,数据类型区别及判断数据类型方法

9种数据类型,数据类型区别及判断数据类型方法

作者头像
子夜星辰
发布2023-10-17 18:03:55
2960
发布2023-10-17 18:03:55
举报
文章被收录于专栏:李白偷偷偷猪

基本数据类型:

String,Number,null,undefined,Boolean  (通常所说的五种原始数据类型),Symbol,BigInt (ES6新增)

引用类型:

object  [基本对象,Set,Map,new RegExp(),new Date(),...],  function   [函数,构造函数,new Error(),...]

以上就是通常所说的9种数据类型

Symbol:

  • 唯一性,用作对象的属性
  • vuex或redux中,派发
  • Symbol() == Symbol() false
  • 深层知识,可以自行查询Symbol上的方法

BigInt:

  • Number数据类型,最大能处理的是2^53,即Number.MAX_SAFE_INTEGER得到9007199254740991,超过这个值,计算就不准确了
  • 而bigint的出现就是来解决超过这个范围的值,9007199254740991n就是BigInt类型的值,如果要加1,就9007199254740991n + 1n可以得到正常计算结果90071992547409913n
  • BigInt(9007199254740991) == 9007199254740991n

两种数据类型的区别:存储位置不同

    原始数据类型直接存储在栈( stack )中的简单数据段,占据空间⼩、⼤⼩固定,属于被频 繁使⽤数据,所以放⼊栈中存储;

    引⽤数据类型存储在堆( heap )中的对象,占据空间⼤、⼤⼩不固定,如果存储在栈中,将会 影响程序运⾏的性能;引⽤数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。

当解释器寻找引⽤值时,会⾸先检索其 在栈中的地址,取得地址后从堆中获得实体。

判断数据类型的常用方法:typeof,instanceof,constructor,Object.prototype.toString.call

typeof:(通常用来判断基本数据类型,null除外)

  • 内部原理是通过判断计算机内部存储的值,而存在计算机中的值均是以二进制的数,当以000开头,便会视为是object类型,而null刚好是000,所以这也是为什么null是object类型
  • 判断引用类型数据不准确,像Date,regex都会视为object

instanceof:

  • 用来判断类(构造函数)的原型是否在实例的原型链上(__proto__属性IE不支持,可使用Object.getprototypeof(obj)方法获取原型)
  • 不准确,因为原型的继承关系,最终都会继承于Object.prototype,并且可以通过Object,create去更改原型
  • 不能判断基本数据类型 (1 instanceof Number false)

constructor:

  • 可以判断基本数据类型,但是一般不用这个方法去这样做
  • 不准确,constructor属性也是可以被更改

Object.prototype.toString.call:(强烈推荐使用此方法,建议封装使用)

  • 标准的检测数据类型的方法,Object.prototype.toString不是转化字符串,是返回当前实例所属类的信息

数据类型转换

Number():

代码语言:javascript
复制
- 将数据转化为number类型 (ps:字符串转数字类型可以使用小技巧, '123' * 1  ,  + '123')
Number('123ab')   NaN
Number(null)    0
Number(undefined)   NaN
parseInt(num, radix):
- 将数据转化为整型,接受第二个参数,表示将num以radix目标进制为基底,转化为10进制数
- 从左到右,当遇到第一个非数字止,返回非数字字符之前的数据
parseInt('abc')   NaN
parseInt('123abc')   123
parseInt('123.3a')   123
parseInt(null)   NaN
parseInt(undefined)   NaN
parseFloat():
- 将数据转化为浮点型
- 从左到右,当遇到第一个非数字(点不算)止,返回非数字字符之前的数据
parseInt('123.3a')   123.3
Boolean():
- 仅以下六种为false
- 0,false,null,undefined,‘’,NaN
String():
- 将数据转化为字符串
String(null)   'null'
String(undefined)   'undefined'
num.toString(radix):
- 与String不同的是,不能转化null,undefined,否则会报错
- 接受一个参数,与parseInt相反,将num以10进制为基底转化为radix进制数
# 特例
undefined > 0 false
undefined < 0 false
undefined == 0 false
null == undefined true
NaN == NaN false
typeof(typeof(a)) string
typeof(typeof(undefined)) string
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档