面试官:你再说一遍?JavaScript数据类型就八种?

314 阅读9分钟

前言

面试官:你再说一遍?JavaScript数据类型就八种?面试官:你再说一遍?JavaScript数据类型就八种?
我:不说了,简历还我我:不说了,简历还我

本文将带领大家系统地探讨JavaScript中的数据类型,包括基本数据类型和引用数据类型的特征

让我们一起开启JavaScript数据类型的奥秘之旅吧!

基本类型?引用类型?

  • 基本类型

基本数据类型是JavaScript中最基础的数据类型

  1. 值类型(Value Type) :

    • 基本数据类型的值直接存储在变量中,是不可变的。
    • 当你对一个基本类型变量赋值时,实际上是创建了一个新的值。
  2. 存储在栈(Stack)中:

    • 基本类型的值被直接存储在内存的栈空间中。

    • 栈空间的特点是访问速度快,但容量有限。

  • 引用类型
  1. 存储位置:

    • 基本数据类型的值直接存储在栈(Stack)中。
    • 引用类型的值存储在堆(Heap)中,变量中存储的是指向堆中对象的引用。
  2. 比较方式:

    • 基本数据类型比较的是值的比较。
    • 引用类型比较的是引用的比较,即比较的是指向堆中同一个对象的引用。
  3. 可变性:

    • 基本数据类型的值是不可变的。
    • 引用类型的值是可变的,可以修改对象内部的属性。

七大基本类型

JavaScript 中的 7 种基本数据类型:

  1. Number: 表示数值,包括整数和浮点数。
  2. String: 表示文本数据。
  3. Boolean: 表示逻辑值 true 或 false
  4. Undefined: 表示一个未定义的值。
  5. Null: 表示一个空或无效的值。
  6. Symbol: 表示一个唯一且不可变的标识符。
  7. BigInt: 表示任意长度的整数。

这其中Symbol和BigInt是ES6中新增了两种基本数据类型

Number

Number就是数字类型的,但是Number是有安全范围的

在 JavaScript 中,Number 数据类型采用 IEEE 754 标准,它可以表示的数值范围是 -2^53 到 2^53 之间的整数,也就是 -9007199254740991 到 9007199254740991。

这个范围被称为 JavaScript 的"安全整数范围"。在这个范围内,JavaScript 可以精确地表示整数,并进行各种算术运算而不会丢失精度。

一旦超出了这个范围,JavaScript 就无法精确地表示整数了。对于超出安全范围的整数值,JavaScript 会使用浮点数来表示,这样会导致一些精度问题。

String

String 类型用于表示文本数据。它可以包含字母、数字、标点符号和其他字符。在 JavaScript 中,字符串可以使用单引号 '、双引号 " 或反引号 ` 来表示

  1. 字符串长度:

    • 可以使用 length 属性获取字符串的长度。例如: "hello".length 返回 5
  2. 字符访问:

    • 可以使用索引访问字符串中的单个字符。例如: "hello"[0] 返回 "h"
    • 也可以使用 charAt() 方法访问字符。例如: "hello".charAt(0) 返回 "h"
  3. 字符串不可变:

    • 字符串一旦创建,就无法被修改。任何字符串操作都会返回一个新的字符串。
  4. 字符串方法:

    • JavaScript 提供了许多方法来操作字符串,如 toUpperCase()toLowerCase()concat()slice() 等。
    • 这些方法都不会修改原始字符串,而是返回一个新的字符串。
  5. 特殊字符:

    • 字符串可以包含特殊字符,如换行符 \n、制表符 \t 等。
    • 可以使用转义字符 `` 来表示特殊字符。
  6. 模板字符串:

    • ES6 引入了模板字符串,使用反引号 ` 表示。
    • 模板字符串支持插值表达式 ${expression},可以方便地在字符串中嵌入变量或表达式的值。

Boolean

oolean 类型是最简单的数据类型之一,它只有两个可能的值:

  1. true: 表示肯定或真值。

  2. false: 表示否定或假值。

  3. 转换为布尔值:

    • JavaScript 中,除了 false0''nullundefined 和 NaN 以外,其他所有值都会被转换为 true
    • 可以使用 Boolean() 函数来显式地将值转换为布尔值。
  4. 逻�ical运算符:

    • JavaScript 提供了一些逻辑运算符,如 &&(AND)、||(OR) 和 !(NOT),可以用于操作布尔值。
    • 这些运算符遵循布尔代数的规则,可以用于条件判断和控制流程。
  5. 条件语句:

    • 布尔值在条件语句(如 if-elseswitch 等)中非常有用,可以用于判断执行的逻辑分支。
  6. 布尔运算:

    • 除了逻辑运算符,JavaScript 也支持比较运算符(如 <><=>======)的结果为布尔值。
  7. 短路求值:

    • 在使用 && 和 || 运算符时,JavaScript 会采用短路求值的机制,即一旦结果可以确定,就不会继续执行剩余的操作。

Undefined

undefined 是 JavaScript 中一个非常特殊的值,它表示一个变量未被赋值,或者对象属性不存在。

  1. 变量声明但未赋值:

    • 当一个变量被声明但未被赋值时,它的值就是 undefined。例如: let x; 中 x 的值就是 undefined
  2. 对象属性不存在:

    • 当访问一个对象的不存在的属性时,该属性的值就是 undefined。例如: const obj = {}; obj.prop; // 返回 undefined
  3. 函数返回值:

    • 如果一个函数没有 return 语句,或者 return 语句没有返回任何值,那么函数的返回值就是 undefined
  4. null 与 undefined 的区别:

    • null 表示一个空值或无效值,而 undefined 表示一个未定义的值。
    • null 是一个有效的 JavaScript 值,而 undefined 是一个 JavaScript 类型。
  5. 判断 undefined:

    • 可以使用严格相等运算符 === 来检查一个值是否为 undefined。例如: x === undefined
    • 也可以使用 typeof 运算符来检查一个值的类型是否为 undefined。例如: typeof x === 'undefined'
  6. 默认参数:

    • ES6 引入了默认参数的概念,可以在函数定义时为参数指定默认值,以防止参数为 undefined

null

null 是 JavaScript 中表示"空"或"无"的一个特殊值。它是一个有效的 JavaScript 值,与 undefined 有着明显的区别。

以下是一些关于 null 类型的重要特点:

  1. 表示空值:

    • null 通常用于表示一个变量没有值,或者一个对象属性没有值。
  2. 类型判断:

    • 使用 typeof 运算符检查 null 的类型会返回 "object"。这是 JavaScript 中一个众所周知的错误。
    • 可以使用严格相等运算符 === 来准确地判断一个值是否为 null。例如: x === null
  3. 逻辑运算:

    • 在逻辑运算中,null 被视为 false
    • 在使用 == 运算符进行比较时,null 与 undefined 是相等的。
    • 但是使用===,运算符时是不相等的
  4. 数值运算:

    • 当 null 参与数值运算时,它会被转换为 0。例如: null + 5 会得到 5
  5. 默认值:

    • 在函数参数中,如果不传入任何值,参数的默认值通常被设置为 null,表示该参数没有值。

Symbol

Symbol 是 ES6 (ECMAScript 2015) 引入的一种新的原始数据类型。它用于创建唯一的、不可变的标识符。

  1. 唯一性:

    • 每个通过 Symbol() 函数创建的 Symbol 值都是唯一的,即使它们的描述相同。
    • 这使得 Symbol 非常适合用作对象属性的键,可以避免属性名称的冲突。
  2. 可选描述:

    • 创建 Symbol 时可以提供一个可选的字符串描述,但这个描述只作为调试时的辅助信息,并不是 Symbol 值的一部分。
  3. 全局 Symbol 注册表:

    • 通过 Symbol.for() 方法,可以在全局 Symbol 注册表中创建或获取 Symbol
    • 这样可以确保多个代码片段使用同一个 Symbol 值。
  4. 隐藏属性:

    • 由于 Symbol 值是唯一的,因此可以用作对象的属性名,以创建隐藏的、不可枚举的属性。
  5. 类型检查:

    • 使用 typeof 运算符检查一个值的类型时,Symbol 类型会返回 "symbol"
  6. 内置 Symbol:

    • JavaScript 预定义了一些特殊用途的 Symbol,如 Symbol.iteratorSymbol.hasInstance 等,用于实现语言内部的行为。

BigInt

BigInt 是 ES2020 引入的一种新的数字类型,它可以表示任意大小的整数,解决了 JavaScript 中 Number 类型只能安全表示 53 位整数的限制。

  1. 无限精度整数:

    • BigInt 可以表示任意大小的整数,包括非常大的数字和非常小的数字。
    • 它不受 Number 类型 53 位整数限制的影响。
  2. 创建 BigInt:

    • 可以在整数字面量后添加 n 后缀来创建 BigInt 值,如 123n
    • 也可以使用 BigInt() 函数将其他数值转换为 BigInt
  3. 运算和比较:

    • BigInt 可以参与加减乘除等数学运算,结果也是 BigInt 类型。
    • BigInt 可以与其他 BigInt 进行比较,但不能与 Number 类型直接比较。
  4. 类型检查:

    • 使用 typeof 运算符检查 BigInt 类型会返回 "bigint"
  5. 局限性:

    • BigInt 不能用于位运算、Math 对象的方法,也不能与 Number 类型混用。
    • JSON 序列化时 BigInt 会被转换为字符串。

引用类型

引用类型是一种复合数据类型,它们存储的是对内存中对象的引用,而不是直接存储值

主要的引用类型包括:

  1. Object 类型:

    • Object 是 JavaScript 中最基本的引用类型,用于创建复杂的数据结构。
    • 对象可以包含属性和方法,属性值可以是任意数据类型。
  2. Array 类型:

    • Array 是一种特殊的 Object 类型,用于存储有序的数据集合。
    • 数组中的元素可以是任意数据类型,包括其他对象和数组。
  3. Function 类型:

    • Function 也是一种特殊的 Object 类型,用于封装可重用的代码块。
    • 函数是 JavaScript 中的一等公民,可以作为参数传递、作为返回值、存储在变量中等。
  4. Date 类型:

    • Date 类型用于表示日期和时间信息。
    • 可以使用 new Date() 创建 Date 对象,并提供各种方法操作日期和时间。
  5. RegExp 类型:

    • RegExp 类型用于表示正则表达式,用于文本匹配和处理。
    • 可以使用字面量语法 /pattern/flags 或 new RegExp() 创建正则表达式对象。

总结

本文将带领大家系统地探讨JavaScript中的数据类型,包括基本数据类型和引用数据类型的特征

希望对你有所帮助!!!!!!