toLowerCase() 方法可将字符串转化为小写, toUpperCase() 方法可将字符串转化为大写。 toLocaleLowerCase() 和 toLocaleUpperCase() 方法是本地化原型,它们能够按照本地的方式进行转化大、小写字母,由于只有极个别(如土耳其语)具有本地特有的大、小写映射,所以通常与 toLowerCase() 和 toUpperCase() 返回的值一样。
var s = 'JavaScript';
alert(s.toUpperCase()); // JAVASCRIPT;
javascript 能够根据字符的 Unicode 编码大小就行比较字符串 。
使用字符串的 localeCompare() 方法,可以根据本地约定的顺序进行比较两个字符串的大小。 localeCompare ()方法包括一个参数,指定要比较的目标字符串,如果当前字符串小于要比较的字符串,则但会小于 0 的数;如果大于参数字符串,返回大于 0 的数。如果相等,或根据本地排序约定没有区别,则返回 0 。
alert('a' > 'A'); // true
如果为 localeCompare() 方法指定的字符小于参数字符,则 localeCompare() 返回小于 0 的数,如果为该方法指定的字符大于参数字符,则返回大于 0 的数,如果两个字符串相等,或根据本地排序规则没有区别,则返回 0 。对于一般的计算机来说,默认的排序约定都是按照字符编码来实现的。
var s = 'JavaScript';
var a = s.split('');
var s1 = a.sort(function (a, b) {
return a.localeCompare(b);
});
a = s1.join('');
alert(a); // "aaciJprStv"
使用字符串的 split() 方法可以根据指定的分隔符将字符串转化为数组。
如果使用数组的 join() 方法,可以把数组链接为支付串。
split() 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回。在 oString 中每个出现 separator 的位置都要进行分解,但 separator 本身不作为任何数组元素的部分返回。其语法格式如下:
oString.split([separator[,limit]])
参数 separator 是可选项,值是一个字符串或者正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
参数 limit 也是可选项,参数值是整数,用来限制返回数组中的元素个数。
例如下面的代码,将使用空白分割字符串:
var oString = 'ECMAScript version 5.0 provides many new features.';
var RegExp = /\s/g; // 定义正则表达式模式文字 , 这里是匹配空白
var oArray = oString.split(re); // 用空白分割字符串
// 写出结果
//"ECMAScript,version,5.0,provides,many,new,features."
console.log(oArray.toString());
这将会返回如下的结果:
ECMAScript,version,5.0,provides,many,new,features.
如果将前面的 split 应用改为如下的代码:
// 用空白分割字符串,但仅返回前 5 个结果
var oArray = oString.split(re, 5);
将会返回如下的结果:
ECMAScript, version, 5.0, provides, many;
参数为空字符串
var s = 'JavaScript';
var a = s.split('');
alert(s.length); // 10
alert(a.length); // 10
参数为空
var s = 'JavaScript';
var a = s.split();
alert(s.length); // 10
alert(a.length); // 1
参数为正则表达式
var s = 'a2b3c4d5e678f12gt';
var a = s.split(/\d+/);
alert(a); // "a,b,c,d,e,f,gt"
alert(a.length); // 7
设置第二参数,且小于截取后结果长度
var s = 'JavaScript';
var a = s.split('', 4);
alert(s.length); // 10
alert(a.length); // 4
alert(a); // J,a,v,a
清空两侧空字符
trim() 为新增的原型方法,用于清空前导空字符、尾随空字符和行终止符。
toString() 方法将一个数字作为字符串返回 .toString() 方法可以可选地接受一个参数(这是 2 和 36 之间的一个整数),将其作为数制的基数值使用。随后,字符串转换过程也会基于这个基数来转换数字。
toFixed() 方法也返回一个字符串,但数字是按照指定的小数位数的形式出现的。
toExponential() 方法数字将会进行舍入并且用指数表示法来表示。传递给该方法的参数指定了转换之后小数点后面的字符数字。
方法 | 使用 | 描述 |
---|---|---|
concat | str1.concat(str2); | 连接字符串 |
indexOf | str1.indexOf(k) | 返回指定值在字符串出现的第一个位置 |
lastIndexOf | 返回指定值在字符串出现的最后的位置 | |
replace | 在一个字符串里搜索指定的字符串 , 并且新的字符串代替 | |
split | 把字符串分解成一系列子串 , 保存在数组里 ; 返回一个新数组 | |
substr | 从指定位置 , 提取指定数量的字符组成字符串 | |
toLowerCase | 把字符串转化成小写 | |
toUpperCase | 把字符串转化成大写字符 |
在 JavaScript 中,字符串是不可变的( immutable ),换句话说,不能修改它们。所做的这一切,都是基于已有字符串的副本来生成一个新的字符串。不可变性不仅适用于字符串, JavaScript 中的数字也是不可变的。
使用字符串的加号运算符,或是运用 字符串的 concat() 方法将多个参数添加到指定字符串的结尾。在特定的操作环境,也可以借助 join() 方法链接字符串。
var s1 = 'abc';
var s2 = 'def';
alert(s1 + s2); // "abcdef"
也可以使用 concat() 方法进行连接:
var s1 = 'abc';
var s2 = s1.concat('d', 'e', 'f');
alert(s2); // "abcdef"
在实际开发中,建议直接使用加号进行连接。当操作的字符串容量较大时,如 HTML 字符串输出,还可以考虑使用数组来实现。
var s = 'JavaScript',
a = [];
var d = new Date(),
b = d.getMilliseconds();
for (var i = 0; i < 10000; i++) {
a.push(s);
}
var str = a.join('');
a = null;
var d = new Date(),
c = d.getMilliseconds();
alert(c - b); // 1
另外,还要注意字符串文字和 String 对象的比较问题,可以参考前面关于全等运算符的介绍。
方法 | 嗯 |
---|---|
charAt() | 返回字符串中指定索引位置处第一个字符 |
charCodeAt() | 返回给定索引号处的 Unicode 代码点值,该值介于 0-65535 之间的整数。该方法是 formCodeAt() 的相反方法, |
concat() | 组合两个字符串文本,并返回新的字符串 |
fromCodeAt() | 返回一个由参数指定的 Unicode 代码点值代表的字符 |
indexOf() | 查找字符串并返回参数中指定的索引,如果出现多次,则返回第一次出现位置,若未找到,返回 -1 |
lastIndexOf() | 返回子字符串在字符串中指定开始位置前最后一次出现索引的位置,如果找不到返回 -1 |
localeCompare() | 比较两个或更多字符串的排列顺序,并返回整数形式的结果 |
slice() | 提取字符串中一部分,并作为新字符串返回 |
split() | 通过把字符串分割成子字符串,把字符串对象分割成子字符串组成的数组 |
substring() | 返回参数中指定两个索引值之间的字符串 |
toJSON() | 序列转化为 JSON 格式字符串返回,等同于 JSON.stringify() 方法 |
toString() | 返回 Strong 对象的初始值 |
trim() | 删除字符串两端的空白 |
valueOf() | 返回字符串的初始值 |
除了这些方法外, String 类还有一个属性,虽然只有一个,但是非常重要,这就是 length 属性,该属性用来返回字符串中字符的数量(中文字符虽然是双字节,也算是一个单字符)。
ECMAScript 6 增加了 3 个用于判断字符串中是否包含另一个字符串的方法: startsWith() 、 endsWith() 和 includes() 。这些方法都会从字符串中搜索传入的字符串,并返回一个表示是否包含 的布尔值。它们的区别在于, startsWith() 检查开始于索引 0 的匹配项, endsWith() 检查开始于索 引 (string.length - substring.length) 的匹配项,而 includes() 检查整个字符串 .
let message = 'foobarbaz';
console.log(message.startsWith('foo')); // true
console.log(message.startsWith('bar')); // false;
console.log(message.endsWith('baz')); // true
console.log(message.endsWith('bar')); // false
console.log(message.includes('bar')); // true
console.log(message.includes('qux')); // false
startsWith() 和 includes() 方法接收可选的第二个参数,表示开始搜索的位置。如果传入第二 个参数,则意味着这两个方法会从指定位置向着字符串末尾搜索,忽略该位置之前的所有字符。
ECMAScript 在所有字符串上都提供了 repeat() 方法。这个方法接收一个整数参数,表示要将字 符串复制多少次,然后返回拼接所有副本后的结果。
let stringValue = 'ni ';
// ni ni ni ni ni ni ni ni ni ni ni ni ni ni ni ni are pig;
console.log(stringValue.repeat(16) + 'are pig');
padStart() 和 padEnd() 方法会复制字符串,如果小于指定长度,则在相应一边填充字符,直至 满足长度条件。这两个方法的第一个参数是长度,第二个参数是可选的填充字符串,默认为空格 ( U+0020 )。
let stringValue = 'pig';
console.log(stringValue.padStart(6)); // "pig"
console.log(stringValue.padStart(9, '.')); // "......pig"
console.log(stringValue.padEnd(6)); // "pig"
console.log(stringValue.padEnd(9, '.')); // "pig......"
字符串的原型上暴露了一个 @@iterator 方法,表示可以迭代字符串的每个字符。可以像下面这样 手动使用迭代器。
let message = 'abc';
let stringIterator = message[Symbol.iterator]();
console.log(stringIterator.next()); // {value: "a", done: false}
console.log(stringIterator.next()); // {value: "b", done: false}
console.log(stringIterator.next()); // {value: "c", done: false}
console.log(stringIterator.next()); // {value: undefined, done: true}
// 在 for-of 循环中可以通过这个迭代器按序访问每个字符:
for (const c of 'abcde') {
console.log(c);
} // a
// b // c // d // e
通过 eval() 定义的任何变量和函数都不会被提升,这是因为在解析代码的时候,它们是被包含在 一个字符串中的。它们只是在 eval() 执行的时候才会被创建。