<!-- ==================es6 字符串 unicode=============== 文字编码:早期计算机的资源宝贵,内存大小比较小。unnicode使用16位二进制来存储文字, 我们将一个16位二进制叫做一个码元(code unit)。 2^16 后来,由于技术的发展, unicode对文字编码进行了扩展, 将某些文字扩展到了32位(占用2个码元), 并且,将某个对应的二进制数字叫做码点(code point)。 2^32 js 获取字符串的长度是根据码元来的 例如: const text = '𠮷'; console.log("字符串长度:",text.length) // 2 console.log("使用正则测试:", /^.$/.text(text)) // false console.log("使用正则测试:", /^.$/u.text(text)) // true 使用flag u,就是使用码点来进行判断 console.log("获取第一个码元:", text.charCodeAt(0)) // 结果是一个16进制的数 console.log("获取第二个码元:", text.charCodeAt(1)) // 结果是一个16进制的数 console.log("获取第一个码点:",text.charPointAt(0)) es6为了解决上面的方法: 提供了一个方法: charPointAt() 根据字符串码元的位置,获取码点 <script> /** *判断字符串是否为32为的 */ function is32Bit(char, i) { // 如果码点大于了16位进制的码点,则是证明该字符串为32位的 return char.codePointAt(i) > 0xffff; } </script> // 获取字符串的真实长度, 码点与码元 function getLenfthOfCodePoint(str) { let len = 0; for (let i = 0; i < str.length; i++) { const element = str[i]; // 如果码点大于16为进制的码点 if (element.codePointAt(i) > 0xffff) { // i在索引码元, 在i这个位置, 占用了两个码元(1个码点) i++; } len++; } return len; } =======================es6新增的api, 正则================== es6新增字符串api, 以下均为字符串的实例方法, 也就是原型方法 includes(str, index): 判断字符串中是否包含指定的子字符串, 返回一个Boolean 值 里面俩个参数, str是需要查找的子字符串, index 是从哪个位置开始查找,不传是从0开始 例如: const text = "abcdefg"; text.includes("a") // true startWith(str,index): 判断字符串是否以指定的字符串开始, 返回一个Boolean 里面俩个参数, str是需要查找开头的子字符串, index 是从哪个位置开始查找,不传是从0开始 例如: const text = "abcdefg"; text.startWith("abc") // true endsWith(str,index): 判断字符串是否以指定的字符串结尾,返回一个Boolean值 里面俩个参数, str是需要查找结尾的子字符串, index 是从哪个位置开始查找,不传是从0开始 例如: const text = "abcdef"; text.endsWith("def") // true repeat(num): 将字符串需要重复多少次, 并且返回一个重复次数的而字符串 例如: const text = "abc"; text.repeat(2) //abcabc 正则中黏连标记, 一般项目中不这么用 标记名: y 匹配时, 完全按照正则对象中的lasteIndex位置开始匹配,并且匹配的位置必须在lastIndex位置 例如: const text = "Hello World!"; const reg = /W\w+/; text.test(reg) // true 但是把如果是这种情况下面: const reg1 = /W\w+/y; text.test(reg1) // false 因为lasteIndex = 0, 必须匹配第0个位置, 但是第0个位置不是W, 所以返回false 如果把 lasteIndex 改成对应的位置6的话, 那就可以匹配成功, ====================es6的模板字符串============================ es6之前处理繁琐的字符串: 1. 处理换行的字符串 2. 字符串的拼接 在es6中,提供模板字符串书写,可以非常方便的换行,要做的是``,在这里面写就可以 1. 换行直接在``按enter就好 2. 拼接字符串 在``里使用${} 里面使用变量就好,里面可以是任何有意义的表达式 模板字符串标记 const love1 = "abc"; const love2 = "def"; const text = myTag`第一个字符串${love1},第二个字符串${love2}`; 上面的text相当于 text = myTag(["第一个字符串",",第二个字符串"],"abc","def"); 这个myTag遇到${}进行分隔 function myTag(parts) { // 获取除了第一个数组外的其他参数 const values = Array.prototype.slice.apply(arguments).slice(1); // parts.length = values.length + 1 let str = ""; for (let i = 0; i < values.length; i++) { const element = values[i]; // 在这里可以在每一个插入参数的时候,可以进行做逻辑修改, 如 用户需要输入的值进行值转义 str += parts[i] + element if (i === values.length - 1) { str += parts[i + 1]; } } return str; } String.row 输出模板字符串里面的转义字符串 例如: String.row`abc\t\nbcd` //abc\t\nbcd // 在模板字符串里面可以加上标记: 标记名`模板字符串` 比较是一个函数,函数如下: 1.参数一被插值分隔的字符串数组 2. 后续参数: 所有的插值