资讯专栏INFORMATION COLUMN

es6基础0x009:模板字符串

zhaochunqi / 3087人阅读

摘要:概述模板字符串出来以后,单引号双引号哪个好的争论可以退出历史舞台的,模板字符串的最好语法单行文本多行文本内嵌表达式标签语法不太喜欢单行文本完全不单引号和双引号,当然,转义是不可避免的,有所得必有所失去嘛多行文本,也不用关系换行的编码转化问题

0x000 概述

模板字符串出来以后,单引号、双引号哪个好的争论可以退出历史舞台的,模板字符串的`最好!

0x001 语法

单行文本

`string text`

多行文本

`string text line 1
 string text line 2`

内嵌表达式

`string text ${expression} string text`

标签语法(不太喜欢)

tag `string text ${expression} string text`

0x002 单行文本

完全不 care 单引号和双引号,当然,转义`是不可避免的,有所得必有所失去嘛

let single=`string text, "" ""`` // "string text, "" ""`"
0x003 多行文本,也不用关系换行的编码转化问题了, 也可以走开了
let multip=`string text line 1
 string text line 2`
 // "string text line 1
 //  string text line 2"
所以我们可以这么写代码
```
let dom=`
    我要换行
    我还要换行
`
```
虽然好像没什么卵用
0x004 表达式

这是模板字符串最大的作用了,有好极大好处呢

更强的阅读性和更不容易错的字符串拼接

let name="jack",age=23
let summary=`my name is ${name}, age is ${age}`
console.log(summary) // "my name is jack, age is 23"

对比一下之前的字符串拼接

let name="jack",age=23
let summary="my name is " + name + ", age is " + age
console.log(summary) // "my name is jack, age is 23"

可以内嵌表达式,表达式也可以很复杂,但是不推荐

let num1 = 1, num2 = 2
`${num1} + ${num2} = ${num1 + num2}` // "1 + 2 = 3"

模板字符串嵌套

let inner=`${`${"1"}`}` // 1

0x005 标签语法

我不太喜欢这个特性

function myTag(strings, personExp, ageExp) {

  var str0 = strings[0]; // "that "
  var str1 = strings[1]; // " is a "
  var str2 = strings[2]; // " "
    
  var ageStr;
  if (ageExp > 99){
    ageStr = "centenarian";
  } else {
    ageStr = "youngster";
  }

  return str0 + personExp + str1 + ageStr;

}

var output = myTag`that ${ "Mike" } is a ${ "22" }`;

console.log(output);// that Mike is a youngster
0x006 原始字符串

标签函数的第一个参数strings.raw储存着原始字符串,未经转义

function tag(strings) {
  console.log(strings.raw[0]);
}

tag`string text line 1 
 string text line 2`; // "string text line 1 
 string text line 2" 

使用String.raw()也是一样的效果, 是两个字符。

var str = String.raw`Hi
${2+3}!`;
// "Hi
5!"

str.length;
// 6

str.split("").join(",");
// "H,i,,n,5,!"
0x007 babel转义

源码

let name="jack",age=23
let summary=`my name is ${name}, age is ${age}`

翻译后

var name = "jack",
    age = 23;
var summary = "my name is " + name + ", age is " + age;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99222.html

相关文章

  • es6基础0x021:反射

    摘要:概述反射说起来和上一章节的代理基本一样,只是使用的方式不同,设计理念也不同。 0x000 概述 反射说起来和上一章节的代理基本一样,只是使用的方式不同,设计理念也不同。 反射提供了一系列的静态函数,可以使用Reflect.function_name(...prams)调用,这一系列的方法和代理的处理器对象方法一致 0x001 apply 语法 Reflect.apply(targ...

    booster 评论0 收藏0
  • es6基础0x011:Set

    摘要:概述是一个新的数据结构,和其他语言的特性差不多,当然,作为中的,他还是有一些属于的特点。 0x000 概述 Set是一个新的数据结构,和其他语言的特性差不多,当然,作为js中的Set,他还是有一些属于js的特点。 0x001 初始化 new Set([iterable]); 初始化一个Set有一个可选的参数,这个参数必须是一个可迭代的对象,可迭代对象包括String、Array、Arr...

    jsyzchen 评论0 收藏0
  • es6基础0x012:Map

    摘要:概述也是一个新的数据结构,在中其实也经常用到,比如下面的栗子,我们经常这么使用一个对象,与其说他是对象,其实他更像一个,但是比起真正的,这个还是有点弱了,初始化初始化一个有一个可选的参数,该参数必须是一个可迭代对象,可迭代对象包括和用户定 0x000 概述 Map也是一个新的数据结构,在js中其实也经常用到,比如下面的栗子,我们经常这么使用一个对象,与其说他是对象,其实他更像一个Map...

    DesGemini 评论0 收藏0
  • es6基础0x024:babel简单使用

    摘要:简单的说就是,新语法编译器旧语法。说明所以,对于新特性,我们可以通过使用,也可以通过语法转化来达到兼容。 0x001 polyfill 我们都知道,js总是一直存在着兼容性问题,虽然其他语言也存在着兼容性问题,比如c++、java,但那种兼容性是新特性在旧版本上的不兼容,js则存在着各种奇形怪哉的不兼容。这其中有着非常复杂的历史和时代的原因,并不加以累述。而解决兼容性问题的方法在以前只...

    wangbinke 评论0 收藏0
  • es6基础0x020:代理

    摘要:概述代理嘛,就是请代理人代替自己做某件事,但是和自己不一样的是代理人可以有自己的行为,甚至可以做出和预期相违背的行为。 0x000 概述 代理嘛,就是请代理人代替自己做某件事,但是和自己不一样的是代理人可以有自己的行为,甚至可以做出和预期相违背的行为。 0x001 栗子 声明一个普通对象origin,他有一个属性name let origin={ name: origin } ...

    hatlonely 评论0 收藏0

发表评论

0条评论

zhaochunqi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<