ES6模板字符串

转载于:http://t.csdn.cn/pLJT2

一、模板字符串
模板字符串是可以插入表达式的字符串字面量。

在ES6(ES2015)中引入,另外,它还可以具有多行文本,换句话说可以直接输出回车换行符。

1. 模板字符串和传统字符串比较
传统字符串字面量使用单引号''或者双引号"",如下所示

var str = 'hello world';
var str2 = "hello world";

模板字符串使用反单引号(backquote) ``,如下所示

var str3 = `hello world`;

反单引号位置,如下图所示,英文输入状态下按下可输入

 

形式虽然有差别,但是作为字符串字面量本质上是完全等价的。

 

2. 模板字符串可以插入表达式 (重点)
语法如下

`${expression}`

简介:expression可以是任意常量、变量、函数调用。在${expression}前后,也可以有任意的其他合法的字符,例如`abc${expression}xyz`。最终,${expression} 会转化为字符串和前后的字符串拼接,如果有的话。

当没有字符串时,我们想打印一个对象的信息,只能通过字符串拼接。

var xiaoming = {
    name: '小明',
    age: 14,
    sex: 'male'
};

var bio = 'name: ' + xiaoming.name + ', age: ' + xiaoming.age + ', sex: ' + 'male';

console.log(bio);

现在,只有三个属性,拼接字符串还可以介绍。但是,当对象的属性比较多时,拼接字符串就会很费时费力。这时,应该用模板字符串。

var xiaoming = {
    name: '小明',
    age: 14,
    sex: 'male'
};

var bio = `name: ${xiaoming.name}, age: ${xiaoming.age}, sex: ${xiaoming.sex}`;

console.log(bio);

可以达到相同的目的

在这里插入图片描述 

表达式可以是一个常量、变量、函数调用,它们最终都可返回一个值,这个值会被转换成字符串类型,然后和其他字符拼接。如果是引用类型的值,会调用对象的toString方法,最终把返回字符串拼接

 

3. 模板字符串可以有多行文本
可以直接在``中输入回车换行符

var str = `我是第一行
我是第二行`

输出效果

 

这在传统字符中是不允许的,直接插入换行符

JavaScript会报错:

在这里插入图片描述 

主要适用于字符串中包含HTML标签的场景。如果是纯文本字符串,你输入回车字符串,这是代码缩进中的字符也会被包含进来。


输出效果

 

 


这时,你只能把代码中的缩进字符删除,但是会影响代码的可读性,得不偿失。但是如果字符串中时html标签,最终要插入到dom树中,缩进的字符会因为html的空白折叠现象忽略,因此可以使用。如果单纯再代码中使用字符串,完全没必要使用这个功能,简直是一种鸡肋的存在。

二、学生信息加载demo
一个小demo,练习下模板字符串的使用

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style> 
        span {
            font-weight:bold;
        }
    </style>
</head>
<body>

    <h1>学生信息列表</h1>
    <ul id="list">
        <li id='info'>信息加载中...</li>
    </ul>

    <script>
       const students = [
        {
            name: 'Alice',
            age: 20,
            sex: 'famale'
        },
        {
            name: 'Jimmy',
            age: 15,
            sex: 'male'
        },
        {
            name: 'xiaoxiao',
            age: 23,
            sex: 'female'
        }
       ];

       const list = document.querySelector('#list');

    let index = 0;
    const printTimer = setInterval(()=>{       
        if (index >= students.length) {
            clearInterval(printTimer);
            document.getElementById('info').innerText = '信息加载完毕!';
        }

        let liNode = document.createElement('li');
        liNode.innerHTML = `<span>name: </span>${students[index].name}, <span>age: </span>${students[index].age}, <span>sex: </span>${students[index].sex}`;
        list.appendChild(liNode);

        index ++;
    }, 2000)
    </script>
</body>
</html>

 

<think> 在Vue中,我们经常使用ES6模板字符串(template literals)来编写多行字符串ES6模板字符串使用反引号(`)来定义,并且可以直接换行。例如: ```javascript const message = `这是一行 这是第二行 这是第三行`; ``` 在Vue组件的JavaScript部分,我们可以这样使用: ```javascript export default { data() { return { multiLineText: `你好, 这是一个多行字符串的例子。 在模板字符串中,换行会被保留。` } } } ``` 然而,需要注意的是,这样编写的字符串换行处会包含换行符(\n)以及可能存在的缩进空格(比如上面例子中每行前面的空格)。如果你不希望有缩进,可以这样写: ```javascript export default { data() { return { multiLineText: `你好, 这是一个多行字符串的例子。 在模板字符串中,换行会被保留,且没有多余的空格。` } } } ``` 或者,如果你希望保持代码的可读性,但不想在字符串中有缩进,可以使用数组和`join`方法,或者使用反斜杠来消除换行后的缩进(但这样就不能保留换行符了)。但通常直接换行并注意缩进即可。 在Vue的模板中,如果我们想显示多行字符串并保留换行,可以使用`<pre>`标签或者CSS的`white-space: pre-line;`。例如: ```vue <template> <div> <!-- 使用pre标签,会保留所有空格和换行 --> <pre>{{ multiLineText }}</pre> <!-- 或者使用CSS样式,这样会合并连续空格,但保留换行 --> <div style="white-space: pre-line;">{{ multiLineText }}</div> </div> </template> ``` 原因:模板字符串ES6新增的语法,它允许在字符串中嵌入表达式,并且支持多行字符串,而不需要使用繁琐的字符串连接(+)操作符。在定义多行字符串时,所有的换行和空格都会被保留在字符串中。 注意:在Vue组件的模板中,直接使用`{{}}`插值显示多行字符串时,HTML默认会忽略空白字符(包括换行符),因此我们需要使用上述的`<pre>`标签或CSS样式来保留换行效果。 §§相关问题§§: 1. 在Vue中,如何将模板字符串中的换行符转换为HTML的换行标签(<br>)? 2. 在Vue的模板中,除了使用`<pre>`标签,还有哪些方式可以保留字符串中的换行符? 3. 在Vue组件的样式中,`white-space`属性有哪些值?它们分别代表什么? 4. 在Vue中,如何使用过滤器(filter)或者计算属性(computed)来处理多行文本的显示? </think> 在 Vue 中使用 ES6 模板字符串实现换行的方法如下: ### 方法 1:直接换行(推荐) 在模板字符串中直接按 Enter 键换行: ```javascript const message = `这是第一行 这是第二行 这是第三行`; ``` ### 方法 2:使用换行符 `\n` ```javascript const message = `这是第一行\n这是第二行\n这是第三行`; ``` ### Vue 组件中的实际应用 ```vue <template> <div> <!-- 直接显示多行文本(需要CSS支持) --> <pre>{{ formattedText }}</pre> <!-- 将换行符转换为 <br> 标签 --> <div v-html="htmlText"></div> </div> </template> <script> export default { data() { return { formattedText: `用户信息: 姓名:张三 年龄:28 职业:前端工程师`, // 包含换行符的文本 rawText: "第一行\n第二行\n第三行" }; }, computed: { htmlText() { // 将换行符替换为 HTML 换行标签 return this.rawText.replace(/\n/g, '<br>'); } } }; </script> <style scoped> /* 保留原始换行符格式 */ pre { white-space: pre-wrap; } </style> ``` ### 注意事项: 1. **普通 HTML 元素**会忽略字符串中的换行符(显示为空格),需要使用以下方式之一: - `<pre>` 标签 - CSS `white-space: pre` 或 `pre-wrap` - 将 `\n` 替换为 `<br>` 标签 2. **Vue 模板**中的换行会被编译器处理为单个空格 3. **JSON 数据**中直接包含的换行符会被保留 ### 原因说明: ES6 模板字符串使用反引号(`)定义,支持多行语法。在字符串内部: - 直接换行会转换为 `\n` 换行符 - 所有空格和缩进会被保留 - 支持 `${expression}` 表达式插值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值