- String.raw()
-
转义字符串中的斜杠,在每个斜杠之前再加一个斜杠
- console.log(String.raw`Hi\n${2+3}!`);
-
实际返回 “Hi\n5!”,显示的是转义后的结果 “Hi\n5!”,如果不使用该方法的话在控制台上会显示这样:
Hi
5!
原因是其中的**\n**未转义,在输出的过程中,被识别为了换行符,但是经过该方法将斜杠转义之后,就可以打印出来。
- console.log(String.raw`Hi\\n`);
-
实际返回 “Hi\\n”,显示Hi\n,即如果字符串中有多个斜杠,那么每个斜杠都会进行一次转义。
2.
- codePointAt()
-
JS内部,字符以UTF-16的格式储存,每个字符串为2个字节,对于需要4个字符串储存的字符,JS会认为是两个字符,codePointAt()方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点。
传统的charAt()是无法识别四个字节的字符,举个例子,"𠮷"的码点0x20BB7,UTF-16编码是0xD842 0xDFB7,十进制是55362 :
- var s = "𠮷";
- console.log(s.length);//2
- console.log(s.charAt());//�
- console.log(s.charAt(0));//�
- console.log(s.charAt(1));//�
-
后面的在webstorm控制台上的输出结果,但实际上,由于charAt()无法读取到整个字符,输出应该为空。下面试试新方法:
- console.log(s.charCodeAt(0));//55362
- console.log(s.charCodeAt(1));//57271
-
该方法将"𠮷"分解为了两个2字节的字符,然后根据序号分别将其返回码点。
3.
- codePointAt()
-
与charCodeAt()方法显示,可以处理4个字节储存的字符,正确返回 32 位的 UTF-16 字符的码点。对于那些两个字节储存的常规字符,它的返回结果与charCodeAt()方法相同,看一个例子:
- let s = '𠮷a';
- console.log(s.charCodeAt(0));//55362
- console.log(s.codePointAt(0));//134071识别到了𠮷
- console.log(s.charCodeAt(1));//57271
- console.log(s.codePointAt(1));//57271识别到了𠮷中后两个字节,
- console.log(s.charCodeAt(2));//97
- console.log(s.codePointAt(2));//97识别到了字符a,与charCodeAt相似
- console.log(s.codePointAt(0).toString(16));//对于 𠮷 16进制码点20bb7
-
可以看到该方法将字符串“𠮷a“分解为了三部分,第一部分是“𠮷”,第二部分是“𠮷”后面两个字节组成的字符,第三部分是“a”,但是为什么会出现这么诡异的分割呢,推测猜想可能是这样的,由于codePointAt()方法可以识别两个字节的字符,也可以识别四个的字符,但是它本身是并不知道该字符是两个字节还是四个字节,那么为了避免遗漏,只好从头开始遍历,每次只遍历两个字节的字符。
- normalize()
-
将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化
在JS中,JS中原字符串码点与组成子字符串之和并不相等,因为JS会把四个字节的字符识别为两个2字节的字符,举个例子:
- console.log('\u01D1'==='\u004F\u030C' );//false
- console.log('\u01D1');//Ǒ
- console.log('\u004F\u030C');//Ǒ
-
但是这两个的码点对应的字符一样的。使用该方法可以将其标准化,使其相等:
- console.log('\u01D1'.normalize() ==='\u004F\u030C'.normalize());//true
-
另外该方法自带四个参数:
NFC:标准化合成,返回多个字符串的合成字符,视觉和语义上的等价。
- console.log(`\u004F\u030C`.normalize('NFC').length);//1
- console.log(`\u004F\u030C`.normalize('NFC'));//Ǒ \u01D1
-
NFD:标准化分解,返回合成字符的多个字符串,视觉和语义上的等价。
- console.log('\u01D1'.normalize('NFD').length);//2
- console.log('\u01D1'.normalize('NFD'));//Ǒ \u004F\u030C
-
NFKC:语义上的合成
NFKD:语义上的分解
5.
- includes()
- startsWith()
- endsWith()
-
includes() 判断目标子字符串是否在原字符串中,是返回true,否则返回false
startsWith()判断目标子字符串是否在原字符串首部中,是从原字符串的第一个字符开始匹配
endsWith()判断目标子字符串是否在原字符串尾部中,是从原字符串的最后一个字符开始匹配
该类方法还支持从原字符串开始查找的序号输入,使得startsWith()
endsWith()不再拘泥于首部和尾部开始匹配,值得注意的是,endsWith()方法的查找序号不能在目标子字符串中的序号组中
- let s = 'Hello, world!';
- console.log(s.startsWith('Hello'));//true 字符串是否在原字符串头部
- console.log(s.startsWith('He'));
- console.log(s.startsWith('e'));//false
- console.log(s.startsWith('Hello', 0));//支持查找开始的序号
- console.log(s.startsWith('Hello', 1));//false
- console.log(s.endsWith('!'));//true 参数字符串是否在原字符串尾部
- console.log(s.endsWith('Hello', 5));//true 注意是从字符串后的序号开始
- console.log(s.includes('o'));//参数字符串时候在原字符串中
- console.log(s.includes('Hello', 0));//与startsWith相似
-
- repeat()
-
将目标字符串重复n次,n是传入的参数,合成新的字符串并打印
- console.log('s'.repeat(3));//sss 重复三次
- console.log('o'.repeat(0));//""
-
该方法还可以进行参数四舍五入,如果是输入的字符,还可以将其转化为数字。
- console.log('na'.repeat(2.9));//nanana
- console.log('na'.repeat(2.1));//四舍五入nana
- console.log('na'.repeat("2"));//进行字符串处理
-
如果n是负数的话,是会报错的:
- console.log('na'.repeat(Infinity));//无穷报错
- console.log('na'.repeat(-1));//负数报错
-
但是如果是**-1~0** 之间的负数,那么就会遵守四舍五入原则,视为0
- console.log('na'.repeat(-0.9));//取整为0
- console.log('na'.repeat(NaN));//视为0
-
- padStart()
- padEnd()
-
根据输入的指定长度,以替补字符串弥补,padStart()是在首部弥补,padEnd()是在尾部弥补
- console.log('x'.padStart(5, "ad"));//adadx 头部进行补全,ad作为补全字符,x作为原字符
-
一般会有这几种情况,以padStart()为例:
指定长度小于等于原字符串长度,会返回原字符串
- console.log('abcdefg'.padStart(5, "a"));//abcdefg
-
指定长度大于原字符串+替补字符串:
- console.log('x'.padStart(5, "ad"));//adadx 头部进行补全,ad作为补全字符,x作为原字符
-
指定长度大于原字符串长度,小于原字符串+弥补字符串长度:
- console.log('x'.padStart(3,"abcdef"));//abx
-
弥补字符串是空:
- console.log('abc'.padStart(10));// abc,空格补全
-
- trim()
- trimStart()
- trimEnd()
-
trimStart()消除字符串首部空格,trimEnd()消除字符串尾部空格,trim()消除字符串首部和尾部空格
- const s = ' abc ';
- console.log(s.trim());//abc 去除空格
- console.log(s.trimStart());//"abc "去除头部空格
- console.log(s.trimLeft());//"abc "去除头部空格
- console.log(s.trimEnd());//" abc"去除尾部空格
- console.log(s.trimRight());//" abc"去除尾部空格
- console.log(s.trim('a'));//abc 只能用于去除空格,传参无用但不报错
-
需要注意的是trim()只是消除的字符串从头部和尾部开始,相连的空格,并不能中间的空格。
- const x = ' a bc ';
- console.log(s.trim());//a bc
-