JavaScript字符串操作全解析:从基础概念到性能优化实践
在日常的JavaScript开发中字符串处理占据了相当大的比重。无论是用户输入验证、数据格式化还是文本内容操作都离不开对字符串的熟练掌握。本文将从基础概念出发系统讲解JavaScript字符串的核心特性、常用方法、性能优化以及实际应用场景帮助开发者全面掌握字符串处理技巧。1. JavaScript字符串基础概念1.1 什么是字符串字符串是JavaScript中的基本数据类型之一用于表示文本数据。在JavaScript中字符串可以使用单引号、双引号或反引号来定义。// 三种定义字符串的方式 let str1 单引号字符串; let str2 双引号字符串; let str3 模板字符串;字符串在内存中是以字符序列的形式存储的每个字符都有对应的索引位置从0开始计数。JavaScript使用UTF-16编码来表示字符串这意味着它可以处理各种语言的字符包括中文、日文等。1.2 字符串的不可变性JavaScript中的字符串是不可变的immutable。这意味着一旦字符串被创建就不能直接修改其中的字符。任何看似修改字符串的操作实际上都是创建了一个新的字符串。let str hello; str[0] H; // 这不会改变原字符串 console.log(str); // 输出: hello // 正确的方式是创建新字符串 let newStr H str.slice(1); console.log(newStr); // 输出: Hello理解字符串的不可变性对于编写高效的JavaScript代码至关重要特别是在处理大量字符串操作时。1.3 字符串长度和字符访问可以使用length属性获取字符串的长度使用方括号语法或charAt()方法来访问特定位置的字符。let str JavaScript; console.log(str.length); // 输出: 10 console.log(str[0]); // 输出: J console.log(str.charAt(0)); // 输出: J console.log(str[str.length - 1]); // 输出: t需要注意的是如果使用不存在的索引访问字符方括号语法返回undefined而charAt()方法返回空字符串。2. 字符串创建和模板字符串2.1 基本字符串创建除了直接使用引号创建字符串外还可以使用String构造函数创建字符串对象但通常推荐使用字面量语法。// 字面量方式推荐 let literalStr Hello World; // 构造函数方式 let constructorStr new String(Hello World); console.log(typeof literalStr); // 输出: string console.log(typeof constructorStr); // 输出: object虽然两种方式创建的字符串在值上相同但类型不同。在大多数情况下使用字面量语法更简洁高效。2.2 模板字符串的高级用法ES6引入的模板字符串提供了更强大的字符串处理能力支持多行字符串和字符串插值。// 多行字符串 let multiLineStr 第一行 第二行 第三行 ; // 字符串插值 let name 张三; let age 25; let info 姓名: ${name}, 年龄: ${age}; console.log(info); // 输出: 姓名: 张三, 年龄: 25 // 表达式计算 let a 10, b 20; let result ${a} ${b} ${a b}; console.log(result); // 输出: 10 20 30模板字符串还支持标签模板Tagged Templates可以用于自定义字符串处理逻辑。function highlight(strings, ...values) { let result ; strings.forEach((string, i) { result string; if (i values.length) { result mark${values[i]}/mark; } }); return result; } let name 李四; let score 95; let message highlight学生${name}的考试成绩是${score}分; console.log(message); // 输出: 学生mark李四/mark的考试成绩是mark95/mark分3. 字符串常用操作方法3.1 字符串查找和匹配JavaScript提供了多种字符串查找方法每种方法都有其特定的使用场景。let str JavaScript字符串操作详解; // indexOf和lastIndexOf console.log(str.indexOf(字符串)); // 输出: 10 console.log(str.lastIndexOf(a)); // 输出: 3 // includes、startsWith、endsWith console.log(str.includes(详解)); // 输出: true console.log(str.startsWith(Java)); // 输出: true console.log(str.endsWith(详解)); // 输出: true // match方法使用正则表达式 let matchResult str.match(/[A-Z]/g); console.log(matchResult); // 输出: [J, S]在实际开发中根据具体需求选择合适的方法。如果只需要判断是否存在使用includes()更简洁如果需要获取位置信息使用indexOf()更合适。3.2 字符串截取和分割字符串截取和分割是常见的操作JavaScript提供了多个相关方法。let str JavaScript,Python,Java,C; // 分割字符串 let languages str.split(,); console.log(languages); // 输出: [JavaScript, Python, Java, C] // 截取子字符串 console.log(str.slice(0, 10)); // 输出: JavaScript console.log(str.substring(11, 17)); // 输出: Python console.log(str.substr(18, 4)); // 输出: Java // 注意substr已废弃建议使用slice或substringsplit()方法还支持限制分割次数let str a,b,c,d,e; console.log(str.split(,, 3)); // 输出: [a, b, c]3.3 字符串替换和大小写转换替换操作可以使用replace()方法大小写转换有专门的方法。let str Hello World, hello JavaScript; // 替换操作 console.log(str.replace(hello, Hi)); // 只替换第一个匹配项 console.log(str.replace(/hello/gi, Hi)); // 替换所有匹配项不区分大小写 // 大小写转换 console.log(str.toUpperCase()); // 输出: HELLO WORLD, HELLO JAVASCRIPT console.log(str.toLowerCase()); // 输出: hello world, hello javascript // 首字母大写 function capitalize(str) { return str.charAt(0).toUpperCase() str.slice(1).toLowerCase(); } console.log(capitalize(hello)); // 输出: Helloreplace()方法还支持使用函数进行复杂的替换逻辑let str 价格: $10, 数量: 5; let result str.replace(/\$(\d)/g, function(match, p1) { return (parseInt(p1) * 6.5); }); console.log(result); // 输出: 价格: 65, 数量: 54. 字符串编码和特殊字符处理4.1 Unicode编码处理JavaScript字符串使用UTF-16编码了解编码处理对于国际化应用很重要。let str Hello 世界; // 获取字符的Unicode编码 console.log(str.charCodeAt(6)); // 输出: 19990 (世的编码) console.log(str.codePointAt(6)); // 输出: 19990 // 从编码创建字符 console.log(String.fromCharCode(19990)); // 输出: 世 console.log(String.fromCodePoint(19990)); // 输出: 世 // 处理代理对字符 let emoji ; console.log(emoji.length); // 输出: 2 console.log(emoji.codePointAt(0)); // 输出: 128522对于包含代理对的字符如emoji建议使用codePointAt()和fromCodePoint()方法。4.2 特殊字符和转义序列JavaScript字符串中可以使用转义序列表示特殊字符。// 常见转义序列 let specialStr 第一行\n第二行\t制表符\引号\\反斜杠; console.log(specialStr); // Unicode转义序列 let unicodeStr \u4e16\u754c; // 世界 console.log(unicodeStr); // 输出: 世界 // 模板字符串中的转义 let templateStr 换行符\n制表符\t; console.log(templateStr);在正则表达式中需要注意特殊字符的转义let regex /\.\*\\?\\\(\)\{\}\[\]\^\$/g; let str 特殊字符: .*?\\(){}[]^$; console.log(str.match(regex));5. 字符串性能优化和最佳实践5.1 字符串拼接性能比较不同的字符串拼接方式在性能上有显著差异。// 测试不同拼接方式的性能 function testConcatPerformance() { const iterations 10000; // 使用运算符 console.time(加号拼接); let result1 ; for (let i 0; i iterations; i) { result1 test; } console.timeEnd(加号拼接); // 使用数组join console.time(数组join); let arr []; for (let i 0; i iterations; i) { arr.push(test); } let result2 arr.join(); console.timeEnd(数组join); // 使用模板字符串 console.time(模板字符串); let result3 ; for (let i 0; i iterations; i) { result3 ${result3}test; } console.timeEnd(模板字符串); } testConcatPerformance();对于大量字符串拼接推荐使用数组的join()方法性能最优。5.2 内存优化技巧由于字符串的不可变性频繁操作字符串可能导致内存问题。// 不好的做法频繁创建新字符串 function badPractice(strArray) { let result ; for (let str of strArray) { result str; // 每次循环都创建新字符串 } return result; } // 好的做法使用数组缓存 function goodPractice(strArray) { let parts []; for (let str of strArray) { parts.push(str); } return parts.join(); } // 使用字符串构建器模式 class StringBuilder { constructor() { this.parts []; } append(str) { this.parts.push(str); return this; } toString() { return this.parts.join(); } } let builder new StringBuilder(); builder.append(Hello).append( ).append(World); console.log(builder.toString()); // 输出: Hello World5.3 字符串缓存和复用对于频繁使用的字符串可以考虑缓存机制。// 简单的字符串缓存 const stringCache new Map(); function getCachedString(key, generator) { if (stringCache.has(key)) { return stringCache.get(key); } const value generator(); stringCache.set(key, value); return value; } // 使用示例 const welcomeMessage getCachedString(welcome, () { return 欢迎访问我们的网站当前时间${new Date().toLocaleDateString()}; });6. 实际应用场景案例6.1 用户输入验证和格式化字符串处理在表单验证中非常常见。// 手机号验证和脱敏 function validateAndMaskPhone(phone) { // 去除所有非数字字符 const cleanPhone phone.replace(/\D/g, ); // 验证手机号格式 const phoneRegex /^1[3-9]\d{9}$/; if (!phoneRegex.test(cleanPhone)) { throw new Error(手机号格式不正确); } // 脱敏处理 return cleanPhone.replace(/(\d{3})\d{4}(\d{4})/, $1****$2); } try { const phone 138-1234-5678; const masked validateAndMaskPhone(phone); console.log(masked); // 输出: 138****5678 } catch (error) { console.error(error.message); }6.2 数据格式转换和处理字符串操作在数据转换中发挥重要作用。// CSV数据解析 function parseCSV(csvString) { const lines csvString.split(\n); const result []; const headers lines[0].split(,); for (let i 1; i lines.length; i) { if (lines[i].trim() ) continue; const obj {}; const currentLine lines[i].split(,); for (let j 0; j headers.length; j) { obj[headers[j].trim()] currentLine[j] ? currentLine[j].trim() : ; } result.push(obj); } return result; } const csvData 姓名,年龄,城市 张三,25,北京 李四,30,上海; console.log(parseCSV(csvData));6.3 模板引擎简单实现基于字符串操作可以实现简单的模板引擎。class SimpleTemplate { constructor(template) { this.template template; } render(data) { return this.template.replace(/\{\{(\w)\}\}/g, (match, key) { return data[key] || ; }); } } // 使用示例 const template new SimpleTemplate( div classuser-card h3{{name}}/h3 p年龄: {{age}}/p p城市: {{city}}/p /div ); const userData { name: 王五, age: 28, city: 广州 }; console.log(template.render(userData));7. 常见问题排查和解决方案7.1 编码相关问题字符串编码问题在跨平台开发中经常遇到。// 处理中文乱码问题 function handleEncodingIssues() { // 确保页面编码为UTF-8 const meta document.createElement(meta); meta.setAttribute(charset, UTF-8); document.head.appendChild(meta); // AJAX请求设置编码 fetch(/api/data, { headers: { Content-Type: application/json; charsetutf-8 } }); } // Base64编码解码 function base64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } function base64Decode(base64Str) { return decodeURIComponent(escape(atob(base64Str))); } const chineseStr 中文测试; const encoded base64Encode(chineseStr); console.log(encoded); // 输出Base64编码 console.log(base64Decode(encoded)); // 输出: 中文测试7.2 性能问题排查字符串操作性能问题需要系统性的排查方法。// 内存泄漏检测 function detectMemoryLeaks() { let previousLength 0; const interval setInterval(() { const currentLength JSON.stringify(performance.memory).length; if (currentLength previousLength * 1.5) { console.warn(可能的内存泄漏 detected); } previousLength currentLength; }, 1000); return () clearInterval(interval); } // 字符串操作性能监控 function monitorStringOperations() { const originalStringMethods {}; const methodsToMonitor [replace, split, concat, slice]; methodsToMonitor.forEach(method { originalStringMethods[method] String.prototype[method]; String.prototype[method] function(...args) { console.time(String.${method}); const result originalStringMethods[method].apply(this, args); console.timeEnd(String.${method}); return result; }; }); return () { methodsToMonitor.forEach(method { String.prototype[method] originalStringMethods[method]; }); }; }7.3 跨浏览器兼容性问题不同浏览器对字符串方法的支持可能存在差异。// 兼容性处理工具函数 const StringUtils { // 安全的includes方法兼容旧浏览器 includes: function(str, searchValue, position) { if (String.prototype.includes) { return str.includes(searchValue, position); } return str.indexOf(searchValue, position) ! -1; }, // 安全的startsWith方法 startsWith: function(str, searchValue, position) { position position || 0; return str.lastIndexOf(searchValue, position) position; }, // 安全的endsWith方法 endsWith: function(str, searchValue, position) { if (position undefined || position str.length) { position str.length; } return str.indexOf(searchValue, position - searchValue.length) ! -1; } }; // 使用兼容性方法 const testStr Hello World; console.log(StringUtils.includes(testStr, World)); // 输出: true console.log(StringUtils.startsWith(testStr, Hello)); // 输出: true console.log(StringUtils.endsWith(testStr, World)); // 输出: true8. 高级技巧和最佳实践8.1 正则表达式与字符串操作正则表达式是字符串处理的强大工具。// 复杂的字符串处理示例 function advancedStringProcessing() { const text 联系我138-1234-5678 或者 139-8765-4321邮箱testexample.com; // 提取手机号 const phones text.match(/\d{3}-\d{4}-\d{4}/g); console.log(手机号:, phones); // 提取邮箱 const emails text.match(/\b[A-Za-z0-9._%-][A-Za-z0-9.-]\.[A-Z|a-z]{2,}\b/g); console.log(邮箱:, emails); // 字符串分词 const words text.split(/\s|[,.。;]/).filter(word word.length 0); console.log(词语:, words); } advancedStringProcessing(); // 模板字符串与正则表达式结合 function templateWithRegex(template, data) { return template.replace(/\$\{(\w)\}/g, (match, key) { return data[key] ! undefined ? data[key] : match; }); } const data { name: 张三, age: 25 }; const result templateWithRegex(姓名: ${name}, 年龄: ${age}, data); console.log(result); // 输出: 姓名: 张三, 年龄: 258.2 函数式编程风格使用函数式编程理念处理字符串操作。// 函数式字符串处理工具 const StringFP { // 管道操作 pipe: (...fns) (value) fns.reduce((acc, fn) fn(acc), value), // 字符串处理函数 trim: (str) str.trim(), toLower: (str) str.toLowerCase(), replace: (pattern, replacement) (str) str.replace(pattern, replacement), split: (separator) (str) str.split(separator), join: (separator) (arr) arr.join(separator) }; // 使用示例 const processString StringFP.pipe( StringFP.trim, StringFP.toLower, StringFP.replace(/\s/g, -), StringFP.split(-), StringFP.join(_) ); const input Hello World JavaScript ; console.log(processString(input)); // 输出: hello_world_javascript8.3 安全最佳实践字符串操作中的安全考虑。// XSS防护 function escapeHTML(str) { const div document.createElement(div); div.textContent str; return div.innerHTML; } // SQL注入防护Node.js环境 function escapeSQL(str) { return str.replace(//g, ) .replace(/\\/g, \\\\) .replace(/\0/g, \\0) .replace(/\n/g, \\n) .replace(/\r/g, \\r) .replace(/\x1a/g, \\Z); } // 输入验证 function validateInput(input, rules) { const errors []; if (rules.required !input.trim()) { errors.push(字段不能为空); } if (rules.minLength input.length rules.minLength) { errors.push(长度不能少于${rules.minLength}个字符); } if (rules.maxLength input.length rules.maxLength) { errors.push(长度不能超过${rules.maxLength}个字符); } if (rules.pattern !rules.pattern.test(input)) { errors.push(格式不正确); } return errors; } // 使用示例 const userInput scriptalert(xss)/script; console.log(escapeHTML(userInput)); // 输出转义后的安全文本 const sqlInput OReilly; console.log(escapeSQL(sqlInput)); // 输出: OReilly const validationResult validateInput(test123, { required: true, minLength: 5, maxLength: 20, pattern: /^[a-zA-Z0-9]$/ }); console.log(validationResult); // 输出: []通过系统学习JavaScript字符串的各个方面开发者可以写出更高效、更安全的代码。建议在实际项目中多练习这些技巧并根据具体需求选择合适的字符串处理方法。

相关新闻

基于遗传算法优化的RBF神经网络MIMO-OFDM信道估计

基于遗传算法优化的RBF神经网络MIMO-OFDM信道估计

1. 项目背景与核心价值在无线通信系统中,MIMO-OFDM技术因其高频谱效率和抗多径衰落能力成为5G及未来通信网络的核心技术。然而,信道估计作为系统接收端的关键环节,其精度直接影响着整体系统性能。传统最小二乘(LS)和线性最小均方误差(LMMSE)算…

2026/8/4 9:17:53 阅读更多 →
C语言基础11—指针1

C语言基础11—指针1

学习C语言有一道绕不开的坎,那就是指针。很多初学者初次接触指针时会感到困惑,看不懂地址、分不清指针变量与普通变量。但不可否认,指针是C语言的灵魂,依托指针我们可以高效操作内存、灵活处理数组与字符串,也是后续学…

2026/8/3 22:01:23 阅读更多 →
如何在电脑部署 OpenClaw 智能体,整合包简化复杂环境配置(含安装包)

如何在电脑部署 OpenClaw 智能体,整合包简化复杂环境配置(含安装包)

OpenClaw v2.7.9 整合包部署教程|搭建 Windows 本地 AI 自动化智能体 适配系统:Windows10/11 64 位 当前版本:v2.7.9(虾壳云版) 安装包体积:45.8MB 核心特点:全程图形交互操作,不依…

2026/8/4 10:53:23 阅读更多 →

最新新闻

AI背单词到底有多强?实测12款工具后,这3个被92%用户忽略的核心参数决定成败

AI背单词到底有多强?实测12款工具后,这3个被92%用户忽略的核心参数决定成败

更多请点击: https://kaifayun.com 第一章:AI帮助记忆单词 人工智能正深刻改变语言学习的方式,尤其在词汇记忆环节展现出显著优势。传统死记硬背效率低、遗忘快,而基于认知科学与机器学习的AI工具能动态适配用户记忆曲线&#xf…

2026/8/4 14:03:10 阅读更多 →
Linux系统Oracle 11g R2数据库完整安装与配置实战指南

Linux系统Oracle 11g R2数据库完整安装与配置实战指南

1. 项目概述:为什么要在Linux上安装Oracle 11g?如果你是一名后端开发、DBA或者系统运维,迟早会碰到一个任务:在Linux服务器上部署Oracle数据库。Oracle 11g R2虽然已经不是最新的版本,但在很多传统企业、金融系统和遗留…

2026/8/4 14:03:10 阅读更多 →
2026东莞吉利银河M9音响升级观察:东莞杰之声如何处理11喇叭车内声场

2026东莞吉利银河M9音响升级观察:东莞杰之声如何处理11喇叭车内声场

一台银河M9的二次升级案例,记录器材布局、门板处理与车内声场调整一、这台银河M9为什么进行二次升级银河M9的车厢空间较大,前后排乘员的听音位置也不完全相同。原车系统能够满足日常播放,但当车主希望进一步改善人声密度、乐器层次和低频质感…

2026/8/4 14:03:10 阅读更多 →
人工智能训练师三级·模型生命周期真题40题|训练→评估→调优全链路通关

人工智能训练师三级·模型生命周期真题40题|训练→评估→调优全链路通关

人工智能训练师三级模型生命周期真题40题|训练→评估→调优全链路通关 本文是「真题演练系列」第2篇/共7篇 📊 本篇概览 题量:40道精选真题 预计用时:120分钟 难度分布:基础30% / 进阶50% / 挑战20% 适合人群:有一定机器学习基础,需要系统掌握模型训练评估方法论的备考…

2026/8/4 14:03:10 阅读更多 →
免费字幕编辑神器:5分钟解决你的所有字幕难题

免费字幕编辑神器:5分钟解决你的所有字幕难题

免费字幕编辑神器:5分钟解决你的所有字幕难题 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 还在为字幕制作头疼吗?SubtitleEdit这款完全免费的开源字幕编辑工具,…

2026/8/4 14:03:10 阅读更多 →
一站式宠物购物托运社交平台开发,多角色权限设计

一站式宠物购物托运社交平台开发,多角色权限设计

一站式宠物购物托运社交平台开发,多角色权限设计 一站式宠物综合平台整合用品购物、活体托运、同城寄养、社区社交、商户入驻等多元业务,涵盖普通用户、入驻商户、托运服务商、平台运营、后台管理员等多种使用主体。不同角色的操作场景、数据查看权限、功…

2026/8/4 14:02:10 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →