内置对象概述(Built-in Objects Overview)
JavaScript 内置对象是语言本身提供的标准对象,就像工具箱里的基础工具,开箱即用。
1. 一句话概括主题
JavaScript 内置对象是 ECMAScript 规范定义的标准对象,无需导入即可使用,是所有 JavaScript 运行环境(浏览器、Node.js 等)都提供的核心工具。
2. 它是什么
想象一下,JavaScript 内置对象就像你家里的工具箱。当你需要:
- 切东西 → 用
String(字符串工具) - 数数 → 用
Array(数组工具) - 算账 → 用
Math(数学工具) - 看时间 → 用
Date(日期工具) - 找东西 → 用
RegExp(正则表达式工具)
这些工具都是”出厂自带”的,不需要你去商店买(不需要导入),直接就能用。
举例:
// 就像你直接拿起家里的锤子,不需要去买
const name = "张三"; // String 内置对象
const numbers = [1, 2, 3]; // Array 内置对象
const now = new Date(); // Date 内置对象3. 能解决什么问题 + 为什么重要
解决的问题
- 统一标准:所有 JavaScript 环境都有这些对象,代码可移植性强
- 无需安装:不需要 npm 安装,直接使用
- 性能优化:浏览器和引擎对这些对象做了深度优化
- 类型安全:提供标准 API,减少错误
为什么重要
- 日常开发必备:几乎每个 JavaScript 程序都会用到内置对象
- 学习基础:理解内置对象是掌握 JavaScript 的基础
- 面试必考:前端面试经常考察内置对象的用法
- 性能关键:正确使用内置对象能提升代码性能
4. 核心知识点拆解
4.1 内置对象的分类
JavaScript 内置对象可以分为以下几类:
值类型包装对象(Primitive Wrapper Objects)
这些对象用于包装原始值,提供方法:
-
String:字符串操作
- 相关:String
- 示例:
"hello".toUpperCase()→"HELLO"
-
Number:数字操作
- 示例:
(123).toFixed(2)→"123.00"
- 示例:
-
Boolean:布尔值操作
- 示例:
new Boolean(true)
- 示例:
集合对象(Collection Objects)
用于存储和操作数据集合:
-
Array:数组操作
- 相关:Array
- 示例:
[1, 2, 3].map(x => x * 2)
-
Set:唯一值集合
- 相关:Set和Map
- 示例:
new Set([1, 2, 2, 3])→Set {1, 2, 3}
-
Map:键值对集合
- 相关:Set和Map
- 示例:
new Map([['name', '张三']])
日期和时间对象
- Date:日期和时间处理
- 相关:Date
- 示例:
new Date()→ 当前时间
数学对象
- Math:数学运算
- 相关:Math
- 示例:
Math.max(1, 2, 3)→3
正则表达式对象
- RegExp:模式匹配
- 相关:RegExp
- 示例:
/hello/.test("hello world")→true
工具对象
-
JSON:JSON 序列化和反序列化
- 相关:JSON
- 示例:
JSON.stringify({name: "张三"})→'{"name":"张三"}'
-
Object:对象操作
- 相关:其他内置对象
- 示例:
Object.keys({a: 1, b: 2})→['a', 'b']
-
Function:函数操作
- 相关:其他内置对象
- 示例:
Function.prototype.call()
-
Error:错误处理
- 相关:其他内置对象
- 示例:
new Error("错误信息")
4.2 内置对象 vs 全局对象
内置对象(Built-in Objects):
- 由 ECMAScript 规范定义
- 在所有 JavaScript 环境中都可用
- 示例:
Array、String、Date
全局对象(Global Objects):
- 在全局作用域中可用
- 浏览器中是
window,Node.js 中是global - 内置对象通常也是全局对象
示例:
// 内置对象也是全局对象
console.log(window.Array === Array); // true(浏览器环境)
console.log(global.Array === Array); // true(Node.js 环境)4.3 常见误解说明与纠正
误解 1:内置对象需要导入
❌ 错误理解:
import { Array } from 'javascript'; // 错误!✅ 正确理解:
// 内置对象直接可用,无需导入
const arr = new Array(1, 2, 3);
const arr2 = [1, 2, 3]; // 字面量语法更常用误解 2:所有对象都是内置对象
❌ 错误理解:File、Blob 是内置对象
✅ 正确理解:
File、Blob是 Web API(浏览器 API),不是 ECMAScript 内置对象- 内置对象在所有环境中都可用,Web API 只在浏览器中可用
误解 3:包装对象和原始值一样
❌ 错误理解:
const str1 = "hello";
const str2 = new String("hello");
str1 === str2; // false,因为类型不同✅ 正确理解:
- 原始值
"hello"是字符串类型 new String("hello")是对象类型- 虽然可以调用方法(如
"hello".toUpperCase()),但这是 JavaScript 的自动包装机制
5. 示例代码(可运行 + 逐行注释)
// ===== 示例:内置对象的基本使用 =====
// 1. String 内置对象 - 字符串操作
const name = "JavaScript";
console.log(name.toUpperCase()); // "JAVASCRIPT" - 转大写
console.log(name.length); // 10 - 字符串长度
// 2. Array 内置对象 - 数组操作
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2); // [2, 4, 6, 8, 10] - 每个元素乘以2
const sum = numbers.reduce((a, b) => a + b, 0); // 15 - 求和
// 3. Date 内置对象 - 日期时间
const now = new Date(); // 创建当前时间的 Date 对象
console.log(now.getFullYear()); // 2024 - 获取年份
console.log(now.getMonth() + 1); // 12 - 获取月份(0-11,所以+1)
// 4. Math 内置对象 - 数学运算
console.log(Math.max(1, 5, 3)); // 5 - 最大值
console.log(Math.round(3.7)); // 4 - 四舍五入
console.log(Math.random()); // 0-1 之间的随机数
// 5. RegExp 内置对象 - 正则表达式
const pattern = /hello/i; // 创建正则表达式,i 表示忽略大小写
console.log(pattern.test("Hello World")); // true - 匹配成功
// 6. JSON 内置对象 - JSON 处理
const obj = { name: "张三", age: 25 };
const jsonStr = JSON.stringify(obj); // '{"name":"张三","age":25}' - 对象转字符串
const parsed = JSON.parse(jsonStr); // {name: "张三", age: 25} - 字符串转对象
// 7. Set 内置对象 - 唯一值集合
const uniqueNumbers = new Set([1, 2, 2, 3, 3, 4]);
console.log([...uniqueNumbers]); // [1, 2, 3, 4] - 去重
// 8. Map 内置对象 - 键值对集合
const userMap = new Map();
userMap.set("name", "张三");
userMap.set("age", 25);
console.log(userMap.get("name")); // "张三" - 获取值6. 常见错误与踩坑
错误 1:混淆原始值和包装对象
错误代码:
const str1 = "hello";
const str2 = new String("hello");
console.log(str1 === str2); // false
console.log(typeof str1); // "string"
console.log(typeof str2); // "object"为什么错:
str1是原始字符串类型str2是 String 对象类型- 类型不同,所以
===返回false
正确方式:
// 使用原始值,JavaScript 会自动包装
const str = "hello";
console.log(str.toUpperCase()); // "HELLO" - 自动包装为 String 对象调用方法
// 或者显式转换
const str1 = "hello";
const str2 = new String("hello");
console.log(str1 === str2.toString()); // true - 转换为字符串再比较错误 2:在非浏览器环境使用 Web API
错误代码(在 Node.js 中):
// File 和 Blob 是 Web API,不是内置对象
const file = new File(["content"], "test.txt"); // ❌ Node.js 中不存在为什么错:
File和Blob是浏览器 API,不是 ECMAScript 内置对象- Node.js 环境中不存在这些对象
正确方式:
// 在 Node.js 中使用 fs 模块
const fs = require('fs');
fs.writeFileSync('test.txt', 'content');
// 在浏览器中使用 File API
const file = new File(["content"], "test.txt"); // ✅ 浏览器环境错误 3:误用 Array 构造函数
错误代码:
const arr = new Array(5); // 创建了长度为 5 的稀疏数组
console.log(arr); // [empty × 5] - 不是 [5]
console.log(arr[0]); // undefined为什么错:
new Array(5)创建的是长度为 5 的空数组,不是包含数字 5 的数组- 这是常见的误解
正确方式:
// 方式 1:使用字面量(推荐)
const arr1 = [5]; // [5]
// 方式 2:使用 Array.of()
const arr2 = Array.of(5); // [5]
// 方式 3:创建指定长度的数组并填充
const arr3 = Array.from({ length: 5 }, (_, i) => i); // [0, 1, 2, 3, 4]7. 实际应用场景
场景 1:数据处理
// 使用 Array 和 String 处理用户数据
const users = ["张三", "李四", "王五"];
const formatted = users
.map(name => name.toUpperCase()) // String 方法
.filter(name => name.length > 2); // Array 方法
console.log(formatted); // ["张三", "李四", "王五"]场景 2:日期格式化
// 使用 Date 对象格式化日期
function formatDate(date) {
const d = new Date(date);
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0'); // String 方法
const day = String(d.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
console.log(formatDate(new Date())); // "2024-12-04"场景 3:数据验证
// 使用 RegExp 验证邮箱
function validateEmail(email) {
const pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return pattern.test(email);
}
console.log(validateEmail("test@example.com")); // true场景 4:API 数据转换
// 使用 JSON 对象处理 API 响应
const apiResponse = '{"name":"张三","age":25}';
const user = JSON.parse(apiResponse); // 字符串转对象
const jsonStr = JSON.stringify(user); // 对象转字符串8. 给新手的练习题
基础题
练习 1:字符串处理
// 任务:将字符串 "hello world" 转换为 "Hello World"(每个单词首字母大写)
const str = "hello world";
// 你的代码...
// 参考答案:
const result = str
.split(' ')
.map(word => word[0].toUpperCase() + word.slice(1))
.join(' ');
console.log(result); // "Hello World"练习 2:数组去重
// 任务:使用 Set 去除数组中的重复元素
const numbers = [1, 2, 2, 3, 3, 4, 5, 5];
// 你的代码...
// 参考答案:
const unique = [...new Set(numbers)];
console.log(unique); // [1, 2, 3, 4, 5]进阶题
练习 3:日期计算
// 任务:计算两个日期之间的天数差
function daysBetween(date1, date2) {
// 你的代码...
}
// 测试
const d1 = new Date('2024-01-01');
const d2 = new Date('2024-12-31');
console.log(daysBetween(d1, d2)); // 应该输出天数差
// 参考答案:
function daysBetween(date1, date2) {
const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
const diff = Math.abs(date2 - date1); // 时间差的绝对值
return Math.floor(diff / oneDay); // 转换为天数
}练习 4:数据统计
// 任务:使用 Math 对象找出数组中的最大值、最小值和平均值
const numbers = [10, 5, 8, 3, 12, 7];
// 你的代码...
// 参考答案:
const max = Math.max(...numbers); // 12
const min = Math.min(...numbers); // 3
const avg = numbers.reduce((a, b) => a + b, 0) / numbers.length; // 7.5
console.log({ max, min, avg });9. 用更简单的话再总结一遍(方便复习)
内置对象就是 JavaScript 自带的工具包:
- 不需要安装,直接就能用
- 所有环境都有,代码可移植
- 常用的有:String(字符串)、Array(数组)、Date(日期)、Math(数学)、JSON(数据转换)等
- 记住:内置对象 ≠ Web API,内置对象在所有环境都可用
记忆口诀:
- String - 字符串工具
- Array - 数组工具
- Date - 日期工具
- Math - 数学工具
- JSON - 数据转换工具
- RegExp - 正则表达式工具
- Set/Map - 集合工具
10. 知识体系延伸 & 继续学习方向
继续学习方向
-
深入学习各个内置对象:
-
相关主题:
-
进阶学习:
遵守仓库规范
- 使用双链格式
[[xxx]]链接相关知识点 - 参考 JavaScript MOC 了解完整知识体系
- 参考 Array 了解详细文档格式
参考资源: