浅浅研究模板字符串 ` `

目录

1.什么是模板字符串`   `

1.1mdn的描述:

1.2  模板字符串使用语法

1.3 eval(`alert('hello')`  、eval([`alert('hello')`])和  eval(`[alert('hello1')]`)的区别

2.为什么三个返回值不一样?

3.eval`${prompt()}` 返回的是啥?为什么?



1.什么是模板字符串`   `

1.1mdn的描述:

       模板字符串使用反引号 (` `) 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${expression})的占位符。占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。在模版字符串内使用反引号(`)时,需要在它前面加转义符(\)。

1.2  模板字符串使用语法

`string text`

`string text line 1
 string text line 2`

`string text ${expression} string text`

tag `string text ${expression} string text`
//标签就是函数,紧跟在后面的模板字符串就是他的参数

1.3 eval(`alert('hello')`  、eval([`alert('hello')`])和  eval(`[alert('hello1')]`)的区别

eval(`alert('hello')` 实现了弹窗

浅浅研究模板字符串 ` `_第1张图片

  eval([`alert('hello')`])没有弹窗,返回的是一个字符型的数组

  eval(`[alert('hello1')]`)弹窗了

 浅浅研究模板字符串 ` `_第2张图片

2.为什么三个返回值不一样?

这个问题就得去查询eval()的返回值

eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。

如果 eval() 的参数不是字符串, eval() 会将参数原封不动地返回。

如果你以字符串的形式构造了算术表达式,那么可以在后面用 eval()对它求值。

eval 返回最后一个表达式的值。

分析:

eval(`alert('hello')` 和 eval(`[alert('hello1')]`) 

都弹窗了所以返回的是alert()的返回值,而alert()没有返回值,所以eval()最后的返回值为空

eval([`alert('hello')`])  没有弹窗返回的是一个字符型数组 

因为eval()里面包含的就是一个数组所以原样返回了

alert(变量名)

alert()会在全局里面找,如果存在就打印,不存在就报错

3.eval`${prompt()}` 返回的是啥?为什么?

可以看出返回的是一个空数组

eval`${abc,prompt()def}`

浅浅研究模板字符串 ` `_第3张图片

  1. ${ }是es6新增的字符串方法
    可以配合单反引号完成字符串拼接的功能

  2. 以上两个例子可以看出eval()的返回值为数组。模板字符串使用反引号 (` `) 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${expression})的占位符

  3. 带标签的模板字符串返回的第一个参数为一个字符串值的数组,其余的参数是和${}的表达式有关的,而eval()只会接第一个返回值为参数,所以就打印出了数组​​​​​​​浅浅研究模板字符串 ` `_第4张图片

你可能感兴趣的:(网络安全高级,javascript,前端)