javascript中字符串的常用方法有哪些?【教程】
发布时间 - 2026-01-30 00:00:00 点击率:次安全取子串用slice(),判断包含用includes(),全局替换用replaceAll()或replace(/g),拆分字符串优先用[...str]而非split("")。
JavaScript 字符串本身是原始类型,但调用方法时会自动包装为 String 对象,所以能用一堆方法——但不是所有都该常用,有些已过时,有些性能差,有些在特定场景下会出人意料。
如何安全地取子串:优先用 slice(),别碰 substr()
substr() 已被标记为废弃(MDN 明确标注 deprecated),且第二个参数是“长度”而非“结束索引”,容易和 substring() 混淆。而 slice() 支持负数索引、语义清晰、兼容性好。
-
"hello".slice(1, 4)→"ell"(左闭右开) -
"hello".slice(-3)→"llo"(从末尾倒数) -
"hello".substring(1, 4)也能得到"ell",但它会自动交换参数顺序(substring(4, 1)结果一样),有时反而掩盖逻辑错误 -
"hello".substr(1, 3)虽然结果相同,但 Chrome 控制台会警告,TypeScript 类型库也不包含它
判断是否包含子串:用 includes(),别再写 indexOf() !== -1
includes() 是 ES2015 加入的,语义直接、返回布尔值,可读性高,还支持第二个参数指定起始位置。
-
"javascript".includes("script")→true -
"abc".includes("b", 2)→false(从索引 2 开始找,跳过了"b") -
indexOf(还得加判断,多写且易错:
)
str.indexOf("x") >= 0或!== -1都不如includes()直观 - 注意:
includes()区分大小写;如需忽略大小写,先转小写:str.toLowerCase().includes(target.toLowerCase())
替换内容时小心默认行为:replace() 只换第一个,要全局得用正则
replace() 默认只替换第一个匹配项,哪怕传入字符串字面量——这点常被忽略,导致 bug 难定位。
-
"a a a".replace("a", "x")→"x a a"(不是全部) - 想全替换,必须用正则并加
g标志:"a a a".replace(/a/g, "x")→"x x x" - 如果替换内容来自变量,记得转义正则特殊字符(如
.、$、/),否则可能报错或行为异常;简单方案是用replaceAll()(ES2025+):"a.a.a".replaceAll(".", "x")→"axaxa" -
replaceAll()不支持正则捕获组,有复杂逻辑还得回退到replace()+ 正则
拆分和拼接字符串:split() 和 join() 是搭档,但空字符串拆分要留神
split("") 看似能把字符串变数组,但遇到 Unicode 组合字符(如带声调的汉字、emoji)会出问题;现代代码更推荐 [...str] 或 Array.from(str)。
-
"café".split("")→["c", "a", "f", "é"](多数情况 OK,但"??".split("")会拆成多个代理对,显示为乱码片段) -
[..."??"]→["??"](正确识别组合 emoji) -
join()没陷阱,但注意它只作用于字符串数组;若数组含数字或undefined,会自动转字符串:["a", 1, undefined].join("-")→"a-1-" -
split()的分隔符为空字符串时,ECMAScript 规定会返回空数组("".split("")→[]),不是[""],这点常被误判
真正难的不是记方法名,而是知道哪个方法在边界条件下依然可靠——比如处理用户输入的 emoji、国际化文本,或者在循环里高频调用时的性能表现。这些细节不写进文档,但一出问题就卡半天。
# javascript
# java
# typescript
# 字符串数组
# chrome
# ecmascript
# String
# Array
# 字符串
# 循环
# 堆
# undefined
# 对象
# bug
# 第一个
# 第二个
# 还得
# 而非
# 也不
# 多个
# 也能
# 已被
# 半天
# 不支持
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用Intervention Image库处理图片上传和缩放
java中使用zxing批量生成二维码立牌
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
如何彻底卸载建站之星软件?
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel如何生成URL和重定向?(路由助手函数)
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
如何在IIS服务器上快速部署高效网站?
iOS正则表达式验证手机号、邮箱、身份证号等
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何基于云服务器快速搭建网站及云盘系统?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel怎么上传文件_Laravel图片上传及存储配置
JavaScript如何操作视频_媒体API怎么控制播放
零服务器AI建站解决方案:快速部署与云端平台低成本实践
网站制作企业,网站的banner和导航栏是指什么?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
iOS中将个别页面强制横屏其他页面竖屏
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
详解Android图表 MPAndroidChart折线图
C++时间戳转换成日期时间的步骤和示例代码
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
如何在云虚拟主机上快速搭建个人网站?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
JavaScript中的标签模板是什么_它如何扩展字符串功能


