-
字符的Unicode表示法
JavaScript允许采用 \uxxxx 形式表示一个字符,其中“xxxx”表示字符的码点。
"\u0061" 表示字母 a
但是,这种表示法只限于\u0000——\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表达。
"\u20BB7" JavaScript会理解成 \u20BB+7 ,所以只会显示一个空格,后面跟着一个7
ES6 对这一点做出了改进,只要将码点放入大括号就能正确解读该字符。
console.log("\u{20BB7}");
Ctrl+b 输出结果
-
遍历字符串
ES6为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。
for (let i of 'abcd') {
console.log(i)
}
运行结果,字符串 'abcd' 依次被输出
a
b
c
d
除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。
-
其他方法
传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
var s = 'Hello world!';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('w') // true
repeat()方法
repeat方法返回一个新字符串,表示将原字符串重复n次。
语法 字符串.repeat(重复次数的参数)
'a'.repeat(3) // "aaa"
'ok'.repeat(2) // "okok"
'ok'.repeat(0) // ""
'ok'.repeat(3.9) // "okokok" 参数为小数只取整数部分,参数为负数会报错,参数为NaN就是0
codePointAt()方法
ES6提供了codePointAt方法,能够正确处理4个字节储存的字符,返回一个字符的码点。
-
模板字符串
传统的JavaScript语言,输出模板通常是这样写的(使用加号拼接字符串和变量)。
$('.op').append(
"I am '+info.age+'years old"
)
在ES6模板字符串中可以这样写:
$('.op').append(`
I am ${info.age} years old
`)
模板字符串(template string)是增强版的字符串,用反引号(`)标识。
反引号在键盘左上角。
其中,变量用 ${变量} 来表示。大括号内部可以放入任意的JavaScript表达式,可以进行运算,引用对象属性,调用函数,甚至还能嵌套。
如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。
模板字符串中所有的空格和缩进都会被保留在输出之中,可以用来定义多行字符串。
-
标签模板
模板字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。
alert`123` // 字符串123跟在 alert函数后面
// 等同于
alert(123)
标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。
但是,如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。
下面的代码详解可以参考http://es6.ruanyifeng.com/#docs/string#%E6%A0%87%E7%AD%BE%E6%A8%A1%E6%9D%BF中标签模板部分
var a = 5;
var b = 10;
tag`Hello ${ a + b } world ${ a * b }`; // tag表示一个函数
// 等同于
tag(['Hello ', ' world ', ''], 15, 50);