Skip to content

字符串新增特性

模板字符串

什么是模板字符串?

js
使用反引号表示的字符串

相对于使用单引号或双引号定义的字符串,模板字符串有如下特点:

js
1. 模板字符串中可以直接写换行
2. 模板字符串通过 ${} 可以直接插入变量后者表达式
3. 模板字符串中可以直接调用函数
js
`User ${user.name} is not authorized to do ${action}.`

`${x} + ${y} = ${x + y}`

`foo ${fn()} bar`

`
锄禾日当午
汗滴禾下土
谁知盘中餐
粒粒皆辛苦
`

模版字符串案例

html
<body>
    <ul id="box">
        <li>
            <span>1</span> 
            <a href="">刘姥姥</a> 
        </li>
    </ul>
    <script>
        // 创建字符串
        const msg = `Hello World`;
        console.log(typeof msg);
        console.log(msg);
        console.log('');

        // 模板字符串中直接写换行
        const content = `
        锄禾日当午
        汗滴禾下土
        水质盘中餐
        粒粒皆辛苦
        `;
        console.log(content);


        // 模板字符串直接插入变量
        const name = '高小乐';
        const gender = '男';
        const hometown = '山西';
        const hobby = '醋';
        const money = .25;

        // 拼接字符串
        const message = `
        我的名字叫${name},
        性别${gender},
        我来自${hometown},
        我的业余爱好是${hobby},
        我会进行运算${money + 78 * 2}
        我学习后的期望薪资是${money} K;`;
        console.log(message);
        

        // 定义数组
        const data = ['刘姥姥', '马姥姥', '司马姥姥', '欧阳姥姥', '宇文姥姥'];
        const html = data.map(function(item, index) {
            return `
            <li>
                <span>${index+1}</span> 
                <a href="#">${item}</a> 
            </li>
            `
        }).join('');
        var box = document.querySelector('#box');
        box.innerHTML = html;

        
    </script>
</body>

字符串实例新增方法

ES5 方法:

js
charAt()			返回指定位置的字符,参数是指定的索引
charCodeAt()		返回指定位置的字符的unicode编码,,参数是指定的索引
indexOf()			返回指定的内容在字符串中第一次出现的位置(索引),参数就是指定的内容
lastIndexOf()		返回指定的内容在字符串中最后一次出现的位置(索引),参数就是指定的内容
slice()				截取字符串并返回,参数指定开始位置和结束位置(结束位置字符不包括在内),不设置第二个参数截取到最后
substring()			截取字符串并返回,规则同上
substr()			截取字符串并返回,参数指定开始位置和截取长度,不设置第二个参数截取到最后
toLowerCase()		将字符串所有字母转为小写并返回,不需要参数
toUpperCalse()		将字符串所有字母转为大写并返回,不需要参数
split()				分隔字符串返回数组,参数指定分隔符,''代表空字符串
search()			参数是正则表达式,返回字符串中第一个满足正则的部分的索引,无法匹配返回 -1
match()				参数是正则表达式,匹配成功返回数组,无法匹配返回 null
replace()			进行替换,第一个参数可以是正则表达式,可以是字符串;默认只替换一个,替换所有需要进行全局匹配

ES6 + 方法:

js
repeat()		字符串重复,参数是 [重复次数] 返回新字符串
includes()		判断是否包含某个值,参数是['字符串'][索引位置],返回布尔值
startsWith()	判断是否以某个值开始,参数是['字符串'][索引位置],返回布尔值
endsWith()		判断是否以某个值结尾,参数是['字符串'][从尾找的长度],返回布尔值
trim()			去掉两端的空格
trimStart()		去掉前面的空格(ES2019
trimEnd()		去掉后面的空格(ES2019
padStart()		字符串填充,参数是[填充的长度]['填充的内容'],填充到前面(ES2017
padEnd()		字符串填充,参数是[填充的长度]['填充的内容'],填充到后面(ES2017
replaceAll()	替换字符串中指定内容,参数是替换的内容,替换所有(ES2021

案例

js
console.log('高小乐'.repeat(10));	// 

const msg = 'Hello World';
console.log(msg.includes('l')); //true
console.log(msg.includes('World')); //true
console.log(msg.includes('H', 5)); 第5个参数后往后找 //false

console.log(msg.startsWith('Hello'));
console.log(msg.startsWith('Hello', 1));
console.log(msg.endsWith('d'));
console.log(msg.endsWith('d', 5));

console.log(msg.startsWith('Hello'));
console.log(msg.startsWith('Hello', 1));
console.log(msg.endsWith('d'));
console.log(msg.endsWith('d', 5));
console.log('');


console.log(msg.padStart(20));
console.log(msg.padStart(20, '@'));
console.log(msg.padStart(20, '^--^'));
console.log(msg.padEnd(30));
console.log(msg.padEnd(30, '0'));
console.log('');


const content = '    Hello World             ';
console.log(`#${content}#`);
console.log(`#${content.trim()}#`);
console.log(`#${content.trimStart()}#`);
console.log(`#${content.trimEnd()}#`);
console.log('');

console.log(content.replace('l', 'L'));
console.log(content.replaceAll('l', 'L'));