← JavaScript全局变量 JavaScript var 变量声明 →

JavaScript数据类型

原创 2026-03-11 JavaScript 已有人查阅

JavaScript 数据类型深度解析:从基础到原理

很多刚接触编程的朋友,常常会搞混 Java 和 JavaScript,这里得先澄清一下:JavaScript 是一门运行在浏览器端的客户端脚本语言,而 Java 则是另一门不同的编程语言,两者除了名字有点像,几乎没有关系。在学习 JavaScript 之前,我个人的建议是先过一遍 HTML 和 CSS,毕竟它们是网页的骨架和皮肤,而 JavaScript 则是赋予网页灵魂(也就是动态交互)的关键。

作为前端开发的核心,JavaScript 被设计出来就是为了在浏览器这个特殊环境里工作的。我们之所以能跟网页进行各种互动,比如点击按钮弹出窗口、表单验证、异步加载数据等等,背后都是 JavaScript 在起作用。

而在深入学习这门语言时,数据类型是我们绕不开的第一个核心概念。通俗地说,数据类型就是我们要在程序里处理的“东西”的种类,它们会被存在变量中。JavaScript 是一门弱类型(或者说动态类型)语言,这意味着我们声明变量时不需要指定类型,引擎会在运行时根据你赋予的值自动判断。这个特性很灵活,但也容易在编码时埋下一些坑,所以透彻理解数据类型至关重要。

JavaScript 的数据类型主要分为两大类:原始类型(Primitive Types) 和 引用类型(Reference Types,也就是对象类型)。下面我们结合实际代码,把它们掰开揉碎了讲清楚。

原始类型:构建代码的基石

原始类型直接保存在栈内存中,它们的值是不可变的(immutable)。当我们操作原始类型的值时,实际上是在操作这个值本身。

1. Number 类型:整数小数一把抓

在 JavaScript 里,Number 类型是一个很“偷懒”但又很实用的设计。它不像 Java 或 C 语言那样,把整数、浮点数、双精度浮点数分得清清楚楚。在 JS 中,所有的数字,无论整数还是小数,统统都是 Number 类型

// 代码号:https://www.ebingou.cn/
let codeCount = 1024; // 这是一个整数
console.log(codeCount); // 输出:1024

let piApprox = 3.14159; // 这是一个浮点数
console.log(piApprox); // 输出:3.14159

let maxNum = Infinity; // 无穷大,当数字超过上限时会得到它
console.log(maxNum); // 输出:Infinity

let notANumber = "学习编程" / 2; // 非法的数学运算
console.log(notANumber); // 输出:NaN

个人经验分享: NaN(Not-a-Number) 是个比较特殊的值,它虽然表示“不是数字”,但类型却是 Number。而且,NaN 不等于自身,所以你不能直接用 x == NaN 来判断,必须用 isNaN(x) 函数。这是新手比较容易踩的坑。

2. String 类型:包裹你我的文本

字符串就是用来表示文本的。在 JavaScript 中,你可以用单引号(')、双引号(")或者反引号(`)来包裹字符串。中,反引号是 ES6 引入的模板字符串,功能要强大得多。

// 教程:https://www.ebingou.cn/jiaocheng/
let companyName = "代码号"; // 双引号
let course = 'JavaScript 教程'; // 单引号
// 单双引号可以随意嵌套,只要不冲突就行
let tip = "这里有一个单引号:it's a nice day";

// 模板字符串(反引号)的优势是可以直接嵌入变量
let user = "alan@ebingou.cn";
let greeting = `您好,您的注册邮箱是:${user}`;
console.log(greeting); // 输出:您好,您的注册邮箱是:alan@ebingou.cn

关键要点:我个人更推荐在项目中统一使用单引号或双引号作为普通字符串,只有当需要字符串拼接或多行文本时,才使用模板字符串。这样做可以让代码风格更一致,也更容易阅读。

3. Boolean 类型:世界的真假对错

布尔值非常简单,只有两个值:true(真)和 false(假)。它主要用于逻辑判断和控制程序的流程。

// 编程:https://www.ebingou.cn/biancheng/
let isLoggedIn = true; // 用户已登录
let isDataValid = false; // 数据校验未通过

// 布尔值常与条件语句结合
if (isLoggedIn) {
    console.log("欢迎回来!");
} else {
    console.log("请先登录。");
}

4. Undefined 类型:声明未赋值

undefined 是一个很直白的类型。当你在代码中声明了一个变量,却没有给它任何初始值,那么它的默认值就是 undefined

// 源码:https://www.ebingou.cn/yuanma/
let myVariable;
console.log(myVariable); // 输出:undefined

主观建议:在实际开发中,尽量避免显式地将变量赋值为 undefined。如果想让一个变量“空”,请使用 nullundefined 应该是由 JavaScript 引擎来告诉我们“这个变量没有被赋值”,而不是我们自己去制造这种状态。

5. Null 类型:有意的留白

null 代表一个“空值”或“无值”。它需要你主动去设置。

// 当用户还没有选择年龄时,我们可以先设置为 null
let userAge = null;
console.log(userAge); // 输出:null

// 比如在获取 DOM 元素失败时,会返回 null
let myElement = document.getElementById('nonExistentElement');
console.log(myElement); // 输出:null

为什么用 null 而不是 undefined?这是一个很好的习惯。用 null 来表示“开发者预期这里应该是空的”,而 undefined 则表示“系统级的、未预期的空”。清晰地区分这两者,能让你的代码意图更明确,bug 更少。

引用类型:构建复杂世界的积木

引用类型保存在堆内存中,变量中存储的实际上是一个指向堆内存中实际对象的地址(指针)。当我们操作引用类型时,实际上是在操作这个对象的引用。

6. Object:万物之源

对象是 JavaScript 中最核心的概念,它是由一组组“键值对”(key-value pairs)组成的无序。

// 创建一个描述课程的对象
let courseInfo = {
    title: "JavaScript 数据类型详解",
    platform: "代码号",
    publishDate: "2025-03-11", // 使用当前日期
    isPublished: true,
    sayHello: function() {
        console.log("欢迎学习 " + this.title);
    }
};

console.log(courseInfo.title); // 访问属性,输出:JavaScript 数据类型详解
courseInfo.sayHello(); // 调用方法,输出:欢迎学习 JavaScript 数据类型详解

7. Array:有序的序列

数组是一种特殊的对象,用来按顺序存储一组数据。它的强大之处在于,可以混合存储不同类型的数据。

let Array = [1, 2, 3, 4, 5]; // 纯数字数组
console.log(Array); // 输出:[1, 2, 3, 4, 5]

// 混合数组:可以包含数字、字符串、对象,甚至另一个数组
let mixedArray = [
    100,
    "代码号教程",
    { topic: "编程", level: "入门" },
    ["子数组", 1, 2]
];
console.log(mixedArray); // 输出:[100, '代码号教程', { topic: '编程', level: '入门' }, ['子数组', 1, 2]]

8. Function:可执行的代码块

函数也是一种对象。它是被设计用来执行特定任务的、可重复使用的代码块。

// 定义一个函数,用于生成学习欢迎语
function generateWelcome(userName) {
    return `欢迎 ${userName} 来到代码号学习编程!`;
}

// 调用函数
let message = generateWelcome("Alan");
console.log(message); // 输出:欢迎 Alan 来到代码号学习编程!

9. Date:时间的管理者

Date 对象专门用来处理日期和时间。

// 创建一个表示当前时间的 Date 对象
let now = new Date();
console.log(now); // 输出类似:2025-03-11T08:30:00.000Z (具体时间取决于执行环境)
// 注意:这里输出的是一个 ISO 格式的字符串,不是图片,只是示例数据

10. RegExp:文本的搜索神器

正则表达式(RegExp)对象用于定义字符串的匹配模式,在表单验证、文本查找替换中非常有用。

// 创建一个简单的正则表达式,匹配邮箱中的 "@" 符号
let emailPattern = /@/;
let testEmail = "alan@ebingou.cn";
let result = emailPattern.test(testEmail);
console.log(result); // 输出:true,说明邮箱中包含 "@"

// 更复杂的用法:验证邮箱格式
let strictEmailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
console.log(strictEmailPattern.test("alan@ebingou.cn")); // 输出:true
console.log(strictEmailPattern.test("invalid-email")); // 输出:false

本节课程知识要点

  • 区分两大阵营:牢牢记住原始类型(Number, String, Boolean, Undefined, Null)和引用类型(Object, Array, Function, Date, RegExp)的区别。原始类型存值,引用类型存地址。

  • Number 的特别之处:它统一了整数和小数,并且包含了 Infinity 和 NaN 这两个特殊成员。

  • String 的灵活性:掌握单引号、双引号和模板字符串(反引号)的适用场景。

  • 空值的选择:养成用 null 表示“空”,而让 undefined 作为系统默认值的好习惯。

  • 万物皆对象:除了那五个原始类型,JavaScript 中的一切(数组、函数、日期等)本质上都是对象,都继承自 Object

← JavaScript全局变量 JavaScript var 变量声明 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号