Skip to content

JavaScript 数据类型

约 2261 字大约 8 分钟

JavaScript

2025-01-06

JavaScript 是一种动态类型语言,这意味着变量的类型在运行时可以改变。JavaScript 提供了多种数据类型,可分为 基本类型(也称为原始类型)和 引用类型(也称为对象类型)。

JavaScript 的数据类型概览

JavaScript 的数据类型可以分为两大类:

1. 基本数据类型(Primitive Types):

  • String(字符串)
  • Number(数字)
  • BigInt(大整数)
  • Boolean(布尔值)
  • Undefined(未定义)
  • Null(空值)
  • Symbol(符号)

2. 引用数据类型(Reference Types):

  • Object(对象,包括数组、函数、日期等)

这些数据类型可以通过 typeof 操作符进行检测(除 null)。

基本数据类型

1. String 类型

字符串表示一组字符的序列,用于表示文本数据。

let str1 = "双引号字符串";
let str2 = '单引号字符串';
let str3 = `模板字符串`;
  • 使用单引号 '、双引号 " 或模板字符串(反引号 ``)表示。
  • 模板字符串支持内嵌变量和表达式,语法为 ${变量}。
let name = "Simin";
let age = 25;

// 普通字符串
let greeting = "Hello, " + name + "!";

// 模板字符串
let greetingTemplate = `Hello, ${name}! You are ${age} years old.`;

console.log(greeting); // 输出:Hello, John!
console.log(greetingTemplate); // 输出:Hello, John! You are 25 years old.

常用方法:

  • str.length: 获取字符串长度。
  • str.toUpperCase(): 转为大写。
  • str.toLowerCase(): 转为小写。
  • str.includes(substring): 判断是否包含子字符串。
  • str.slice(start, end): 提取部分字符串。
let text = "JavaScript";
console.log(text.length); // 输出:10
console.log(text.toUpperCase()); // 输出:JAVASCRIPT
console.log(text.includes("Script")); // 输出:true
console.log(text.slice(0, 4)); // 输出:Java

2. Number 类型

数字类型用于表示整数和浮点数。

  • JavaScript 中的数字使用 64 位浮点格式存储(IEEE 754 标准)。
  • NaN 表示“不是数字”(Not a Number)。
  • Infinity-Infinity表示无穷大。
let num1 = 42; // 整数
let num2 = 3.14; // 浮点数
let num3 = Infinity; // 正无穷
let num4 = NaN; // 非数字

console.log(num1 + num2); // 输出:45.14
console.log(0 / 0); // 输出:NaN
console.log(1 / 0); // 输出:Infinity

常用方法:

  • Math.round(): 四舍五入。
  • Math.floor(): 向下取整。
  • Math.ceil(): 向上取整。
  • Math.random(): 生成随机数(0 到 1)。
console.log(Math.round(4.6)); // 输出:5
console.log(Math.floor(4.9)); // 输出:4
console.log(Math.ceil(4.1)); // 输出:5
console.log(Math.random()); // 输出:随机数

3. BigInt 类型

大整数类型用于表示任意精度的整数。 通过在数字后添加 n 表示 BigInt,或使用 BigInt() 函数创建。

let bigInt1 = 1234567890123456789012345678901234567890n;
let bigInt2 = BigInt("1234567890123456789012345678901234567890");

console.log(bigInt1 + 10n); // 输出:1234567890123456789012345678901234567800n

注意

BigInt 和普通数字 Number 不能直接混合运算。

4. Boolean 类型

布尔值只有两个值:truefalse

用途:

  • 用于逻辑控制流(如条件判断)。
  • 表示真假或开关状态。

let isAvailable = true;
let isComplete = false;

if (isAvailable) {
    console.log("资源可用");
} else {
    console.log("资源不可用");
}

5. Undefined 类型

未定义表示一个变量已经声明但未初始化

let x;
console.log(x); // 输出:undefined

6. Null 类型

空值表示一个变量被显式赋值为“没有值”。

let y = null;
console.log(y); // 输出:null

注意

typeof null 的值是 "object",这是一个已知的历史遗留问题。

7. Symbol 类型

符号是唯一且不可变的标识符,通常用于对象的属性名。

创建方式:

let sym1 = Symbol();
let sym2 = Symbol("描述");
let uniqueKey = Symbol("key");
let obj = {
    [uniqueKey]: "value"
};
console.log(obj[uniqueKey]); // 输出:value

引用数据类型

引用数据类型存储的是对象的引用地址,而不是实际值。对引用数据类型的操作会直接影响存储在内存中的数据。

引用数据类型的特点

  1. 动态大小:引用类型可以动态扩展大小,适合存储大量复杂的数据。
  2. 共享引用:多个变量可以引用同一个对象,对其修改会影响所有引用它的变量。
  3. 存储位置:引用类型的数据存储在堆内存中,变量保存的是堆内存的地址。

1. Object 类型

对象 是 JavaScript 的核心类型,用于表示键值对集合。所有引用类型(如数组、函数)都继承自 Object

创建对象的方式

  1. 使用对象字面量:
const obj = { key: "value" };
  1. 使用 Object 构造函数:
const obj = new Object();
obj.key = "value";

常用方法

  1. Object.keys():获取对象的所有键。
const person = { name: "Simin", age: 24 };
console.log(Object.keys(person)); // 输出:["name", "age"]
  1. Object.values():获取对象的所有值。
console.log(Object.values(person)); // 输出:["Simin", 24]
  1. Object.entries():获取键值对数组。
console.log(Object.entries(person)); // 输出:[["name", "Simin"], ["age", 24]]
  1. Object.assign():合并对象。
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = Object.assign({}, obj1, obj2);
console.log(merged); // 输出:{ a: 1, b: 2 }
  1. Object.freeze()Object.seal()
  • freeze:冻结对象,禁止修改。
  • seal:允许修改现有属性,但禁止添加新属性。
const frozen = Object.freeze({ a: 1 });
frozen.a = 2; // 无效操作

2. Array 类型

数组是对象的特殊形式,用于存储有序的数据集合。

创建方式

const arr = [1, 2, 3];
const arr2 = new Array(1, 2, 3);

常用方法

  1. push()pop():添加或移除末尾元素。
const nums = [1, 2, 3];
nums.push(4); // 添加 4,数组变为 [1, 2, 3, 4]
nums.pop(); // 移除末尾元素,数组变为 [1, 2, 3]
  1. shift()unshift():添加或移除开头元素。
nums.unshift(0); // 添加 0,数组变为 [0, 1, 2, 3]
nums.shift(); // 移除开头元素,数组变为 [1, 2, 3]
  1. map():返回新数组,应用回调函数到每个元素。
const doubled = nums.map(x => x * 2);
console.log(doubled); // 输出:[2, 4, 6]
  1. filter():返回新数组,包含符合条件的元素。
const even = nums.filter(x => x % 2 === 0);
console.log(even); // 输出:[2]
  1. reduce():对数组中的元素累计运算。
const sum = nums.reduce((acc, val) => acc + val, 0);
console.log(sum); // 输出:6

3. Function 类型

函数是 JavaScript 的一等公民。它既可以作为值传递,又可以动态创建。

创建方式

  1. 函数声明:
function add(a, b) {
    return a + b;
}
  1. 函数表达式:
const multiply = function(a, b) {
    return a * b;
};
  1. 箭头函数:
const subtract = (a, b) => a - b;

函数特性

  • 可以嵌套函数。
  • 支持闭包(Closure)。
  • 支持默认参数:
function greet(name = "Simin") {
    console.log(`Hello, ${name}`);
}
greet(); // 输出:Hello, Simin

4. Date 类型

Date 对象用于处理时间和日期。Date虽然是个对象,但是他又不完全是Object类型,Date 类型实际上是 Object 的子类型。在 JavaScript 中,Date 对象是基于 Object 构造的,因此它继承了 Object 的一些基本特性,比如可以使用 Object 的方法。

Date 类型是 JavaScript 中专门用于处理日期和时间的对象类型,它继承了 Object 的一些基本特性,但具有自己独特的属性和方法,用于表示和操作日期时间。而一般对象则是 JavaScript 中用于存储和组织数据的基本数据结构,具有高度的灵活性和可扩展性,可以表示各种复杂的数据和逻辑。两者在用途、内部结构和操作方法上都有明显的区别,但在本质上都是对象,可以相互配合使用,满足不同的编程需求。

无论是 Date 对象还是一般对象,它们都是属性的集合。Date 对象有一组预定义的属性和方法,用于处理日期和时间,而一般对象的属性和方法可以根据需要自定义。

  • 用途和设计目的:

Date 对象:专门用于表示日期和时间。它提供了一系列的方法来获取、设置和操作日期和时间,如 getFullYear()setHours()getTime() 等。Date 对象内部存储的是一个时间戳(自 1970 年 1 月 1 日以来的毫秒数),并提供了多种方法来格式化和计算日期时间。 一般对象:用于存储和组织数据,可以表示各种复杂的数据结构。对象的属性和方法可以根据具体的应用场景来定义,非常灵活。对象通常用于封装数据和行为,实现各种功能和逻辑。

  • 内部结构和数据存储:

Date 对象:内部存储的是一个时间戳(一个长整型数值),表示从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间经过的毫秒数。Date 对象的方法都是基于这个时间戳进行计算和操作的。 一般对象:内部存储的是属性和方法的集合。属性可以是各种类型的数据,如字符串、数字、布尔值、数组、函数等。对象的数据结构可以根据需要进行嵌套和组合,形成复杂的数据模型。

const now = new Date(); // 当前时间
const specificDate = new Date("2023-01-01"); // 指定时间

常用方法

  1. 获取时间部分:
console.log(now.getFullYear()); // 获取年份
console.log(now.getMonth()); // 获取月份(从 0 开始)
console.log(now.getDate()); // 获取日期
  1. 设置时间部分:
now.setFullYear(2025);
console.log(now); // 输出:修改后的日期

参考资料

MDN《数据结构与类型》

变更历史

最后更新于: 查看全部变更历史
  • update

    于 2025/1/15

命运眷顾勇者