当前位置: 首页 > 后端技术 > Node.js

节点v4-字符串扩展

时间:2023-04-04 00:36:55 Node.js

1。字符的Unicode符号JavaScript允许以\uxxxx的形式表示字符,其中“xxxx”表示字符的代码点。console.log("\u0061");//a但是,这种写法仅限于\u0000——\uFFFF之间的字符。超出此范围的字符必须用两种双字节形式表示。console.log("\uD842\uDFB7");//?console.log("\u20BB7");//?7上面代码表示如果值超过0xFFFF则直接跟"\u"(如\u20BB7),JavaScript会将其理解为“\u20BB+7”。由于\u20BB是不可打印的字符,因此只会显示一个空格后跟一个7。ES6对此进行了改进,只要将代码点括在大括号中,就可以正确解释该字符。console.log("\u{20BB7}");//?console.log("\u{41}\u{42}\u{43}");//ABCconsole.log('\u{1F680}'==='\uD83D\uDE80');//true在上面的代码中,最后一个例子表明大括号表示法相当于四字节的UTF-16编码。使用这种表示法,JavaScript有6种方式来表示一个字符。console.log('\z'==='z');//trueconsole.log('\172'==='z');//trueconsole.log('\x7A'==='z');//trueconsole.log('\u007A'==='z');//trueconsole.log('\u{7A}'==='z');//true2,codePointAt()bytescodePointAt方法可以正确处理存储在4个字节中的字符并返回字符的代码点。lets="?a";console.log(s.codePointAt(0));//134071console.log(s.codePointAt(1));//57271console.log(s.charCodeAt(2));//97codePointAt方法的参数是字符在字符串中的位置(从0开始)。在上面的代码中,JavaScript将“?a”视为三个字符,codePointAt方法正确识别了“?”。在第一个字符上,并返回其十进制代码点134071(即十六进制的20BB7)。在第二个字符(即“?”的最后两个字节)和第三个字符“a”上,codePointAt方法的结果与charCodeAt方法相同。简而言之,codePointAt方法将正确返回四字节UTF-16字符的代码点。对于存储在两个字节中的常规字符,它返回与charCodeAt方法相同的结果。codePointAt方法是测试一个字符是由两个字节还是四个字节组成的最简单方法。functionis32Bit(c){returnc.codePointAt(0)>0xFFFF;}console.log(is32Bit("?"));//trueconsole.log(is32Bit("a"));//false3,String.fromCodePoint()ES5提供了String.fromCharCode方法从码位返回对应的字符,但是该方法不能识别辅助平面的字符(数字大于0xFFFF)。String.fromCharCode(0x20BB7)//"?"上面代码中,String.fromCharCode不能识别大于0xFFFF的码位,所以0x20BB7溢出,最高位2被舍弃,最后返回码位U+对应的字符0BB7,而不是代码点U+20BB7对应的字符。ES6提供了String.fromCodePoint方法,可以识别0xFFFF的字符,弥补了String.fromCharCode方法的不足。从功能上来说,与codePointAt方法正好相反。console.log(String.fromCodePoint(0x20BB7));//?注意fromCodePoint方法定义在String对象上,而codePointAt方法定义在String的实例对象上。4.includes(),startsWith(),endsWith()传统上,JavaScript只有indexOf方法,可以用来判断一个字符串是否包含在另一个字符串中。ES6提供了三种新方法。includes():返回一个布尔值,指示是否找到参数字符串。startsWith():返回一个布尔值,表示参数字符串是否在源字符串的开头。endsWith():返回一个布尔值,指示参数字符串是否在源字符串的末尾。lets='HelloWorld!';console.log(s.startsWith('Hello'));//trueconsole.log(s.endsWith('!'));//trueconsole.log(s.includes('o'));//true这三个方法都支持第二个参数,表示开始搜索的位置。lets='Helloworld!';console.log(s.startsWith('world',6));//trueconsole.log(s.endsWith('Hello',5));//trueconsole.log(s.includes('Hello',6));//false上面的代码表明,当使用第二个参数n时,endsWith的行为不同于其他两个方法。它以前n个字符为目标,而其他两种方法以从第n个位置开始直到字符串末尾为目标。5.Repeat()重复方法repeat方法返回一个新的字符串,即把原字符串重复n次。console.log('x'.repeat(3));//xxxconsole.log('na'.repeat(0));//如果""参数是小数,则四舍五入console.log('na'.repeat(2.9));//repeat参数为负数或Infinity时nana会报错。但是,如果参数是0到-1之间的小数,则它等同于0,因为它会先四舍五入。0到-1之间的小数,四舍五入后等于-0,重复为0.console.log('na'.repeat(-0.9));//""参数NaN等于0.console.log('na'.repeat(NaN));//""如果repeat参数是字符串,会先转成数字。console.log('na'.repeat('na'));//""console.log('na'.repeat('3'));//nanana