js中数据类型有哪些:分原始与引用两类

js中数据类型有哪些,JavaScript一共包含7种原始数据类型和1种引用数据类型,判断数据类型优先用typeof,null使用typeof会返回object,这是语言遗留bug,判断null需要直接使用===null,原始类型存储在栈内存,保存的是值本身,引用类型存储在堆内存,栈内存只存放内存地址,你在做变量赋值、参数传递、深浅拷贝开发场景,或是前端笔试答题时都要区分两者,仅使用typeof无法精准识别数组、null,这类场景需要搭配Object.prototype.toString.call()做精确校验。

js原始数据类型

原始类型的值不可修改,一旦创建就无法改变原始值本身,变量重新赋值只是改变变量指向的值,不是修改原有值。

  • Undefined:变量声明但未赋值,默认值为undefined
  • Null:代表空对象指针,人为赋值表示不存在对象
  • Boolean:布尔类型,只有true、false两个取值
  • Number:数字类型,包含整数、浮点数、特殊值NaN、Infinity
  • String:字符串类型,使用单引号、双引号、模板字符串包裹
  • Symbol:符号类型,ES6新增,用于生成唯一不重复的值
  • BigInt:大整数类型,ES2020新增,用来安全存储超过Number安全范围的整数

Number类型能精确表示的整数范围为-2^53+1到2^53-1,超出这个区间直接用Number存储会丢失精度,这种场景你要改用BigInt,数字末尾加n标识BigInt类型,不能直接和Number类型数字混合运算。

Symbol不能用new关键字创建,Symbol生成的值永远唯一,即使传入相同描述文本,两个Symbol实例也不相等,适合用来给对象设置私有属性,避免属性名冲突。

js引用数据类型

引用类型只有Object,数组、函数、正则、日期等都属于Object的子类型,typeof检测数组会返回object,检测函数会返回function。

检测方式可识别类型局限
typeofundefined、boolean、string、number、symbol、bigint、functionnull、数组识别结果为object
Object.prototype.toString.call()全部内置数据类型,包含null、数组、日期、正则自定义对象只能识别为[objectObject]

引用类型变量赋值传递的是内存地址,两个变量指向同一个堆对象,修改其中一个变量的属性,另一个变量读取到的属性值也会跟着变化,开发时处理对象拷贝,浅拷贝只能复制一层属性,嵌套对象依然共享内存地址。

typeof无法区分null和普通对象,是ECMAScript最初实现时留下的历史问题,不会被修复。

做表单校验、接口返回值判断时,推荐优先用Object.prototype.toString.call()获取准确类型字符串,减少类型误判带来的页面报错。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于js中数据类型有哪些的文章欢迎访问:百科