3. 字符串的扩展
2018-01-11 本文已影响0人
羊烊羴
字符串的遍历接口
ES6为字符串添加了遍历器接口,使得字符串可被for..of循环遍历
let str='hello';
for(let code of str){
console.log(code);
}//'h','e','l','l','o'
for...of遍历字符串可以识别大于0xffff的码点,而传统的for循环遍历无法识别这样的码点
includes(),startsWidth(),endsWith()
includes()返回布尔值,表示是否找到了参数的字符串
startsWith()返回布尔值,表示参数是否在源字符串的头部
endsWith返回布尔值,表示参数是否在源字符串的尾部
以上三个方法都支持第二个参数,用于表示开始搜索的位置
const str="hello world";
console.log(str.includes("d",3)); //true
console.log(str.endsWith("o",5)); //true
console.log(str.startsWith("l",3)); //true
//三个方法有一些不同的地方在于,在传入第二个参数的情况下,endsWith从第二个参数的位置开始向前查找,其余两个方法是从第二个参数开始的位置向后查找
repeat
该方法会返回一个新的字符串,用于表示将原来的字符串重复了多少次
const str="hello";
console.log(str.repeat(3.9)); //hellohellohello
console.log(str.repeat(0)); //""
//如果传入的参数为小数,那么会转换为整数进行转换,转换规则会按照地板函数来取整,如果参数是负数或Infinity会报错,参数为NAN视为0,如果参数是字符串会先转换为数字再进行操作
padStart(),padEnd()
这两个方法用于补全字符串,padStart用来在头部补全,padEnd用来在尾部补全
const str="hello";
console.log(str.padStart(8, "world")); //worhello
console.log(str.padEnd(10, "world")); //hellowworld
//第一个参数表示补全后字符串的长度,第二个参数表示要对源字符串补全的字符串,如果源字符串的长度大于该值,返回源字符串,如果小于该值那么对字符串进行补全,如果补全字符串和源字符串之和大于设定的值,那么会截去超出位数的补全字符,如果不设定第二个参数,那么默认使用空格进行补全
利用这两个补全方法,可以实现生成指定位数或提示字符串格式
console.log("1".padStart(10, "0")); //0000000001
console.log("9-12".padStart(10, "YYYY-MM-DD")); //YYYY-M9-12
模板字符串
模板字符串是增强版的字符串,用`标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或在字符中嵌入变量
"hello world \n -javascript"
`hello world
JavaScript`
//在使用普通字符串时我们想要实现换行效果,需要使用\n ,而在模板字符串中,我们只要按照书写格式进行换行即可,在模板字符串中所有的换行和空格都会被保留
var name="Tom";
console.log(`name is ${name}`);
var obj={one:1,two:2};
console.log(`${obj.one + obj.two}`);
function fn() {
return "hello world"
}
console.log(`say:${fn()}`);
//模板字符串可以直接嵌入变量,变量使用${}进行包裹,在大括号内可以放入任意的javasccript表达式,可以进行运算,以及对象属性的引用,也可以直接引用构造函数
//如过{}内不是字符串,将会按照一般的规范进行转义,例如如果是一个对象,,将会默认调用对象的toStrin方法,如果引用的变量没有声明,那么会报错,如果是字符会直接输出该字符串内容
//模板字符串可以进行嵌套