当前位置:首页 > 技术 > 正文内容

JavaScript核心内置对象深度解析:Object、Array、Date与RegExp

访客 技术 2026年8月21日 1

JavaScript 引用类型核心指南

在 JavaScript 编程中,引用类型构成了处理复杂数据的基石。不同于基本类型,引用类型能够存储多个值或更复杂的实体。本文将深入探讨四个最核心的内置对象:Object(对象)、Array(数组)、Date(日期)和RegExp(正则表达式),并通过重构后的代码示例展示其在实际开发中的应用。

一、Object:动态的数据集合

Object 是 JavaScript 中所有引用类型的基础。本质上,它是一个无序的键值对集合,允许开发者动态地添加、修改或删除属性。这种灵活性使其成为存储数据和封装逻辑的理想容器。

示例:构建动态配置对象

// 使用字面量语法创建配置对象
const appConfig = {
  apiUrl: 'https://api.example.com/v1',
  timeout: 5000,
  isAuthenticated: false,
  login: function() {
    this.isAuthenticated = true;
    console.log(`已连接至 ${this.apiUrl}`);
  }
};

appConfig.login(); // 输出: 已连接至 https://api.example.com/v1

// 使用构造函数创建并动态赋值
const userProfile = new Object();
userProfile.userId = 1001;
userProfile.roles = ['admin', 'editor'];

// 添加计算属性
Object.defineProperty(userProfile, 'accessLevel', {
  get() {
    return this.roles.includes('admin') ? 'High' : 'Low';
  }
});

console.log(userProfile.accessLevel); // 输出: "High"

二、Array:有序的线性数据结构

数组是专门用于存储有序数值集合的对象。与普通对象不同,数组使用数字索引(从 0 开始)来访问元素,并提供了丰富的操作方法(如迭代、映射、过滤)来处理数据流。

示例:库存数据处理

// 初始化库存列表
const stockItems = [
  { id: 'A1', quantity: 15, price: 100 },
  { id: 'B2', quantity: 5,  price: 200 },
  { id: 'C3', quantity: 50, price: 50 }
];

// 1. 使用 filter 筛选库存不足的商品
const lowStock = stockItems.filter(item => item.quantity < 10);
// 结果: [{ id: 'B2', quantity: 5, price: 200 }]

// 2. 使用 map 计算每项商品的总价值
const itemValues = stockItems.map(item => ({
  id: item.id,
  totalValue: item.quantity * item.price
}));

// 3. 使用 reduce 计算库存总价值
const grandTotal = stockItems.reduce((sum, item) => {
  return sum + (item.quantity * item.price);
}, 0);

console.log(`库存总价值: ${grandTotal}`); // 输出计算结果

三、Date:时间戳与日期运算

Date 对象基于 UTC 时间 1970 年 1 月 1 日开始的毫秒数来处理时间。它不仅可以获取当前的系统时间,还能执行复杂的日期计算、格式化以及时区转换。

示例:会员到期倒计时

// 获取当前时间
const now = new Date();

// 设定会员过期时间 (注意:月份是从0开始计数,11代表12月)
const expirationDate = new Date(2024, 11, 31, 23, 59, 59);

// 计算时间差(毫秒)
const timeDiff = expirationDate.getTime() - now.getTime();

// 将毫秒转换为天数
const daysRemaining = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));

if (daysRemaining > 0) {
  console.log(`会员还有 ${daysRemaining} 天到期`);
} else {
  console.log('会员已过期');
}

// 获取具体的日期组成部分
const year = expirationDate.getFullYear();
const month = expirationDate.toLocaleString('default', { month: 'long' });
console.log(`过期时间:${year}年${month}`);

四、RegExp:强大的模式匹配工具

正则表达式(RegExp)提供了一种高效的方式来搜索、匹配和替换字符串中的特定模式。它是处理文本验证、数据提取和格式清洗的利器。

示例:敏感信息过滤与验证

// 定义正则模式:匹配手机号码 (简化版)
const phoneRegex = /1[3-9]\d{9}/;

// 验证输入
const userInput = "13812345678";
console.log(phoneRegex.test(userInput)); // 输出: true

// 定义模式:从日志中提取十六进制颜色代码
const logData = "Error: color #ff0000 not found, trying #00ff00.";
const hexRegex = /#([a-fA-F0-9]{6})/g;

// 使用 matchAll 进行迭代提取
const matches = logData.matchAll(hexRegex);
const foundColors = [];
for (const match of matches) {
  foundColors.push(match[0]);
}

console.log(`发现颜色代码: ${foundColors.join(', ')}`); 
// 输出: 发现颜色代码: #ff0000, #00ff00

// 替换敏感词
const textBlock = "用户密码是:123456,请勿泄露。";
const sanitized = textBlock.replace(/\d{6}/g, "******");
console.log(sanitized);
// 输出: 用户密码是:******,请勿泄露。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。