字符串的扩大
1.字符的 Unicode 示意法
rest参数与数组
function log(...value) {
console.log(value);
console.log(...value);
}
log([1,2,3]);
// [ [ 1, 2, 3 ] ]
// [ 1, 2, 3 ]
log(1,2,3);
// [ 1, 2, 3 ]
// 1 2 3
2.字符串的遍历
运用for…of轮回遍历
for(let item of 'foo'){
console.log(item); //'f' 'o' 'o'
}
3.includes(),startsWith(),endsWith()
传统的字符串只要indexOf要领,能够用来肯定一个字符串是不是包含在另一个字符串中。ES6又供应了三种新要领。
- includes():返回布尔值,示意是不是找到了参数字符串。
- StartsWith():返回布尔值,示意参数字符串是不是在原字符串的头部。
- endsWith():返回布尔值,示意参数字符串是不是在原字符串的尾部。
let s = 'Hello world!'
s.startsWith("Hello") //true
s.endsWith('!') //true
s.includes('o') //true
这三种要领都支撑第二个参数,示意最先搜刮的位置。
let s = 'Hello world!';
s.startsWith('world',6)//true
s.endsWith('Hello',5)//true 前5个字符串
s.includes('Hello',6)//false
//上面代码示意,运用第二个参数n时,**endsWith的行动与其他两个要领有所不同。它针对前n个字符,**而其他两个要领针对从第n个位置直到字符串完毕。
4.repeat()
repeat返回一个新字符串,示意将原字符串反复n次。
'x'.repeat(3)//'xxx'
'hello'.repeat(2)//'hellohello'
'na'.rapeat(0) //''
假如参数是小数,则会取整。
'na'.repeat(2.9) //'nana'
假如参数是负数或者是Infinity,会报错
'na'.repeat(Infinity)
//RangError
'na'.repeat(-1)//RangError
假如参数在0到-1之间则视为为0
'na'.repeat(-0.9) //''
//参数NaN等同于0
'na'.repeat(NaN)//''
//假如参数是字符串则会先转换成数字
'na'.repeat('na') //''
'na'.rapeat('3')//'nanana'
5.padStart(),padEnd()
字符串补全的功用
padStart()用于头部补全,padEnd()用于尾部补全。
'x'.padStart(5,'ab');//'ababx'
'x'.padStart(4,'ab');//"abax"
'x'.padEnd(5,'ab');//'xabab'
'x'.padEnd(4,'ab');//'xaba'
假如原字符串的长度,即是或大于最大长度,则字符串补全不见效,返回原字符串。
'xxx'.padStart(2,'ab') //'xxx' 返回原字符串
'xxx'.padEnd(2,'ab') //'xxx' 返回原字符串
假如补全的字符串和原字符串,二者的长度超越了最大长度,则截取超越位数的补全字符串
'abc'.padStart(10,'0123456789') //"0123456abc"
假如省略第二个参数,默许运用空格补全长度。
'x'.padStart(4) //' x'
'x'.padEnd(4) //'x '
padStart()的罕见用处是为数值补全指定位数。下面代码天生 10 位的数值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
另一个用处是提醒字符串花样。
'12'.padStart(10,'YYYY-MM-DD') //'YYYY-MM-12'
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
6.字符串嵌入变量
// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
大括号内部能够放入恣意的 JavaScript 表达式,能够举行运算,以及援用对象属性。
let x = 1;
let y = 2;
`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"
`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"
let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"
模板字符串当中还能挪用函数。
function fn() {
return "Hello World";
}
`foo ${fn()} bar`
// foo Hello World bar
假如模板字符串中的变量没有声明,将报错。
// 变量place没有声明
let msg = `Hello, ${place}`;
// 报错
//因为模板字符串的大括号内部,就是实行 JavaScript 代码,因而假如大括号内部是一个字符串,将会原样输出
`Hello ${'World'}`
// "Hello World"
模板字符串以至还能嵌套。
const tmpl = addrs => `
<table>
${addrs.map(addr => `
<tr><td>${addr.first}</td></tr>
<tr><td>${addr.last}</td></tr>
`).join('')}
</table>
`;