JavaScript之ES6新特性02

news2025/2/25 10:14:05

模板字符串

        模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量 。

模版字符串特点 

  • 内容中可以直接出现换行符,即可以定义多行字符。
  • 支持变量的拼接
  • 模板字符串之中还能调用函数。

案例解说 

 案例1:
      let str = `<ul>
                    <li>沈腾</li>
                    <li>玛丽</li>
                    <li>魏翔</li>
                    <li>艾伦</li>
                    </ul>`
    var content = document.querySelector('.content')
    content.innerHTML = str
    //3. 变量拼接 模板字符串中嵌入变量,需要将变量名写在 ${} 之中。
    let lovest = '魏翔'
    let out = `${lovest}是我心目中最搞笑的演员!!`
    console.log(out)

运行结果: 

案例2: 
// 模板字符串中能调用函数
function fn() {
  return "Hello World";
  }
  console.log(`foo ${fn()} bar`)
  //输出 foo Hello World bar

// 如果大括号中的值不是字符串 将按照一般规则转换成字符串
// 如 大括号中的是一个对象 将默认调用 toString 方法
// 但是 如果模板字符串中的变量没有声明 则会报错

// var msg = `Hello,${name}`;
// 这里的name没有对象的值 相当于变量没有声明 故报错
// 但是如果加上'',那么大括号里的就成了字符串,会原样输出
var msg = `Hello,${'name'}`;
console.log(msg);//输出Hello,name

 运行结果:

 简化对象写法

         ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

例子: 

let name = '谭梦寻'
let change = function () {
  console.log('好好学习!!')
}

const school = {
  name,
  change, //方法也可以简写
  improve() {
    console.log('我们可以提高你的技能')
  }
}
//这种写法用于函数的返回值,将会非常方便。
function getPoint() {
  const x = 1
  const y = 10
  return { x, y }
}
console.log(getPoint())
// {x:1, y:10}

console.log(school)

运行结果:

rest参数 

         ES6 引入 rest 参数(形式为 ...变量名 ),用于获取函数的多余参数,这样就不需要使用 arguments 对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

 ES5 获取实参的方式与ES6对比

function person() {
  console.log(arguments)
}
person('谭梦寻', '小明', '小红')

// rest 参数
// 注意 这里会覆盖掉原来的函数
function person(...args) {
  console.log(args) // filter some every map
}
person('谭梦寻', '小明', '小红')

运行结果: 

注意事项: 

  • rest 参数必须要放到参数最后
  • 函数的 length 属性,不包括 rest 参数。
function aa(s, y, ...b) {
  console.log(b)
}
aa(2, 3, 4, 1, 23, 4) //输出[ 4, 1, 23, 4 ]
// 报错
// function f(a, ...b, c) {
//   // ...
//   }
console.log((function(a) {}).length);// 1
console.log((function(...a) {}).length);// 0
console.log((function(a, ...b) {}).length); // 1

 箭头函数

        ES6 允许使用「箭头」(=>)定义函数

var f = v => v;

上述代码等价于

var f = function(v) {
    return v;
};

使用说明:

  • 如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用 return 语句返回。 
  • 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
  • 如果箭头函数只有一行语句,且不需要返回值,就不用写大括号了

案例: 

省略花括号, 当代码体只有一条语句的时候, 此时 return 必须省略
// 而且语句的执行结果就是函数的返回值
let pow = (n) => n * n
// let num3 = (n) => return n-1;//报错
console.log(pow(8))
//箭头函数的代码块部分多于一条语句,
//就要使用大括号将它们括起来,并且使用 return 语句返回。
var sum = (num1, num2) => {
  num1 += 3
  return num1 + num2
}
// 如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
// let getStu = id => { id: id, name: "jack"};//报错
let getStu = id =>  ({id: id, name: "jack"});//正确
console.log(sum(1,1));
let fn = () => console.log("123")

var person = { first :"asd",last: '123'}
// 箭头函数可以与变量解构结合使用
const full = ({ first, last }) => first + ' ' + last;
console.log(full)
// 等同于
// function full(person) {
//    return person.first + ' ' + person.last;
// }

 注意事项:

(1)函数体内的 this 对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用 new 命令,否则会抛出一个错误。
(3)不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。
其中第一点尤其值得注意。 this 对象的指向是可变的,但是在箭头函数中,它是固定的,我们来说明一下:

/*
setTimeout 的参数是一个箭头函数,这个箭头函数的定义生效是在 foo 函数生成时
而它的真正执行要等到 100 毫秒后。如果是普通函数,
执行时 this 应该指向全局对象 window ,这时应该输出 21 。
但是,箭头函数导致 this 总是指向函数定义生效时所在的对象(本例是 {id: 42} )
所以输出的是 42 。
*/
function foo() {
  setTimeout(() => {
    console.log('id:', this.id)
  }, 100)
}
var id = 21
// call会改变函数的this指向
foo.call({ id: 42 }) // id: 42

/*
  Timer 函数内部设置了两个定时器,分别使用了箭头函数和普通函数。
  前者的 this 绑定定义时所在的作用域(即 Timer 函数)
  后者的 this 指向运行时所在的作用域(即全局对象)而全局对象并没有该计时器
  故普通函数中timer.s2 一次也没有更新
*/
function Timer() {
  this.s1 = 0
  this.s2 = 0
  // 箭头函数
  setInterval(() => this.s1++, 1000)
  // 普通函数
  setInterval(function () {
    this.s2++
  }, 1000)
}
var timer = new Timer()
// setTimeout 方法在停止后运行给定的函数。
// 它设置一个计时器,并在时间终止时执行给定的函数(回调)
setTimeout(() => console.log('s1: ', timer.s1), 3100) //s1:3
setTimeout(() => console.log('s2: ', timer.s2), 3100) //s2:0
// 通过handler定义 所以箭头函数里面的 this 总是指向 handler 对象
var handler = {
  id: '123456',
  init: function () {
    document.addEventListener('click', (event) => this.doSomething(event.type), false)
  },
  doSomething: function (type) {
    console.log('Handling ' + type + ' for ' + this.id)
  }
}

// 官方对箭头函数的内部转化解释
// ES6
function foo() {
  setTimeout(() => {
    console.log('id:', this.id)
  }, 100)
}
// 相当于 ES5
function foo() {
  var _this = this//这是解决使用箭头函数常用的this指向问题的方法
  setTimeout(function () {
    console.log('id:', _this.id)
  }, 100)
}

总结: 

  • 箭头函数适合与 this 无关的回调. 定时器, 数组的方法回调
  •  箭头函数不适合与 this 有关的回调.  事件回调, 对象的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#进程间消息传递

C#是一种流行的编程语言&#xff0c;它可以用于开发Windows应用程序。在开发Windows应用程序时&#xff0c;有时需要进行进程间通信&#xff0c;以实现不同进程之间的数据传递和交互。C#提供了多种方式来进行进程间消息传递&#xff0c;包括管道、共享内存、消息队列等。在本文…

chapter11-实战成绩通知短信系统(上)

恭喜各位同学&#xff01;当你看到这篇文章的时候&#xff0c;意味着你已经从刚开始的“一无所知”&#xff0c;变成了现在的“爬虫新手”&#xff01;在之前的文章中&#xff0c;我们从最基础的知识点讲起&#xff0c;一步一步的学习了怎么使用Python爬取我们想要获取的信息&a…

Angular系列教程之模板语法

文章目录 前言一、模板语法基础二、模板指令三、模板表达式四、模板语法示例五、注意事项五、总结 前言 Angular是一款流行的前端开发框架&#xff0c;它提供了许多功能和工具来简化前端开发过程。其中&#xff0c;模板语法是Angular中一个非常关键的组成部分&#xff0c;它可…

Leveraging Unlabeled Data for Crowd Counting by Learning to Rank

无标签人群技术&#xff0c;作者引入了一种排名。 利用的是一个图的人群数量一定小于等于包含这个图的图 生成排名数据集 作者提出了一种自监督任务&#xff0c;利用的是一个图的人群数量一定小于等于包含这个图的图 流程&#xff1a; 1.以图像中心为中心&#xff0c;划分一…

幻兽帕鲁保姆级搭建服务器,开服教程(LINUX)

一、购买与连接服务器 1.购买服务器 官方文档推荐的服务器要求CPU4核心内存8GB&#xff0c;所以我们要准备好一个4核8GB的服务器。(实测2核4GB的大概在5人左右就特别容易崩溃&#xff0c;CPU占用率在98%&#xff0c;内存占用很快就超过100%溢出&#xff0c;所以想要稳定最低最低…

从零开始的OpenGL光栅化渲染器构建4-延迟渲染及其类似应用

前言 首先介绍一下什么是延迟渲染。延迟渲染是一种先计算场景中的顶点、颜色、法线等信息&#xff0c;将其存入缓冲&#xff0c;再进行光照计算的渲染技术&#xff0c;与直接渲染是相对的概念。为了详细介绍延迟渲染&#xff0c;我们首先需要了解帧缓冲&#xff0c;以及帧缓冲…

C++入门学习(十)如何显示浮点数的完整形态

在C中&#xff0c;如果你想要显示浮点数的完整数字&#xff08;包括小数部分和指数部分&#xff09;&#xff0c;可以使用 std::setprecision 和 std::fixed 来设置精度和固定小数点表示&#xff1a; #include <iostream> #include <iomanip> // 必须包含这个头…

深入剖析:Kafka流数据处理引擎的核心面试问题解析75问(5.7万字参考答案)

Kafka 是一款开源的分布式流处理平台&#xff0c;被广泛应用于构建实时数据管道、日志聚合、事件驱动的架构等场景。本文将深入探究 Kafka 的基本原理、特点以及其在实际应用中的价值和作用。 Kafka 的基本原理是建立在发布-订阅模式之上的。生产者将消息发布到主题&#xff08…

Kafka-消费者-KafkaConsumer分析-Heartbeat

在前面分析Rebalance操作的原理时介绍到&#xff0c;消费者定期向服务端的GroupCoordinator发送HeartbeatRequest来确定彼此在线。 下面就来详细分析KafkaConsumer中Heartbeat的相关实现。 首先了解一下心跳请求和响应的格式。HeartbeatRequest的消息体格式比较简单&#xff…

CTFhub-bak文件

CTFhub-Web-信息泄露-备份文件下载-bak文件 题目信息 解题过程 看到提示说和index.php有关&#xff0c;在url后面加index.php.bak&#xff0c;跳转到http://challenge-7a4da2076cfabae6.sandbox.ctfhub.com:10800/index.php.bak网址&#xff0c;即&#xff1a; 跳转到下载页…

安装ddddocr中遇到的问题

1、需要先安装&#xff1a; pip3 install pyinstaller --no-use-pep517 pip install scikit-build pip install setuptools pip install pyinstaller pip install pillow 重要是的是保证一个python 环境&#xff0c;多个python环境会导致各种问题。并且保证python>3.8…

万辰集团十年经营首度亏损,泡沫式增长是喜是忧?

2023年&#xff0c;线下消费回暖复苏&#xff0c;零售领域更是繁花似锦。以量贩零食为代表的新业态蓬勃发展&#xff0c;引得众多资本和企业纷至沓来。 这一背景下&#xff0c;作为新兴量贩零食的典型代表之一&#xff0c;福建万辰生物科技集团股份有限公司&#xff08;以下简…

JavaEE中的监听器的作用和工作原理

在JavaEE&#xff08;Java Platform, Enterprise Edition&#xff09;中&#xff0c;监听器&#xff08;Listener&#xff09;是一种重要的组件&#xff0c;用于监听和响应Web应用程序中的事件。监听器的作用是在特定的事件发生时执行一些自定义的逻辑。常见的监听器包括Servle…

vue3中Fragment特性的一个bug,需要留意的注意事项

vue3中的Fragment 模版碎片特性是什么&#xff0c;简单的理解就是template模板代码不在像vue2中那样必须在根节点在包裹一层节点了。 vue2写法 <template><div><h1>标题</h1><p>正文内容</p></div> </template>vue3写法 &l…

医学图像的数据增强技术 --- 切割-拼接数据增强(CS-DA)

医学图像的新型数据增强技术 CS-DA 核心思想自然图像和医学图像之间的关键差异CS-DA 步骤确定增强后的数据数量 代码复现 CS-DA 核心思想 论文链接&#xff1a;https://arxiv.org/ftp/arxiv/papers/2210/2210.09099.pdf 大多数用于医学分割的数据增强技术最初是在自然图像上开…

滑动窗口求连续数列最大值(固定窗长和非固定窗长)

非固定窗长 思路&#xff1a; sum 0&#xff0c;max num[0], 依次遍历一个一个往前加&#xff0c;sum sum num[i], 如果sum[i] 小&#xff0c;则替换sum 如果sum > max&#xff0c; 则max sum; int maxSubArray(int* nums, int numsSize){int max nums[0];int sum …

圆的参数方程是如何推导的?

圆的参数方程是如何推导的? 1. 圆的三种参数表示2. 三角函数万能公式3. 回到圆的参数方程1. 圆的三种参数表示 已知圆的第一种参数方程为: x 2 + y 2 = r x^2+y^2=r x2+y2=r   圆的图像如下: 通过上图,不难理解,圆的参数方程还可以用三角函数表示,也就是第二种参数表…

从零开始配置pwn环境:sublime配置并解决pwn脚本报错问题

1.sublime安装 Download - Sublime Text ──(holyeyes㉿kali2023)-[~] └─$ sudo dpkg -i sublime-text_build-4169_amd64.deb [sudo] password for holyeyes: Selecting previously unselected package sublime-text. (Reading database ... 409163 files and directori…

大创项目推荐 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的驾…

(超详细)9-YOLOV5改进-添加EffectiveSEModule注意力机制

1、在yolov5/models下面新建一个EffectiveSEModule.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import torch from torch import nn as nn from timm.models.layers.create_act import create_act_layerclass EffectiveSEModule(nn.Module):def __init__…