JavaScript Strings
JS String 是一系列 Unicode 字符,用单引号或双引号限制起来的 immutable UTF-16 code units。
每一个代码单元由一个 16-bit 数字表示。每一个 Unicode 字符由1到2个代码单元表示。
反斜杠
使用反斜杠输出特殊字符 backslash escape character turns special characters into string characters。
Strings Can be Objects
创建 String 变量的方法有:
var x = "John";
var y = new String("John");
最好不要用后者,减缓执行速度。且 x === y
是 false 的,因为后者的 type 是 object。 JavaScript objects cannot be compared。两者无法比较。
前者创建的是 primitive values,但是 in JavaScript, methods and properties are also available to primitive values.
属性
length 是 String 自带属性。除此之外还有 constructor 和 prototype 两个属性。
方法
Find 查找
indexOf(
searchvalue, start)
,返回 index of (the position of) the first occurrence(第一次出现的位置) of a specified text in a string。lastIndexOf(
searchvalue, start)
,返回一个字符串中指定文本 last occurrence (最后一次出现的位置),以 start 位置开始,从字符串的后面向前查找。-
search(
searchvalue)
,效果同indexOf()
。因为字符串可以被自动转成一个正则表达式。
search()
的 searchvalue 是一个正则表达式,所以它比indexOf()
有更强大的搜索能力。
1.字符串开始位置的索引为 0.
2.如果没有找到指定文本,则返回 -1
。
3.前两者 searchvalue 是一个字符串,start 默认是 0,表示开始查找的位置,该参数是可选的。
includes(searchString[, fromIndex])
,用来判断一个字符串里是否含有另一个字符串,有则返回 true,无则返回 false。默认从 0 索引开始查。
Extract 抽取
slice(
start, end)
,从 start 位置(包含 start 位的字符),到 end 位置(但不包含 end 位的字符)截取一段字符放置到新的字符串中。缺省 end,则认为一直到 end of the string。位置取值负数,表示从末尾开始。substring(
start, end)
,同上。但不接受负数。如果 start 小于0,则认为从 0 开始。如果 “start” is greater than “end”, this method will swap the two arguments 交换开始和结束位置参数, meaning str.substring(1,4) == str.substring(4,1).-
substr(
start, length)
,同slice()
,start 位置可取负值。但此处第二个参数表示长度,因此不能为负数。"hello world".substr(-4, 4); // 表示从倒数第四位开始,向后取四位字符,返回"orld"
以上三个方法的共同点是缺省第二个参数,the method will slice out the rest of the string。
charAt(
position)
,返回指定位置上的字符charCodeAt(
position)
,返回指定位置上字符的 UTF-16 代码单元值的数字;如果索引超出范围,则返回 NaN
注意:Accessing a String as an Array is Unsafe!不要使用数组形式接近一个字符串。
Replace 替换
replace(
regexp|substr, newSubstr|function)
,返回一个新字符串,其中第一个匹配项(或全部匹配项)被替换为 newvalue,不改变原 string。
var str = "Mr Blue has a blue house and a blue car";
var res = str.replace(/blue|house|car/gi, function myFunction(x){return x.toUpperCase();});
结果为 Mr BLUE has a BLUE HOUSE and a BLUE CAR.
默认只替换找到的第一个匹配。希望全部替换,使用 regular expression 作为搜索项。
没找到 match 则返回原 string。
字符大小写转换
使用 toUpperCase()
,toLowerCase()
方法。
Concate 拼接
使用 concat()
连接两个或多个字符串,效果同使用连接操作符 +
。
var text = "Hello" + " " + "World!";
var text = "Hello".concat(" ","World!");
所有字符串的方法将返回一个新的字符串,而不改变 original 字符串。
根据 Unicode 输出对应字符
使用字符串对象的静态方法 String.fromCharCode(num1, ..., numN)
,其中参数是一组序列数字,表示 Unicode 值。该方法返回一个字符串,而不是一个 String 对象。
Converting a String to an Array 字符串转成数组
使用 split(
separator, limit)
方法,把字符串转为数组。两个参数都是 optional 的。
- 前者可以是一个字符,也可以是 regular expression
- 缺省 separator,返回 an Array with only one item 整段字符串
- 后者表示 split 个数,比如转换的数组包含10个item,但我只想要前3个,则设 limit 为 3
按单个字符分割, including white-space 包括空格,如下:
var str = "How are you doing today?";
var res = str.split("");
Match 匹配
使用 match(
regexp)
方法查找指定字符。
如果 regexp 包含 g
标识,则方法返回 all matched 子字符串组成的数组;没有匹配项,返回 null
。
如果 regexp 不含 g
标识,则返回由第一个匹配项及它相关的 capturing groups、匹配项在字符串的索引、原始字符串,组成的数组。
下例将银行卡号以4个数字为一组展示:
"1005100510051005227".match(/.{1,4}/)
// ["1005", index: 0, input: "1005100510051005227"]
"1005100510051005227".match(/.{1,4}/g)
// ["1005", "1005", "1005", "1005", "227"]
下面举例从 url 读取指定名称的查询参数值:
function getQueryValue(queryName) {
var reg = new RegExp("(^|&)" + queryName + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) {
console.log(r)
return decodeURI(r[2]);
} else {
return null;
}
}
// console输出,数组2、3、4分别对应正则表达式()捕捉的未命名分组捕获的值
[
"&test=u8uouo&", // 完整匹配
"&", // 第1分组
"u8uouo", // 第2分组
"&", // 第3分组
index: 10,
input: "domain=123&test=u8uouo&today=1",
groups: undefined
]
trim 去空格
使用方法 trim()
,删除字符串首尾的空格. 返回一个新的字符串。
Whitespace in this context is all the whitespace characters (space, tab, no-break space, etc.) and all the line terminator characters (LF, CR, etc.
localeCompare 排序
判断两个字符串在 sort 顺序中的先后位置。
referenceStr.localeCompare(compareString[, locales[, options]])
返回负数表示,reference string 在 compare string 前面;正数表示reference string排在后面;0表示相等。
重复
使用 repeat()
方法,重复一个字符串 n 次。
"hello ".repeat(5); // "hello hello hello hello hello"