喝泡脚水的同时给大伙总结下js数据类型(包括类型判断、类型转换)

287 阅读4分钟

又到一学期一度的考试周了,有一句话说的好,上大学就是温水泡脚然后最后把泡脚水喝掉。但我没泡上脚还得喝洗脚水,一门又一门的考试,难受了哥们。不过在这学期我也收获了许多,对前端的理解更加深入。最近我发现在js中我忽略了很多关于数据类型的细节,我想可能对大伙能有所帮助,也让我们重温一下js数据类型,本文将涵盖类型判断以及类型转换等等知识点。

js中有哪些数据类型

原始数据类型

  • Number - 表示数字,可以是整数或浮点数(不分区),包括 Infinity-Infinity, 和 NaN
  • String - 由一个或多个字符组成的文本,可以用单引号 ' ' 或双引号 " " 包裹。
  • Boolean - 布尔值,只有两个值:true 和 false
  • Undefined - 表示一个未被初始化的变量,只有一个值 undefined
  • Null - 表示一个空对象指针,只有一个值 null
  • BigInt - ES2020引入,用于表示大于 2^53 - 1 的整数。
  • Symbol - ES6引入,用于创建唯一的标识符,常用于对象的属性键。

引用数据类型

  • Array - 特殊类型的对象,用于存储有序的元素集合,元素可以是任意类型。
  • Map - ES6引入,键值对的集合,键可以是任何类型。
  • Set - ES6引入,不重复值得集合。
  • Object - 无序属性的集合,属性可以是任何类型。包括普通对象、数组(Array)、函数(Function)、日期(Date)、正则(RegExp)等。
  • Function - 函数也是一种对象,可以被当作值来传递,拥有属性和方法。

好的,回顾了各种数据类型接下来进入正题。

类型判断

在js中对类型的准确判断可以避免很多错误的发生,可不能轻视。

几种常用判断方法:

typeof

  • 适用范围:几乎适用于所有类型,但不包括null(会被误判为'object')。
  • 原理:通过查看值的二进制表示的前几位来确定类型,函数类型的二进制前三位非零,而大多数引用类型前三位为0。
  • 示例typeof "hello" 返回'string'

instanceof

  • 适用范围:仅限于对象,用于检测构造函数的原型链上是否存在指定类型。
  • 原理:沿着对象的原型链向上遍历,检查是否能找到构造函数的prototype属性。
  • 示例(new Date) instanceof Date 返回true

Object.prototype.toString

  • 特点:这是最全面的类型检测方法,能准确区分所有原始类型及引用类型。
  • 原理:每个对象都有一个内部属性[[Class]],Object.prototype.toString能返回该属性的值,格式为'[object Type]',其中Type是对象类型。
  • 示例Object.prototype.toString.call(123) 返回'[object Number]'

Array.isArray

  • 特定用途:专门用于检测一个值是否为数组。
  • 优点:相比于instanceof,它不依赖于构造函数,因此在跨iframe或不同全局执行环境下也能正确判断。
  • 示例Array.isArray([]) 返回true

类型转换

JavaScript支持两种类型转换方式:显式类型转换和隐式类型转换。

显式类型转换

显式类型转换是开发者主动要求的转换

常用方法

  • Boolean(x):  将任何值转换为布尔值。除零、空字符串、null、undefined、NaN和false外,其他值均转换为true。
  • Number(x):  将任何值转换为数值。例如,字符串"123"转为123,"true"转为1,"false"转为0。
  • String(x):  将任何值转换为字符串。如数字123转为"123",布尔值true转为"true"。

隐式类型转换

当对象参与需要原始值的操作时,JavaScript会自动进行隐式类型转换。

常用方法

  • 转Number:  ToPrimitive(obj, Number)首先尝试调用valueOf(),若返回原始值则使用;否则调用toString()。若两者都不返回原始值,则抛出TypeError。
  • 转String:  ToString(obj)首先尝试调用toString(),若成功则返回;失败后再尝试valueOf()。同样,两者都不成功时抛出错误。
  • 对象转布尔:  对象在隐式转换为布尔值时,不论对象内容如何,一律被视为true。
  • 一元操作符: 一元加操作符+,当作用于非数值时,会尝试将其转换为数值类型。例如,+""(空字符串转为0),+"123"(字符串"123"转为数值123)。
  • 二元运算符+: 如果一方为字符串,另一方无论何种类型,都会被转换为字符串,然后进行拼接。若两边均为数值或可转换为数值的原始值,则执行加法运算。

下表可以帮助你于大部分使用场景下:

image.png

结语

数据类型是一门语言的基础,其转换与判断更是我们需要掌握的一项核心技能,它关乎如何在不同数据类型间灵活转换,以满足特定的运算或逻辑需求,不报出小红句。而现在,我也要回到考试周的复习中了,希望这篇文章可以加深你对数据类型的理解,如果有什么遗漏或者疑问欢迎评论