ECMAScript基本引用类型

Date、RegExp、原始值包装对象与单例内置对象等非集合引用类型概览。

#type / concept #status / growing #resource / javascript #resource / ecmascript

[!info] related notes

ECMAScript基本引用类型

这篇笔记把 ECMAScript 里那些不是集合容器、但又经常出现的内置引用类型放在一起看。

主要包括什么

  • Date
  • RegExp
  • 原始值包装对象: BooleanNumberString
  • 单例内置对象: Math 以及全局对象相关能力

原始值包装对象要特别注意

语言会在需要时把原始值临时装箱,所以你可以对字符串调用方法,但这不代表原始值真的变成了长期存在的对象。

重点边界:

  • 原始值和包装对象不是一回事
  • new Boolean(false) 仍然是对象,因此在布尔上下文里是真值

String 包装对象

常用方法速查

字符串方法详见:javascript-string-methods

核心方法(优先掌握):

类别方法作用
长度.length属性,返回编码单元数
取字符.at(i) / .charAt(i) / [i]取单个字符
查找.includes(str)是否包含
查找.indexOf(str)查找位置
截取.slice(start, end?)截取子串
替换.replace() / .replaceAll()替换内容
大小写.toUpperCase() / .toLowerCase()转换大小写
去空格.trim() / .trimStart() / .trimEnd()去除空白
拆分.split(sep)字符串转数组
拼接.concat()+ / 模板字符串拼接字符串

静态方法

  • String.fromCharCode(...codes) - 从 UTF-16 码元创建字符串
  • String.fromCodePoint(...codePoints) - 从 Unicode 码点创建字符串
  • String.raw - 模板字符串的原始字符串

关键特性

  • 不可变性:所有方法返回新字符串,不修改原字符串
  • UTF-16 编码.length 统计编码单元,emoji 可能长度为 2

Number 包装对象

常用方法

方法作用示例
.toFixed(n)保留 n 位小数,返回字符串(123.456).toFixed(2)"123.46"
.toPrecision(n)保留 n 位有效数字(123.456).toPrecision(4)"123.5"
.toString(radix)转为字符串,可指定进制(255).toString(16)"ff"
.valueOf()返回原始数值
.toLocaleString()本地化数字格式

静态属性

属性说明
Number.MAX_VALUE≈1.8e308最大正数
Number.MIN_VALUE≈5e-324最小正数
Number.MAX_SAFE_INTEGER2^53-1最大安全整数
Number.MIN_SAFE_INTEGER-(2^53-1)最小安全整数
Number.POSITIVE_INFINITYInfinity
Number.NEGATIVE_INFINITY-Infinity
Number.NaNNaN

静态方法

方法作用与全局函数区别
Number.isNaN(v)判断是否 NaN不会尝试类型转换
Number.isFinite(v)判断是否有限数不会尝试类型转换
Number.isInteger(v)判断是否整数
Number.isSafeInteger(v)判断是否安全整数
Number.parseInt(str, radix)解析整数等同全局 parseInt
Number.parseFloat(str)解析浮点数等同全局 parseFloat

关键区别:Number.isNaN vs 全局 isNaN

isNaN("hello");        // true (先转换为数字)
Number.isNaN("hello"); // false (不转换,"hello" 不是 NaN)

isNaN(NaN);            // true
Number.isNaN(NaN);     // true

Boolean 包装对象

Boolean 包装对象比较简单,几乎不需要使用。

常用方法

  • .valueOf() - 返回原始布尔值
  • .toString() - 返回 "true""false"

重要陷阱

const falseObj = new Boolean(false);
if (falseObj) {
  // 会执行!因为 falseObj 是对象,对象是真值
}

结论:永远不要用 new Boolean(),直接用原始值 true / false


Date

Date 主要解决时间点表示、时间戳转换和格式化协作问题,但现代项目里很多复杂日期处理会进一步交给专门库。

常用方法

方法作用
new Date()当前时间
new Date(timestamp)从时间戳创建
new Date(y, m, d, h, min, s, ms)从分量创建(月份从 0 开始)
.getTime()获取时间戳(毫秒)
.getFullYear()获取年份
.getMonth()获取月份(0-11)
.getDate()获取日期(1-31)
.getDay()获取星期(0-6)
.getHours() / .getMinutes() / .getSeconds()获取时分秒
.toISOString()ISO 8601 格式字符串
.toLocaleDateString()本地化日期字符串
.toLocaleTimeString()本地化时间字符串
Date.now()静态方法,获取当前时间戳

关键特性

  • 月份从 0 开始:0 = 一月,11 = 十二月
  • 可变对象setXxx 方法会修改原对象
  • 时区敏感getXxx 返回本地时间,getUTCXxx 返回 UTC 时间

RegExp

正则表达式也是内置引用类型之一,但它的语法和状态行为值得单独展开。

延伸阅读:ecmascript-regular-expressions


Math 与全局对象

Math 是单例对象,提供数学常量和计算方法。

常用属性

属性
Math.PI≈3.14159
Math.E≈2.71828
Math.LN2≈0.693
Math.LN10≈2.302

常用方法

方法作用
Math.abs(x)绝对值
Math.round(x)四舍五入
Math.floor(x)向下取整
Math.ceil(x)向上取整
Math.trunc(x)截断小数部分
Math.sign(x)返回 -1/0/1
Math.max(...args)最大值
Math.min(...args)最小值
Math.pow(x, y)x 的 y 次方
Math.sqrt(x)平方根
Math.random()0-1 随机数
Math.log(x)自然对数
Math.log2(x)以 2 为底的对数
Math.log10(x)以 10 为底的对数

生成指定范围随机整数

// [min, max] 范围的随机整数
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

关键区别:Math.floor vs Math.trunc vs Math.round

Math.floor(-1.5);  // -2 (向下取整)
Math.trunc(-1.5);  // -1 (截断小数)
Math.round(-1.5);  // -2 (四舍五入)
Math.ceil(-1.5);   // -1 (向上取整)

全局对象相关能力

全局函数

函数作用备注
isNaN(v)判断是否 NaN会先类型转换
isFinite(v)判断是否有限数会先类型转换
parseInt(str, radix)解析整数
parseFloat(str)解析浮点数
encodeURI(uri)编码 URI不编码 URI 字符
decodeURI(uri)解码 URI
encodeURIComponent(str)编码 URI 组件编码更多字符
decodeURIComponent(str)解码 URI 组件

全局常量

常量
Infinity正无穷
-Infinity负无穷
NaN非数字
undefined未定义
null空值

和集合引用类型怎么区分

如果主题重点在保存一组值、键值对或可迭代容器,更适合放到 ecmascript-collection-reference-types 去看。

创建于 2025/1/1 更新于 2026/5/27