前言
本文是JavaScript基础系列的第九篇,系统讲解JS中常用的内置对象。内容包括Math对象(数学运算)、Date对象(日期时间)、包装类(基本类型与对象的转换机制)以及字符串的常用方法。掌握这些内容,你就能熟练运用JS自带的工具集高效开发。
一、内置对象概述
1.1 什么是内置对象
JS中的对象分为三种:
对象类型 | 说明 | 示例 |
|---|---|---|
自定义对象 | 开发者自己创建的对象 |
|
内置对象 | JS语言自带的对象 | Math、Date、Array、String等 |
浏览器对象 | 浏览器提供的对象(不属于ECMAScript) | window、document、location |
内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供一些常用的或是最基本而必要的功能(属性和方法)。程序员不用管具体怎么实现,直接使用就可以了,帮助我们快速开发。
1.2 常用内置对象
Object、Function、Array、Math、Date、String、Boolean、Number、RegExp1.3 查阅文档的方法
MDN文档是最好的学习资源:MDN JavaScript 参考
查阅文档三步走:
查看该方法的功能
查看里面参数的意义和类型
查看返回值的意义和类型
通过demo进行测试
二、Math对象
2.1 基本概念
Math是一个工具类,不是构造函数
无需创建对象实例,直接使用其封装好的数学运算属性和方法
2.2 常用属性和方法
属性
Math.PI; // 圆周率 ≈ 3.14159方法
方法 | 说明 | 示例 | 结果 |
|---|---|---|---|
| 计算绝对值 |
|
|
| 向上取整 |
|
|
| 向下取整 |
|
|
| 四舍五入取整 |
|
|
| 生成[0,1)随机数 |
|
|
| 获取最大值 |
|
|
| 获取最小值 |
|
|
| 返回x的y次幂 |
|
|
| 开方运算 |
|
|
2.3 随机数应用公式
// 生成0-x之间的随机整数(四舍五入) Math.round(Math.random() * x); // 生成0-x之间的随机整数(向下取整) Math.floor(Math.random() * (x + 1)); // 生成x-y之间的随机整数(四舍五入) Math.round(Math.random() * (y - x) + x); // 生成x-y之间的随机整数(向下取整)★ 推荐 Math.floor(Math.random() * (y - x + 1) + x);2.4 实战案例:猜数字游戏
let trueNum = Math.floor(Math.random() * 100 + 1); let num = +prompt("请输入数字"); while (true) { if (trueNum < num) { alert("大了"); num = +prompt("请输入数字"); } else if (trueNum > num) { alert("小了"); num = +prompt("请输入数字"); } else { alert("恭喜你,猜对了!"); break; } }三、Date对象
3.1 基本概念
在JS中使用Date来处理日期和时间。它是一个构造函数,所以必须要实例化后才能使用。
3.2 创建Date对象
// 当前时间 let date = new Date(); // 指定时间(字符串格式) let d1 = new Date("2025-11-15"); let d2 = new Date("2025/11/15 12:00:00"); // 指定时间(数字格式,月份需-1) let d3 = new Date(2025, 10, 15); // 实际为2025年11月15日注意:数字格式中,月份从0开始(0代表1月,10代表11月)。
3.3 实例方法
方法 | 说明 | 返回值范围 |
|---|---|---|
| 获取日期 | 1-31 |
| 获取周几 | 0-6(0代表周日) |
| 获取月份 | 0-11(0代表1月) |
| 获取完整年份 | 四位数字 |
| 获取小时 | 0-23 |
| 获取分钟 | 0-59 |
| 获取秒数 | 0-59 |
| 获取时间戳(毫秒数) | 长整数 |
3.4 时间戳及其四种获取方式
时间戳:从格林威治标准时间的1970年1月1日0时0分0秒到当前日期所花费的毫秒数。
// 四种获取时间戳的方式 let t1 = new Date().getTime(); let t2 = new Date().valueOf(); let t3 = +new Date(); // 利用一元运算符 let t4 = Date.now(); // ★ 推荐,最简洁3.5 性能测试应用
let start = Date.now(); // 执行需要测试的代码... for (let i = 0; i < 1000000; i++) { /* 耗时操作 */ } let end = Date.now(); console.log("执行了" + (end - start) + "毫秒");3.6 实战案例:倒计时函数
function countDown(time) { let nt = +new Date(); // 当前时间戳 let ft = +new Date(time); // 目标时间戳 let ct = ft - nt; // 差值(毫秒) ct = ct / 1000; // 转换为秒 // 计算天、时、分、秒 let date = parseInt(ct / 60 / 60 / 24); let hour = parseInt((ct / 60 / 60) % 24); let min = parseInt((ct / 60) % 60); let sec = parseInt(ct % 60); return `剩余时间:${date}天${hour}小时${min}分钟${sec}秒`; } console.log(countDown("2026-01-01"));四、包装类
4.1 基本概念
JS中的数据类型分为两大类:
类型 | 说明 | 示例 |
|---|---|---|
基本数据类型 | 存储在栈内存中 | String、Number、Boolean、Null、Undefined |
引用数据类型 | 存储在堆内存中 | Object、Array、Function等 |
包装类:将基本数据类型转换为对应的对象类型。
String(); // 将字符串基本类型转换为String对象 Number(); // 将数字基本类型转换为Number对象 Boolean(); // 将布尔值基本类型转换为Boolean对象4.2 注意事项
实际开发中很少使用基本数据类型的对象
使用基本数据类型对象进行比较时可能产生不可预估的结果
let str1 = new String("hello"); let str2 = new String("hello"); console.log(str1 === str2); // false(两个不同的对象)4.3 底层机制
let str = "hello"; // 基本数据类型 console.log(str.length); // 底层临时使用String包装类转换为对象执行过程:
临时转换为String对象
读取length属性
转换回基本数据类型
重要:方法和属性只能添加给对象,不能添加给基本数据类型。当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类将其转换为对象,然后再调用对象的属性和方法,调用完以后再将其转换为基本数据类型。
五、字符串方法
5.1 字符串存储特点
字符串底层以字符数组形式保存:
let str = "hello"; // 底层存储:["h", "e", "l", "l", "o"]5.2 常用方法汇总
(1)length属性
let str = "hello"; str.length; // 5(2)charAt() 和 str[]
str.charAt(0); // "h" str[0]; // "h"(ES6特性,更推荐)(3)concat() — 连接字符串
let str = "hello"; str.concat(" ", "world"); // "hello world" // 作用和+一样,但+更常用(4)indexOf() — 查找首次出现位置
let str = "hello world"; str.indexOf("o"); // 4(首次出现位置) str.indexOf("o", 5); // 7(从索引5开始查找) str.indexOf("z"); // -1(找不到)(5)lastIndexOf() — 从后往前查找
str.lastIndexOf("o"); // 7(从后往前找)(6)includes() — 判断是否包含
str.includes("hello"); // true str.includes("xyz"); // false(7)slice() — 截取字符串(支持负数)
let str = "hello"; str.slice(0, 3); // "hel"(不包含结束位置) str.slice(0, -1); // "hell"(负数从后计算) str.slice(2); // "llo"(省略第二个参数,截取到最后)(8)substring() — 截取字符串(不支持负数)
str.substring(0, 3); // "hel" str.substring(3, 0); // "hel"(自动交换参数位置) str.substring(-1, 3); // "hel"(负数视为0)(9)substr() — 截取字符串(指定长度)
str.substr(0, 3); // "hel"(从索引0开始,截取3个)三种截取方法对比:
方法 | 参数 | 支持负数 | 特点 |
|---|---|---|---|
| 开始索引,结束索引 | ✅ | 最常用,推荐 |
| 开始索引,结束索引 | ❌ | 自动交换参数 |
| 开始索引,截取长度 | ❌ | 已废弃,不推荐 |
(10)split() — 拆分为数组
let str = "red,orange,yellow"; str.split(","); // ["red", "orange", "yellow"] str.split(""); // ["r", "e", "d", ",", "o", ...](11)replace() — 替换字符
let str = "hello world"; str.replace("world", "JavaScript"); // "hello JavaScript" // 注意:只替换第一个匹配项(12)toUpperCase() / toLowerCase()
let str = "Hello World"; str.toUpperCase(); // "HELLO WORLD" str.toLowerCase(); // "hello world"5.3 方法速查表
方法 | 功能 | 返回值 |
|---|---|---|
| 获取字符串长度 | 数字 |
| 获取指定位置字符 | 字符 |
| 获取指定位置字符(ES6) | 字符 |
| 连接字符串 | 新字符串 |
| 查找首次出现位置 | 索引或-1 |
| 从后往前查找 | 索引或-1 |
| 判断是否包含 | true/false |
| 截取字符串 | 新字符串 |
| 截取字符串 | 新字符串 |
| 截取字符串 | 新字符串 |
| 拆分为数组 | 数组 |
| 替换字符 | 新字符串 |
| 转换为大写 | 新字符串 |
| 转换为小写 | 新字符串 |
总结
本文系统梳理了JavaScript中常用的内置对象:
主题 | 核心要点 |
|---|---|
Math对象 | 工具类,无需实例化,提供数学运算方法 |
Date对象 | 构造函数,处理日期时间,时间戳的四种获取方式 |
包装类 | 基本类型临时转换为对象,调用属性和方法后再转回 |
字符串方法 | 截取、查找、替换、转换、拆分等常用操作 |
掌握这些内置对象,你就能在日常开发中得心应手地处理各种常见任务。