|
| 1 | +## 概述 |
| 2 | +字符串操作是JavaScript编程中极其重要且频繁使用的技能。本文全面整理了字符串的属性和方法,旨在帮助开发者系统掌握相关技术。 |
| 3 | + |
| 4 | +## String对象属性 |
| 5 | + |
| 6 | +### length属性 |
| 7 | +获取字符串的长度,中文字符每个汉字代表一个字符。 |
| 8 | + |
| 9 | +```javascript |
| 10 | +var str = 'abc'; |
| 11 | +console.log(str.length); // 返回3 |
| 12 | +``` |
| 13 | + |
| 14 | +### prototype属性 |
| 15 | +用于扩展String对象的方法,所有实例共享。 |
| 16 | + |
| 17 | +```javascript |
| 18 | +// 添加去除两边空格的方法 |
| 19 | +String.prototype.trim = function(){ |
| 20 | + return this.replace(/^\s*|\s*$/g, ''); |
| 21 | +} |
| 22 | +``` |
| 23 | + |
| 24 | +## String对象方法 |
| 25 | + |
| 26 | +### 一、字符获取类方法 |
| 27 | + |
| 28 | +#### 1. charAt(index) |
| 29 | +获取指定索引位置的字符。 |
| 30 | + |
| 31 | +```javascript |
| 32 | +var str = 'abcde'; |
| 33 | +console.log(str.charAt(2)); // 返回 'c' |
| 34 | +console.log(str.charAt(8)); // 返回空字符串 |
| 35 | +``` |
| 36 | + |
| 37 | +#### 2. charCodeAt(index) |
| 38 | +返回指定位置字符的Unicode编码。 |
| 39 | + |
| 40 | +```javascript |
| 41 | +var str = 'abcde'; |
| 42 | +console.log(str.charCodeAt(0)); // 返回 97 |
| 43 | +``` |
| 44 | + |
| 45 | +#### 3. String.fromCharCode(numX,...) |
| 46 | +静态方法,将Unicode编码转换为字符。 |
| 47 | + |
| 48 | +```javascript |
| 49 | +console.log(String.fromCharCode(97, 98, 99)); // 返回 'abc' |
| 50 | +``` |
| 51 | + |
| 52 | +### 二、查找类方法 |
| 53 | + |
| 54 | +#### 4. indexOf(searchvalue, fromindex) |
| 55 | +返回子字符串首次出现的位置,未找到返回-1。 |
| 56 | + |
| 57 | +```javascript |
| 58 | +var str = 'abcdeabcde'; |
| 59 | +console.log(str.indexOf('a')); // 返回 0 |
| 60 | +console.log(str.indexOf('a', 3)); // 返回 5 |
| 61 | +console.log(str.indexOf('bc')); // 返回 1 |
| 62 | +``` |
| 63 | + |
| 64 | +#### 5. lastIndexOf(searchvalue, fromindex) |
| 65 | +从后向前搜索,返回子字符串最后出现的位置。 |
| 66 | + |
| 67 | +```javascript |
| 68 | +var str = 'abcdeabcde'; |
| 69 | +console.log(str.lastIndexOf('a')); // 返回 5 |
| 70 | +console.log(str.lastIndexOf('a', 3)); // 返回 0 |
| 71 | +console.log(str.lastIndexOf('bc')); // 返回 6 |
| 72 | +``` |
| 73 | + |
| 74 | +#### 6. search(substr/regexp) |
| 75 | +检索与子字符串或正则表达式匹配的位置。 |
| 76 | + |
| 77 | +```javascript |
| 78 | +var str = 'abcDEF'; |
| 79 | +console.log(str.search('c')); // 返回 2 |
| 80 | +console.log(str.search('d')); // 返回 -1 |
| 81 | +console.log(str.search(/d/i)); // 返回 3 |
| 82 | +``` |
| 83 | + |
| 84 | +#### 7. match(substr/regexp) |
| 85 | +检索匹配的子字符串。 |
| 86 | + |
| 87 | +```javascript |
| 88 | +var str = '1a2b3c4d5e'; |
| 89 | +// 非全局匹配 |
| 90 | +console.log(str.match('b')); // 返回 ["b", index: 3, input: "1a2b3c4d5e"] |
| 91 | +// 全局匹配 |
| 92 | +console.log(str.match(/\d/g)); // 返回 ["1", "2", "3", "4", "5"] |
| 93 | +``` |
| 94 | + |
| 95 | +### 三、截取类方法 |
| 96 | + |
| 97 | +#### 8. substring(start, end) |
| 98 | +截取开始到结束位置之间的字符串(参数不能为负值)。 |
| 99 | + |
| 100 | +```javascript |
| 101 | +var str = 'abcdefg'; |
| 102 | +console.log(str.substring(1, 4)); // 返回 'bcd' |
| 103 | +console.log(str.substring(1)); // 返回 'bcdefg' |
| 104 | +console.log(str.substring(-1)); // 返回 'abcdefg'(负值视为0) |
| 105 | +``` |
| 106 | + |
| 107 | +#### 9. slice(start, end) |
| 108 | +与substring类似,但参数可以为负值。 |
| 109 | + |
| 110 | +```javascript |
| 111 | +var str = 'abcdefg'; |
| 112 | +console.log(str.slice(1, 4)); // 返回 'bcd' |
| 113 | +console.log(str.slice(-3, -1)); // 返回 'ef' |
| 114 | +console.log(str.slice(1, -1)); // 返回 'bcdef' |
| 115 | +``` |
| 116 | + |
| 117 | +#### 10. substr(start, length) |
| 118 | +从指定位置开始截取指定长度的字符串。 |
| 119 | + |
| 120 | +```javascript |
| 121 | +var str = 'abcdefg'; |
| 122 | +console.log(str.substr(1, 3)); // 返回 'bcd' |
| 123 | +console.log(str.substr(2)); // 返回 'cdefg' |
| 124 | +console.log(str.substr(-2, 4)); // 返回 'fg' |
| 125 | +``` |
| 126 | + |
| 127 | +### 四、替换与分割类方法 |
| 128 | + |
| 129 | +#### 11. replace(regexp/substr, replacement) |
| 130 | +字符串替换操作。 |
| 131 | + |
| 132 | +```javascript |
| 133 | +var str = 'abcdeabcde'; |
| 134 | +// 单次替换 |
| 135 | +console.log(str.replace('a', 'A')); // 返回 'Abcdeabcde' |
| 136 | +// 全局替换 |
| 137 | +console.log(str.replace(/a/g, 'A')); // 返回 'AbcdeAbcde' |
| 138 | +// 正则替换(忽略大小写) |
| 139 | +console.log(str.replace(/a/gi, '$')); // 返回 '$bcde$bcde' |
| 140 | +``` |
| 141 | + |
| 142 | +#### 12. split(separator, howmany) |
| 143 | +将字符串分割为数组。 |
| 144 | + |
| 145 | +```javascript |
| 146 | +var str = 'a|b|c|d|e'; |
| 147 | +console.log(str.split('|')); // 返回 ["a", "b", "c", "d", "e"] |
| 148 | +console.log(str.split('|', 3)); // 返回 ["a", "b", "c"] |
| 149 | +// 使用正则分割 |
| 150 | +var str2 = 'a1b2c3d4e'; |
| 151 | +console.log(str2.split(/\d/)); // 返回 ["a", "b", "c", "d", "e"] |
| 152 | +``` |
| 153 | + |
| 154 | +### 五、大小写转换类方法 |
| 155 | + |
| 156 | +#### 13. toLowerCase() |
| 157 | +转换为小写字母。 |
| 158 | + |
| 159 | +```javascript |
| 160 | +var str = 'JavaScript'; |
| 161 | +console.log(str.toLowerCase()); // 返回 'javascript' |
| 162 | +``` |
| 163 | + |
| 164 | +#### 14. toUpperCase() |
| 165 | +转换为大写字母。 |
| 166 | + |
| 167 | +```javascript |
| 168 | +var str = 'JavaScript'; |
| 169 | +console.log(str.toUpperCase()); // 返回 'JAVASCRIPT' |
| 170 | +``` |
| 171 | + |
| 172 | +## 常用技巧与最佳实践 |
| 173 | + |
| 174 | +### 1. 字符串连接 |
| 175 | +```javascript |
| 176 | +// 使用模板字符串(推荐) |
| 177 | +const name = '张三'; |
| 178 | +const greeting = `你好,${name}!`; |
| 179 | + |
| 180 | +// 使用加号操作符 |
| 181 | +const fullName = '张' + '三'; |
| 182 | +``` |
| 183 | + |
| 184 | +### 2. 去除空格 |
| 185 | +```javascript |
| 186 | +const str = ' Hello World '; |
| 187 | +console.log(str.trim()); // 'Hello World' |
| 188 | +console.log(str.trimStart()); // 'Hello World ' |
| 189 | +console.log(str.trimEnd()); // ' Hello World' |
| 190 | +``` |
| 191 | + |
| 192 | +### 3. 判断字符串包含 |
| 193 | +```javascript |
| 194 | +const str = 'Hello World'; |
| 195 | +console.log(str.includes('World')); // true |
| 196 | +console.log(str.startsWith('Hello')); // true |
| 197 | +console.log(str.endsWith('World')); // true |
| 198 | +``` |
| 199 | + |
| 200 | +### 4. 重复字符串 |
| 201 | +```javascript |
| 202 | +console.log('abc'.repeat(3)); // 'abcabcabc' |
| 203 | +``` |
| 204 | + |
| 205 | +## 性能注意事项 |
| 206 | + |
| 207 | +1. **字符串拼接**:大量字符串拼接时,建议使用数组的join()方法替代加号操作符 |
| 208 | +2. **正则表达式**:重复使用的正则表达式建议预编译,避免重复创建 |
| 209 | +3. **字符串不变性**:字符串一旦创建不可更改,所有修改操作都会返回新字符串 |
| 210 | + |
| 211 | +## 总结 |
| 212 | + |
| 213 | +掌握字符串操作是JavaScript开发的基本功。建议结合实际项目多加练习,形成肌肉记忆。定期回顾本文内容,能够帮助巩固知识点,提高开发效率。 |
0 commit comments