带标签的模板字符串

目录

前言

1.ECMA

2.带标签的模板字符串

2.1描述

2.2示例

2.2.1标签无Tostring方法 

2.2.2标签有Tostring方法 

思考:

1.为什么alert`1`可以弹窗而eval`alert(1)`不能弹窗?

2.加了call方法的eval.call`${`alert(1)`}`和加了call方法的eval.call`alert(1)`同样里面都是字符串为什么一个可以执行一个却不可以执行?


前言

模板字面量是允许嵌入表达式的字符串字面量。你可以使用多行字符串和字符串插值功能在ECMAscript2015.06版本前被统称为模板字符串

1.ECMA

  • ecma是前欧洲计算机制造商协会的简称,后来因为计算机的广泛发展,为适应不同国家地域,体现组织的国际性,后来改称为ECMA国际,随着不断的发展,ECMA国际负责的任务也愈来愈加,如ISO-9660文件系统、C语言规范、C++语言标准,JavaScript为基础ecmascript规范等

2.带标签的模板字符串

2.1描述

2.2示例

eval`string${表达式}string`
#举例
(1)eval`alert(1)`#模板字符串,里面的alert(1)会被处理后放入数组中直接输出出来
(2)eval`aaa${alert(1)}bbb`
#执行过程:
1.首先执行模板字符串,alert(1)是一个函数被直接执行,而占位符左右的字符串会被处理成一个数组参数,alert(1)执行后的值为另一个参数但是执行后的为空值
2.然后eval开始执行数组参数,又因为数组值为["aaa","bbb"],所以它被原样输出

(3)eval.call`aaa${alert(1)}bbb`
#这里执行步骤为:
1.首先执行模板字符串,因为这里的占位符中是一个函数所以被直接执行,同时模板字符串会生成两个参数,一个参数是占位符左右的字符数组(["aaa","bbb"]),一个参数是alert(1)执行后的返回值
2.模板字符串生成的参数符合call语法(["aaa","bbb"],null)因为alert(1)被直接调用执行并没有返回值所以这里为空null
3.e
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值