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中的标签模板是什么_它如何扩展字符串功能