成都网站建设939,51吃瓜爆料就看黑料社,企业网站ui,上海网站建设赢昶概念
字符串#xff08;String#xff09;是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol#xff08;es6新增#xff09;。
更好的Unicode支持
1. UTF-16码位
字符串里的字符有两种#xff1a;
前 个码位均以16位的编码单元…概念
字符串String是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symboles6新增。
更好的Unicode支持
1. UTF-16码位
字符串里的字符有两种
前 个码位均以16位的编码单元表示的BMP字符(基本多文种平面。超过 的UTF-16引入了代理对以两个编码单元32位表示辅助平面字符。
ES5中的所有字符串都是基于16位编码单元如果用同样的付方式处理包含代理对的UTF-16编码字符得到的结果将与预期不符。
2. codePointAt() 与 charCodeAt()
codePointAt() 方法接受编码单元的位置而非字符位置作为参数返回字符串中给定位置对应的码位整数值。
//a字符串中第一个字符是非BMP的包含两个编码单元所以它的length3
let a吉a //charCodeAt() 方法返回的只是位置0处的第一个编码单元
console.log(a.charCodeAt(0)) //55362
console.log(a.charCodeAt(1)) //57271
console.log(a.charCodeAt(2)) //97 //codePointAt() 方法返回完整的码位即使这个码位包含多个编码单元。
console.log(a.charCodePointAt(0)) //134071
console.log(a.charCodePointAt(1)) //57271
console.log(a.charCodePointAt(2)) //97
对于BMP字符集中的字符codePointAt() 与 charCodeAt() 方法的返回值相同。
对于非BMP的两个方法返回值不同。
检测一个字符占用的编码单元数量
function is32Bit(c){return c.codePointAt(0) 0xFFFF; //上界为16进制FFFF超过则由两个编码单元表示共有32位
}console.log(is32Bit(吉)); //true
console.log(is32Bit(a)); //false
3. String.fromCodePoint() 与 String.fromCharCode()
作用与codePointAt相反可以根据指定的码位生成一个字符。
对于BMP中的所有字符String.fromCodePoint() 与 String.fromCharCode() 方法执行结果相同。
对于非BMP的码位作为参数二者执行结果有可能不同。
console.log(String.fromCodePoint(134071)); //吉
4. normalize()
这个方法接受一个可选的字符串将该字符串转化为相应的标准Unicode的形式然后可以进行字符串的比较。以确保即使两个字符串原来分别是16位字符和32位字符也照样可以比较。 其他字符串变更
1. 正则表达式u修饰符
当给正则表达式添加u字符时它就从编码单元操作模式切换为字符模式也就是由原来匹配编码单元改为匹配字符。这样就不会视代理对为两个字符从而完全按照预期正常运行。
1.1. 检测u修饰符支持
function hasRegExpU{try {var patternnew RegExp(.,u)return true;} catch(ex){return false}
}
1.2. 字符串中的字串识别
以前我们使用 indexOf() 来检测字符串中是否包含另外一段字符串。\
let msg abcdefg
if(msg.indexOf(cde) -1) {console.log(2) //输出2因为t字符串中包含cde字符串。
}
在ES6中新增了3个新方法。每个方法都接收2个参数需要检测的子字符串以及开始匹配的索引位置。
includes() 方法。用于识别当前字符串中是否包含了某一个子串。startsWith()方法。顾名思义找到以某一个子串开始的字符串。 endsWith()方法。同样从后往前查找是否包含某一个子串。
let msg Hello world!;console.log(msg.startsWith(Hello)); //true
console.log(msg.endWith(!)); //true
console.log(msg.includes(o)); //trueconsole.log(msg.startsWith(o)); //false
console.log(msg.endWith(world)); //true
console.log(msg.includes(x)); //false//参数指定要搜索的文本指定一个开始搜索位置的索引
//includes()和startsWith()从索引位置开始匹配endWith()从索引值-搜索文本长度的位置开始匹配
console.log(msg.startsWith(o,4)); //true
console.log(msg.endWith(o,8)); //true
console.log(msg.includes(o,8)); //false
1.3. repeat()
该方法接受一个number类型的参数然后将调用该方法的字符串重复n次返回该字符串。
console.log( hello.repeat(2) ); // hellohello 其他正则表达式语法变更
1. 正则表达式 y 修饰符
该属性会通知搜索正则表达式的 lastIndex 属性开始进行如果在指定位置没有匹配成功则停止继续匹配。
2. 正则表达式的复制
在 ES5 环境中运行这段代码那么你会收到一条错误信息表示在第一个参数已经是 正则表达式的情况下不能再使用第二个参数。 ES6 则修改了这个行为允许使用第二个参 数并且让它覆盖第一个参数中的标志。 var re1 /ab/i, // ES5 中会抛出错误, ES6 中可用 re2 new RegExp(re1, g);console.log(re1.toString()); // /ab/i console.log(re2.toString()); // /ab/g console.log(re1.test(ab)); // true console.log(re2.test(ab)); // true console.log(re1.test(AB)); // true console.log(re2.test(AB)); // false
3. flags属性
在ES6的版本中添加了正则表达式的 flags 属性该属性可以返回所有应用于当前正则表达式的修饰符字符串。 模板字面量
模板字面量是 ES6 针对 JS 直到 ES5 依然完全缺失的如下功能的填补
多行字符串针对多行字符串的形式概念基本的字符串格式化将字符串部分替换为已存在的变量值的能力HTML 转义能转换字符串以便将其安全插入到 HTML 中的能力。
模板字面量的最简单语法是使用反引号 来包裹普通字符串而不是用双引号或单引号。 利用它可以实现输出多行字符串。以前的时候多行字符串依靠拼接然后加上换行符。有了这个反撇号后就可以直接拼出来多行字符串并且显示的时候也是多行的字符串。利用它可以实现占位符功能。声明一个变量然后可以使用 ${ } 来取出这个变量的值。
let name world,
message Hello, ${name}.;
console.log(message); // Hello, world.
console.log(typeof message); // string
console.log(message.length); // 12
模板标签
它就是一个包含了反撇号表达式的函数。这个函数以反撇号表达式作为参数然后标签名就是这个函数的函数名。