Skip to content

内置构造与包装对象 ​

定义 ​

JavaScript 在全局提供 String、Number、Boolean、Array、Math、Date、JSON 等内置对象,用于处理文本、数值、集合与时间等常见数据。原始类型在需要时可被临时包装为对应对象以调用方法,但日常应使用字面量而非 new String() 等包装构造。

概念要点 ​

  • 原始值 vs 引用值:string、number、boolean 等是原始值;Array、Date 等是对象(按引用传递)。
  • 装箱(boxing):访问 'abc'.length 时引擎临时创建 String 对象,用完即弃。
  • 拆箱(unboxing):包装对象参与运算时转回原始值(如 new Number(3) + 1 → 4)。
  • 不要用 new String/Number/Boolean:会得到对象而非原始值,typeof 为 'object',比较与序列化易出 bug。
  • 数组方法 已在 循环与数组 详述;本文侧重 String/Number/Math/Date/JSON 速查。

包装对象直觉 ​

操作实际发生的事建议
'hi'.toUpperCase()临时装箱 → 调方法 → 拆箱✅ 字面量即可
new String('hi')创建持久包装对象❌ 避免
(42).toFixed(2)Number 临时包装✅
new Number(42)对象,=== 与数字不等❌
true && false原始布尔运算✅
new Boolean(false)对象永远 truthy❌ 经典陷阱
javascript
const s = "hello";
typeof s; // 'string'
typeof new String("hello"); // 'object' — 不要这样写

if (new Boolean(false)) {
  // 会执行!对象在布尔上下文中为 true
}

String 常用方法 ​

方法作用示例
length字符数(非字节)'你好'.length → 2
slice(start, end)截取子串'abc'.slice(1) → 'bc'
includes(sub)是否包含'abc'.includes('b') → true
startsWith / endsWith前缀 / 后缀路径、扩展名校验
indexOf / lastIndexOf查找位置找不到返回 -1
split(sep)拆成数组'a,b'.split(',') → ['a','b']
trim / trimStart / trimEnd去空白表单输入清洗
replace / replaceAll替换支持字符串或正则
toLowerCase / toUpperCase大小写不修改原串,返回新串
padStart / padEnd填充到指定长度格式化编号

Number / Math 常用 ​

API作用
Number.isNaN(x)可靠检测 NaN
Number.isFinite(x)有限数字
Number.parseInt(str, 10)解析整数,始终传进制
Number.parseFloat(str)解析浮点
toFixed(n)固定小数位,返回字符串
Math.floor / ceil / round向下 / 向上 / 四舍五入
Math.max(...) / Math.min(...)最大 / 最小
Math.random()[0, 1) 随机数
Math.abs / Math.sqrt / Math.pow绝对值、开方、幂
javascript
Number.parseInt("08", 10); // 8 — 始终指定进制 10
(3.14159).toFixed(2); // '3.14' — 字符串,展示用
Math.floor(Math.random() * 10); // 0–9 整数随机

Date 与 JSON 速查 ​

Date说明
new Date()当前时间
new Date('2026-08-01')ISO 字符串解析(注意时区)
getFullYear() / getMonth()年;月从 0 开始
getDate() / getDay()日;星期 0=周日
getTime()毫秒时间戳
toISOString()UTC ISO 字符串
JSON说明
JSON.stringify(obj)对象 → JSON 字符串
JSON.parse(str)JSON 字符串 → 值
不支持undefined、函数、Symbol、Date 默认变字符串
循环引用stringify 会抛错

示例 ​

字符串处理 ​

javascript
const raw = "  user@example.com  ";
const email = raw.trim().toLowerCase(); // 去空白 + 小写

const path = "photo.jpg";
const isJpg = path.endsWith(".jpg"); // true

const csv = "apple,banana,cherry";
const fruits = csv.split(","); // ['apple', 'banana', 'cherry']

数值与格式化 ​

javascript
const price = 19.9;
const display = `¥${price.toFixed(2)}`; // '¥19.90'

const nums = [3, 1, 4, 1, 5];
Math.max(...nums); // 5 — 展开传入

Date 与 JSON ​

javascript
const now = new Date();
now.getMonth(); // 7 表示八月(0 起算)
now.toISOString(); // '2026-08-01T...'

const data = { name: "Alice", age: 30 };
const json = JSON.stringify(data); // '{"name":"Alice","age":30}'
const restored = JSON.parse(json); // 还原为对象

易错点与交叉引用 ​

问题说明
new String/Number/Boolean得到对象,破坏 === 与条件判断
parseInt 不传进制'08' 在旧环境可能被当八进制 → 始终 parseInt(s, 10)
toFixed 返回字符串计算前需 Number() 转回
Date.getMonth() 从 0 开始八月是 7
JSON.stringify 丢字段undefined、函数、Symbol 键值会被忽略或省略
修改字符串「无效」字符串不可变;方法都返回新串

相关章节:变量与类型 · 循环与数组 · 深浅拷贝 this 防抖(JSON 深拷贝局限)

MDN 参考 ​