ECMAScript6-字符串扩展

ECMAScript6-字符串扩展

  • 模板字符串
  • 模板字符串实例
  • 标签模板

上期我们讲到了变量的解构赋值,这期我们开始讲述字符串的相关扩展操作。



1、模板字符串

  • 模板字符串(template string)是增强版的字符串,⽤反引号(`)标识。
  • 它可以当作普通字符串使⽤,也可以⽤来定义多⾏字符串,或者在字符串中嵌⼊变量
  • 如果在模板字符串中需要使⽤反引号,则前⾯要⽤反斜杠转义。
  • 如果使⽤模板字符串表示多⾏字符串,所有的空格和缩进都会被保留在输出之中。
  • 模板字符串之中可以放⼊js表达式、对象属性、还能调⽤函数。
  • 注意:如果模板字符串中的变量没有声明,将报错。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //模板字符串的使⽤
    let url = "http://www.baidu.com";
    let title = "百度";
    //传统的⼦串拼装
    console.log('<a href="' + url + '">' + title + '</a>');
    //输出:<a href="http://www.baidu.com">百度</a>
    //使⽤模板⼦串
    console.log(`<a href="${url}">${title}</a>`);
    //输出:<a href="http://www.baidu.com">百度</a>
    //在模板⼦串中输出反引号,可使⽤反斜线转义
    console.log(`Hello \`ZhangSan\`!~`);
    //输出:
    //传统定义多⾏⼦串格式
    let tpl1 = "<ul>" +
        "<li>北京</li>" +
        "<li>上海</li>" +
        "<li>⼴州</li>" +
        "</ul>";
    console.log(tpl1);
    //输出:<ul><li>北京</li><li>上海</li><li>⼴州</li></ul>
    //使⽤模板⼦串定义多⾏⼦串格式,⽽且所有的空格和缩进都会被保留
    let tpl2 = `
         <ul>
         <li>北京</li>
         <li>上海</li>
         <li>⼴州</li>
         </ul>`;
        console.log(tpl2);
        /* 输出:
         <ul>
         <li>北京</li>
         <li>上海</li>
         <li>⼴州</li>
         </ul>
        */
        //模板⼦串中⽀持使⽤对象属性、表达式运算及函数调⽤等操作
        let stu = {name:"张三",age:18};
        console.log(`我叫${stu.name},今年${stu.age},就读于清华⼤⼀,等毕业我就${stu.age + 4}岁了!`);//输出:我叫张三,今年18岁,就读于清华⼤⼀,等毕业我就22岁了!
</script>
</body>
</html>

2、模板字符串实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //将下⾯的数据输出到模板ul标签中
    let data = [
        {name: "张三", sex: 1},
        {name: "李四", sex: 0},
        {name: "王五", sex: 1},
        {name: "赵六", sex: 0},
    ];
    let tpl = `<ul>${data.map(stu => `<li>${stu.name}</li>`).join("")}</ul>`;
    console.log(tpl);
    //输出结果:<ul><li>张三</li><li>李四</li><li>王五</li><li>赵六</li></ul>
    //也可以写出如下格式
    let tpl2 = `<ul>
            ${data.map(stu => `
            <li>
                ${stu.name}
                ${stu.sex == 1 ? "男" : "⼥"}
            </li>
         `).join("")}
        </ul>`;
    document.body.innerHTML = tpl2; //输出⻚⾯body中
</script>
</body>
</html>

3、模板标签

  • 模板字符串的功能,不仅仅是上⾯这些。
  • 它可以紧跟在⼀个函数名后⾯,该函数将被调⽤来处理这个模板字符串。这被称为“标签模板”功能
    (tagged template)。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    alert("Hello");
    alert `Hello`;
</script>
</body>
</html>
  • 标签模板其实不是模板,⽽是函数调⽤的⼀种特殊形式。
  • “标签”指的就是函数,紧跟在后⾯的模板字符串就是它的参数。
  • 如果模板字符中有变量,就不是简单的调⽤了,⽽是会将模板字符串先处理成多个参数,再调⽤函 数。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    let a = 5;
    let b = 10;
    tag`Hello ${ a + b } world ${ a * b }`;
    // 等同于
    //tag(['Hello ', ' world ', ''], 15, 50);
    //function tag(tpldata, value1, value2){
    // ...
    //}
    // 等同于
    function tag(tpldata, ...values){
        console.log(tpldata);//["Hello ", " world ", ""]
        console.log(values); //[15, 50]
        console.log(arguments);
        //[["Hello ", " world ", ""],15,50]
    }
</script>
</body>
</html>
  • “标签模板”的⼀个重要应⽤,就是过滤 HTML 字符串,防⽌⽤户输⼊恶意内容。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //定义⼀个安全处理html标签函数
    function SaferHTML(tpldata, ...values){
        let s = tpldata[0];
        for (let i = 0; i < values.length; i++){
            let arg = String(values[i]);
            //在替换中转义特殊字符
            s += arg.replace(/&/g, "&amp;")
                .replace(/</g, "&lt;")
                .replace(/>/g, "&gt;");
            //不要转义模板中的特殊字符。
            s += tpldata[i+1];
        }
        return s;
    }
    //测试
    let content = '<script>alert("Hello")<\/script>'; // 恶意代码
    let message = SaferHTML`<p>${content} 已向您发送消息.</p>`; //使⽤标签模板
    console.log(message);
</script>
</body>
</html>

在我们日常输入里面,如果输入甚至更严重的标签,会破坏我们的版面。


总结

这一期我们主要讲解了字符串的扩展,下期我们继续讲解字符串的相关内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《ECMAScript 6 入门》是阮一峰著的一本 JavaScript ES6 新特性入门教程,该书从ES6的背景和目标出发,逐步讲解了ES6新特性。其中包括:let 和 const 命令、变量的解构赋值、字符串扩展、正则表达式的扩展、数值的扩展、数组的扩展、函数的扩展、对象的扩展等。 本书采用了易于理解的方式,详细解读了ES6新特性的实现原理,从而读者可以更好地掌握新语法和语言特性。此外,每章节中均穿插了许多实例,方便读者进行实践和理解。书中提供的案例也非常实用,能帮助开发者提高代码的可维护性、可扩展性以及可读性。 在ES6中,JS的标准库得到了大幅度的扩充,涉及各种各样的操作API,可以使开发者在开发过程中更加高效、方便。此外,ES6还引入了模块化编程规范,进一步便于程序的组织和管理,使得代码更加可读和易于理解。 总之,作为一本JavaScript ES6新特性入门教程,《ECMAScript 6 入门》绝对是一本值得阅读的书籍。它详细地介绍了ES6所有的新特性和语言规范,并通过丰富的实例,让读者能够快速地掌握ES6的编写技巧和使用方法,对于想要了解和掌握ES6新特性的开发者来说,阮一峰老师的这本书实在是一本不可或缺的参考书。 ### 回答2: 《ECMAScript 6 入门》是由阮一峰写的一本关于 ECMAScript 6 的入门指南,主要介绍了 ECMAScript 6 的新特性和语法。本书采用干货式的阐述方式,对 ECMAScript 6 中的新特性做了全面的介绍,列举了大量的例子,方便读者更好地理解和掌握。在学习过程中,读者也可以通过在线编译器和在线代码库练手。 《ECMAScript 6 入门》总共分为三大部分,包括基础篇、进阶篇和实战篇。基础篇主要讲述了 ECMAScript 6 中的基础语法和常用特性,比如变量声明、箭头函数、模板字符串、解构赋值、参数默认值等等。进阶篇则进一步讲述了 ECMAScript 6 中的高级特性,如面向对象编程、模块化、异步编程、迭代器和生成器等。实战篇则以实际的代码案例为基础,通过比较实际的场景来深入了解 ECMAScript 6 的应用。 总的来说,《ECMAScript 6 入门》是一本非常好的 ECMAScript 6 的入门书籍,对于想要学习 ECMAScript 6 的开发者来说,是一本非常重要的参考书籍。无论是初学者还是已经掌握了部分要点的开发者,都可以从其中获得很多收获。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值