百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

JavaScript字符串操作技巧大盘点_javascript技巧总结

itomcoil 2025-02-19 12:21 21 浏览

一、基础字符串操作

1. 字符串创建

const str1 = 'Hello World'; // 字面量创建
const str2 = String(123.45); // "123.45"
const str3 = new String('Hello').valueOf(); // 转为原始值

2. 访问字符

'cat'.charAt(1); // "a"
'cat'[1]; // "a"(ES5+)

3. 字符串不可变性

let s = 'hello';
s[0] = 'H'; // 无效
s = 'H' + s.slice(1); // 正确修改方式

二、核心字符串方法

1. 连接字符串

const result = 'Hello'.concat(' ', 'World', '!'); // "Hello World!"

2. 提取子串

'hello'.slice(1,3);    // "el"(支持负数)
'hello'.substring(1,3); // "el"(自动排序参数)

3. 查找定位

'javascript'.indexOf('a');     // 1
'javascript'.lastIndexOf('a'); // 3
'Hello'.includes('ell');       // true(ES6)

4. 大小写转换

'Hello'.toLowerCase(); // "hello"
'HELLO'.toUpperCase(); // "HELLO"
'?'.toLocaleUpperCase('de-DE'); // "SS"(德语环境)

5. 空白处理

'  text  '.trim();        // "text"
'  text  '.trimStart();   // "text  "
'  text  '.trimEnd();     // "  text"

三、高级处理技巧

1. 字符串填充

'5'.padStart(3, '0');    // "005"
'25'.padEnd(4, '0');     // "2500"

2. 正则表达式集成

// 查找所有匹配
const matches = [...'test1test2'.matchAll(/t(e)(st(\d?))/g)];

// 复杂替换
'price: 100'.replace(/(\d+)/, m => `$${m*0.8}`);

3. 模板字符串高级用法

// 带标签的模板
function currency(strings, ...values) {
  return strings.reduce((acc, str, i) => 
    acc + str + (values[i] ? `$${values[i].toFixed(2)}` : ''), '');
}
console.log(currency`Total: ${25} + ${30}`); // "Total: $25.00 + $30.00"

// 嵌套模板
const html = `
  
    ${items.map(item => `
  • ${item.name}: ${item.value}
  • `).join('')}
`;

四、编码与特殊处理

1. Unicode处理

''.codePointAt(0).toString(16); // "1f600"
String.fromCodePoint(0x1F600);    // ""

2. Base64转换

btoa('你好'); // 报错(需先编码)
btoa(encodeURIComponent('你好')); // "JUU0JUJEJUEwJUU1JUE1JUJE"

3. URL编码

encodeURIComponent('?q=test&lang=zh'); // "%3Fq%3Dtest%26lang%3Dzh"
decodeURIComponent('%E4%BD%A0%E5%A5%BD'); // "你好"

五、性能优化技巧

1. 高效拼接

// 错误方式
let result = '';
for(let i=0; i<100000; i++) {
  result += i; // 产生大量临时字符串
}

// 正确方式
const arr = [];
for(let i=0; i<100000; i++) {
  arr.push(i);
}
result = arr.join('');

2. 长字符串处理

// 使用文本块处理大文本
const text = "这是一个非常长的字符串..." + 
  "需要分多行编写..." + 
  "使用加号连接更高效";

六、实用工具函数

1. 统计字符出现次数

function countOccurrences(str, char) {
  return str.split(char).length - 1;
}

2. 解析查询参数

function parseQuery(query) {
  return Object.fromEntries(
    query.split('&').map(param => {
      const [k, v] = param.split('=');
      return [decodeURIComponent(k), decodeURIComponent(v || '')];
    })
  );
}

3. 安全HTML插入

function safeHTML(strings, ...values) {
  return strings.reduce((acc, str, i) => {
    let value = values[i] || '';
    if (typeof value === 'string') {
      value = value.replace(/&/g, '&')
                   .replace(//g, '>');
    }
    return acc + str + value;
  }, '');
}

七、注意事项

  1. 编码陷阱
''.length; // 2(代理对字符)
[...''].length; // 4(组合emoji)
  1. 正则性能
// 避免在循环中重复创建正则
const regex = /test/g; // 预先编译
while((match = regex.exec(str)) !== null) {
  // 处理匹配
}
  1. 换行符统一
function normalizeNewlines(str) {
  return str.replace(/\r\n?/g, '\n');
}
  1. 多语言处理
'?'.localeCompare('z', 'de'); // 德语排序返回负数
'?'.localeCompare('z', 'sv'); // 瑞典语返回正数

八、ES2022+ 新特性

1..at()方法

'abc'.at(-1); // 'c'

2. 正则匹配索引

const match = 'abc'.match(/b/d);
console.log(match.indices[0]); // [1, 2]

3..replaceAll()方法

'a-b-c'.replaceAll('-', ' '); // "a b c"

本文涵盖了从基础操作到高级技巧的完整字符串处理方法,结合最新ES规范,适用于现代JavaScript开发的各种场景。建议根据具体需求选择合适的方法,并注意处理Unicode和多语言环境下的特殊情况。

相关推荐

MySQL修改密码_mysql怎么改密码忘了怎么办

拥有原来的用户名账户的密码mysqladmin-uroot-ppassword"test123"Enterpassword:【输入原来的密码】忘记原来root密码第一...

数据库密码配置项都不加密?心也太大了吧!

先看一份典型的配置文件...省略...##配置MySQL数据库连接spring.datasource.driver-class-name=com.mysql.jdbc.Driverspr...

Linux基础知识_linux基础入门知识

系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...

MySQL密码重置_mysql密码重置教程

之前由于修改MySQL加密模式为mysql_native_password时操作失误,导致无法登陆MySQL数据库,后来摸索了一下,对MySQL数据库密码进行重置后顺利解决,步骤如下:1.先停止MyS...

Mysql8忘记密码/重置密码_mysql密码忘了怎么办?

Mysql8忘记密码/重置密码UBUNTU下Mysql8忘记密码/重置密码步骤如下:先说下大概步骤:修改配置文件,使得用空密码可以进入mysql。然后置当前root用户为空密码。再次修改配置文件,不能...

MySQL忘记密码怎么办?Windows环境下MySQL密码重置图文教程

有不少小白在使用Windows进行搭建主机的时候,安装了一些环境后,其中有MySQL设置后,然后不少马大哈忘记了MySQL的密码,导致在一些程序安装及配置的时候无法进行。这个时候怎么办呢?重置密码呗?...

10种常见的MySQL错误,你可中招?_mysql常见错误提示及解决方法

【51CTO.com快译】如果未能对MySQL8进行恰当的配置,您非但可能遇到无法顺利访问、或调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。本文列举了十种MySQL...

Mysql解压版安装过程_mysql解压版安装步骤

Mysql是目前软件开发中使用最多的关系型数据库,具体安装步骤如下:第一步:Mysql官网下载最新版(mysql解压版(mysql-5.7.17-winx64)),Mysql官方下载地址为:https...

MySQL Root密码重置指南:Windows新手友好教程

如果你忘记了MySQLroot密码,请按照以下简单步骤进行重置。你需要准备的工具:已安装的MySQL以管理员身份访问命令提示符一点复制粘贴的能力分步操作指南1.创建密码重置文件以管理员...

安卓手机基于python3搜索引擎_python调用安卓so库

环境:安卓手机手机品牌:vivox9s4G运行内存手机软件:utermux环境安装:1.java环境的安装2.redis环境的安装aptinstallredis3.elasticsearch环...

Python 包管理 3 - poetry_python community包

Poetry是一款现代化的Python依赖管理和打包工具。它通过一个pyproject.toml文件来统一管理你的项目依赖、配置和元数据,并用一个poetry.lock文件来锁定所有依赖的精...

Python web在线服务生产环境真实部署方案,可直接用

各位志同道合的朋友大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近经...

官方玩梗:Python 3.14(πthon)稳定版发布,正式支持自由线程

IT之家10月7日消息,当地时间10月7日,Python软件基金会宣布Python3.14.0正式发布,也就是用户期待已久的圆周率(约3.14)版本,再加上谐音梗可戏称为π...

第一篇:如何使用 uv 创建 Python 虚拟环境

想象一下,你有一个使用Python3.10的后端应用程序,系统全局安装了a2.1、b2.2和c2.3这些包。一切运行正常,直到你开始一个新项目,它也使用Python3.10,但需要...

我用 Python 写了个自动整理下载目录的工具

经常用电脑的一定会遇到这种情况:每天我们都在从浏览器、微信、钉钉里下各种文件,什么截图、合同、安装包、临时文档,全都堆在下载文件夹里。起初还想着“过两天再整理”,结果一放就是好几年。结果某天想找一个发...