- A+
字符串
又到了一天一度的写笔记的时间了,今天看的ES6字符串部分,因为内容我感觉挺多的,而且需要理解,所以第二个部分模板字符串的笔记就放到明天来写了,今天就写一下学习字符串对象的笔记,笔记分为以下几点:
1.字符的表示方法
2.字符串对象的一些方法
开始今天的笔记吧!
1.字符的表示方法
什么字符的表示方法?第一次听到这个问题的时候,可能一脸蒙,我查阅了一下资料,简单的大概的了解了一下这方面的知识部分,相信大家都听说过ASCII码,大家如果以c语言开始打基础的话,就应该知道,c语言中电脑上输出的字符实际上是数字。当然,计算机底层数据存储也是二进制的吧,从二进制转化为十进制,然后以数字的形式对应这字符或者其他符号,当你了解到这个的时候,那么再看下面的笔记,或许就不会那么的艰难了。
ES6对Unicode的支持更好了,目前也有了字符串对象,那么什么是Unicode?Unicode ( 统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求 ) ,而我们熟悉的UTF-8,UTF-16,UTF-32是Unicode的具体实现(怎么存储在计算机当中)。所以,Unicode就是一种标准,UTF就是通过这种标准实现的模式(个人理解),所以字符串的表示方法?现在应该可以理解了吧,下面就开始笔记的正式内容:
1 //1.js允许采用uxxxx 的形式表示一个字符,其中xxxx表示Unicode的码点: 2 "u0061" // a 0061对应的就是a在Unicode中的数字 3 //但是这种只可以识别0000 - FFFF之间的字符,超过的话必须用两个字节的形式进行表达(一种编码对应一个字节,超过范围需要用二字节表示) 4 "uD842uDFB7" //? 5 "u20BB7" // 7 该数已经超过了FFFF 所以多余的部分类似于 u20BB + 7 u20BB不可以打印 所以只有7 6 //ES6解决方法:利用大括号就可以正确解读 7 "u{20BB7}" //"?" 8 'u{1F680}' === 'uD83DuDE80' \true 9 10 //2.js中共有六种方法表示字符 11 'z' //z 12 '172' //z 13 'x7A' //z 表示单字节码 14 'u007A' //z 表示unicode 码 15 'u{7A}' //z
2.字符串对象的一些方法
1.codePointAt()方法
1 //codePointAt()方法就是返回一个unicode码,第一个参数就直接返回该第一个字符对应的编码. 2 var s = '?a'; 3 s.codePointAt(0); //134071 4 s.codePointAt(1); //返回的是后两个字节的十进制 5 s.codePointAt(2); //返回a的十进制数 6 //正常的情况应该是参数1直接返回a的十进制编码,要解决这个方法的话,就用for of循环遍历字符串 7 var s = '?a'; 8 for(let ch of s){ 9 console.log(ch.codePointAt(0).toString(16)); //依次遍历字符,第一个,第二个字符对应的第0个就是对应的编码 10 } 11 //利用codePointAt() 方法测试一个字符的字节 12 function is32Bite(c){ 13 return c.codePointAt(0) > 0XFFFF; 14 } 15 is32Bite("?"); //true
2.String.fromCodepoint()
1 //ES6新增了String.fromCodePoint()方法,该方法与ES5中的fromCharPoint() 方法能识别大于0XFFFF的编码,将其转化为字符 2 String.fromCodePonit(0x20BB7) //'?'
3.for...of 循环遍历字符串
1 //该遍历相比较于单纯的for循环遍历,优点就是可以识别大于0xFFFF的码点,传统的for循环无法识别。 2 var a = String.fromCodePoint(0x20BB7); 3 for(let i = 0;i<a.length;i++){ 4 console.log(text[i]); //利用for循环得到的就是""空的,因为for循环无法识别大于0xFFFF码点 5 } 6 for(let i of a){ 7 console.log(i); //? 利用for...of遍历字符串就可以得到 8 } 9
4.at()方法返回字符串位置
1 //ES6的at()方法与ES5的charAt() 方法相比,新的at方法可以识别大于0xFFFF编码 2 '?'.charAt(0); // 返回的是?的第一个字节 3 '?'.at(0); // 返回的是?,可以识别 4 ’abc'.at(0); //a
5.normalize()方法自行查询,这个我本人也不是很理解
6.includes(),startsWith(),endsWith()方法
1 //includes() 返回布尔值,表示是否找到了(参数对应的)字符串 2 //startsWith() 返回布尔值,表示参数字符串是或否在源字符串头部 3 //endsWith() 返回布尔值,表示对应参数是否在尾部 4 //传统的indexOf() 方法可以确定一个参数是否在另一个参数内(具体自行查阅) 5 var a = 'asd'; 6 s.includes('s'); //true 7 s.startsWith('a') //true 8 s.endsWith('d') //true 9 10 //三个方法的都可以用有第二个参数,表示从什么地方开始比对 11 s.startsWith('s',1); //true
7.repeat()方法
1 //返回一个新的字符串,表示将原来的字符串重复n次 2 vat a = 'x'.repeat(3); //'xxx' 3 //小数会取证,舍去,如果是0到-1会取0,参数为字符串,会先转化为数字 4 'x'.repeat(2.9); //xx 5 'x'.repeat(-0.9); //'' 6 'x'.repeat('na') //''
8.padStart(),padEnd()方法
1 //ES6引入了补全长度方法,一个在头部补全(start),一个在尾部补全(end)。 2 String.padStart('长度','补全字符串'); //下面一样 3 'x'.padStart('5','a'); //aaaax 4 'x'.padEnd('5','a'); //xaaaa 5 //注意,原长度大于或者等于参数,则会返回原来字符串 6 'xxx'.padEnd(2,'aaa'); //xxx 7 //注意,如果用来补全的字符串与原来字符串的长度,超出了指定的最小长度,则会截取参数字符串超出部分,与原来字符串相接 8 abc.padStart(10,'123456789'); //1234567abc 9 //注意,如果省略第二个参数,会用' '补全(空格) 10 11 //用途:经常用于补全位数,或者固定的字符串格式(自己体会) 12 '1'.padStart(10,'0'); //00000000001;
说实话,今天的这一部分我学的真的累,有许多东西都是今天刚搜索到新学习的知识,字符串模板笔记明天学习,这个笔记大家可以复习学习一下,如果有的地方理解不到位,或者笔记有错误的地方,可以下面评论更改,加油!