JavaScript String
String(字符串)是 JavaScript 用来表示文本的数据类型,也是日常开发中出现频率最高的类型。字符串本身是原始值,但 JS 为它配套了 String 包装对象和几十个内置方法,让我们能像操作对象一样查找、截取、转换文本。学完本节,表单校验、URL 拼接、文本格式化这些常见活儿都能轻松拿下。
原始字符串与 String 对象
同样写 "hello",字面量得到的是原始值,new String() 得到的却是对象,两者用 === 比较不相等:
let s1 = "hello"; // 原始字符串
let s2 = new String("hello"); // String 包装对象
console.log(typeof s1); // 输出:string
console.log(typeof s2); // 输出:object
console.log(s1 == s2); // 输出:true(值相等)
console.log(s1 === s2); // 输出:false(类型不同)
日常请直接用字面量或 String(值) 做转换,不必手动 new,否则容易踩坑。
访问字符与 length 长度
字符串可以像数组一样按索引取字符,length 属性给出字符总数:
let str = "你好,JS";
console.log(str.length); // 输出:5(中文按 1 个字符计)
console.log(str[0]); // 输出:你
console.log(str.charAt(1)); // 输出:好
console.log(str[str.length-1]); // 输出:S,取最后一个字符
console.log(str.at(-1)); // 输出:S,ES2022,负数从尾部数
注意:字符串下标从 0 开始;如果字符串含 emoji 等"代理对"字符,length 会按两个字符算,可用 Array.from(str).length 修正。
查找位置:indexOf / includes / startsWith
"找没找到、在哪个位置"是字符串最常用的判断,找不到统一返回 -1:
let msg = "hello world, hello js";
console.log(msg.indexOf("hello")); // 输出:0,首次出现的位置
console.log(msg.lastIndexOf("hello")); // 输出:13,最后一次出现的位置
console.log(msg.indexOf("hi")); // 输出:-1,找不到
console.log(msg.includes("world")); // 输出:true,ES6 起推荐
console.log(msg.startsWith("he")); // 输出:true
console.log(msg.endsWith("js")); // 输出:true
截取与替换:slice / replace
slice 取子串时"含头不含尾",支持负数从尾部计数;replace 默认只替换第一处:
let s = "abcdef";
console.log(s.slice(1, 3)); // 输出:bc
console.log(s.slice(2)); // 输出:cdef,省略结束位置则取到末尾
console.log(s.slice(-3)); // 输出:def,负数表示从尾部开始
console.log("a-b-c".replace("-", "+")); // 输出:a+b-c
console.log("a-b-c".replaceAll("-", "+")); // 输出:a+b+c
console.log("hello".replace("l", "L")); // 输出:heLlo
replace 的第一个参数也可以是正则表达式,如 /-/g 实现全局替换,功能更强大。
大小写、去空格与拆分拼接
处理用户输入前先 trim 掉首尾空格是标准套路;split 与 join 用来在字符串和数组之间互转:
let name = " Alice ";
console.log(name.trim()); // 输出:Alice
console.log("abc".toUpperCase()); // 输出:ABC
console.log("ABC".toLowerCase()); // 输出:abc
let arr = "苹果,香蕉,橘子".split(",");
console.log(arr); // 输出:[ '苹果', '香蕉', '橘子' ]
console.log(arr.join("、")); // 输出:苹果、香蕉、橘子
console.log("ha".repeat(3)); // 输出:hahaha
console.log("5".padStart(3, "0")); // 输出:005,编号补零常用
小结:字符串按索引访问、用 length 数长度;查找用 indexOf/includes,截取用 slice,清洗输入用 trim,批量替换用 replaceAll,结构转换靠 split/join;再多结合模板字符串,文本处理基本全覆盖。