ES6/ES11知识点 续一
模板字符串
在 ECMAScript(ES)中,模板字符串(Template Literals)是一种非常强大的字符串表示方式,它为我们提供了比传统字符串更灵活的功能,尤其是在处理动态内容时。模板字符串通过反引号(`)包裹,支持多种特性,如插入变量、表达式、支持多行字符串等。
基本语法
模板字符串使用反引号(`)而不是单引号(’)或双引号(”)来定义字符串:
let name = 'Alice';
let greeting = `Hello, ${name}!`;
console.log(greeting); // 输出: Hello, Alice!
在上面的例子中,${name} 是一个占位符,它会被 name 变量的值所替代。模板字符串的这种功能可以让我们轻松地拼接字符串,而无需使用传统的 + 操作符。
插入变量和表达式
模板字符串不仅能插入简单的变量,还能插入复杂的表达式。例如,你可以进行算术运算、调用函数或是执行逻辑判断:
let a = 5;
let b = 10;
let result = `The sum of ${a} and ${b} is ${a + b}`;
console.log(result); // 输出: The sum of 5 and 10 is 15let user = { name: 'Alice', age: 25 };
let userInfo = `${user.name} is ${user.age} years old.`;
console.log(userInfo); // 输出: Alice is 25 years old.
在这里,模板字符串中的 ${a + b} 会自动计算并替换成结果 15,而 ${user.name} 会替换为 Alice。
多行字符串
传统的字符串无法直接处理多行内容,通常需要使用转义字符(\n)来模拟换行。但模板字符串天然支持多行字符串,可以让你写出更加直观、可读的代码:
let multiline = `
This is a string
that spans multiple
lines.`;
console.log(multiline);
// 输出:
// This is a string
// that spans multiple
// lines.
在这个例子中,字符串的换行和缩进是自动保留的,无需额外的符号。
标签模板
标签模板(Tagged Templates)是模板字符串的高级用法。标签模板允许你在模板字符串前加上一个函数,该函数可以对模板字符串进行处理,甚至改变模板的内容。这对于处理自定义格式化、国际化或安全性(如防止 XSS 攻击)等场景非常有用。
标签模板的基本结构如下:
function tag(strings, ...expressions) {console.log(strings); // 模板字符串的文字部分console.log(expressions); // 模板字符串的表达式部分return 'Processed String';
}
let name = 'Alice';
let age = 25;let message = tag`Hello, ${name}. You are ${age} years old.`;
console.log(message); // 输出: Processed String
• strings 是一个数组,包含了模板字符串中所有的文字部分。
• expressions 是一个数组,包含了所有插入模板中的表达式。
你可以在标签函数中对 strings 和 expressions 进行任何操作,来定制输出的字符串。
嵌套模板字符串
模板字符串也可以嵌套,支持更复杂的表达式结构。例如,模板字符串可以包含其它模板字符串作为表达式:
let name = 'Alice';
let greeting = `Hello, ${`my name is ${name}`}`;
console.log(greeting); // 输出: Hello, my name is Alice
在这个例子中,${my name is ${name}} 表达式首先会被解析为 “my name is Alice”,然后再插入到外部的模板字符串中。
其他用法
1. 表达式中的函数调用:
你可以在模板字符串的占位符中直接调用函数:
function toUpperCase(str) {return str.toUpperCase();
}let name = 'Alice';
let message = `Hello, ${toUpperCase(name)}!`;
console.log(message); // 输出: Hello, ALICE!
2. 条件运算符:
模板字符串支持在占位符中使用条件运算符:
let age = 20;
let status = `You are ${age >= 18 ? 'an adult' : 'a minor'}.`;
console.log(status); // 输出: You are an adult.
3. 嵌套对象属性:
你可以直接在模板字符串中访问对象的嵌套属性:
let user = { profile: { name: 'Alice', age: 25 } };
let message = `Name: ${user.profile.name}, Age: ${user.profile.age}`;
console.log(message); // 输出: Name: Alice, Age: 25
总结
模板字符串提供了一种比传统字符串更简洁、更强大的方式来操作字符串。它不仅支持插入变量和复杂的表达式,还能轻松处理多行字符串,增强代码的可读性和可维护性。通过标签模板功能,模板字符串还能用于自定义处理、格式化和优化应用程序的输出。
简化对象写法
在 ECMAScript(ES6)中,简化对象写法是一个非常方便的特性,它使得创建对象变得更加简洁和直观。通过这一特性,你可以在定义对象时减少冗余的代码,使代码更加清晰和易于维护。
🧑💻 简化对象字面量的语法
在 ES6 之前,定义一个对象时,如果属性名和变量名相同,你需要手动写出属性名和变量值,如下所示:
let name = 'Alice';
let age = 25;let person = {name: name,age: age
};console.log(person); // 输出: { name: 'Alice', age: 25 }
在 ES6 中,你可以通过简化语法来去掉冗余的代码,只需要写出变量名,JavaScript 会自动推断属性名和值:
let name = 'Alice';
let age = 25;let person = {name,age
};console.log(person); // 输出: { name: 'Alice', age: 25 }
这里,name 和 age 的属性名会自动对应于同名的变量 name 和 age,无需再手动指定属性名。
🔄 简化函数写法
ES6 还简化了对象中函数的写法。你可以省略函数声明中的 function 关键字,而是直接使用简化的语法:
let person = {name: 'Alice',greet() {console.log('Hello, ' + this.name);}
};person.greet(); // 输出: Hello, Alice
在这个例子中,greet() 是对象 person 的一个方法,ES6 中你不再需要写 function greet(),而直接使用 greet()。
🔑 动态属性名
ES6 中还允许你动态地设置对象的属性名,这样可以在定义对象时使用表达式来作为属性名,而不是固定的字符串。这对于需要根据某些条件动态生成对象属性的场景非常有用。
let key = 'age';
let value = 25;let person = {name: 'Alice',[key]: value // 使用表达式作为属性名
};console.log(person); // 输出: { name: 'Alice', age: 25 }
这里,[key] 表示一个计算的属性名,它的值来自变量 key,最终对象的属性名是 age。
⚙️ 方法简写和计算属性名结合
你也可以将简化的对象方法写法与动态属性名结合使用,进一步提高代码的灵活性和简洁性:
let key = 'age';
let person = {name: 'Alice',[key]: 25,greet() {console.log(`Hello, ${this.name}`);}
};person.greet(); // 输出: Hello, Alice
console.log(person.age); // 输出: 25
在这个例子中,[key] 让你可以根据变量 key 的值动态地为对象添加属性,同时 greet() 方法的简写语法也让代码更加简洁。
🔁 对象解构与简化写法
对象解构是一种提取对象属性并简化赋值的方式,它与简化对象写法结合使用,能够让你更高效地获取对象的属性。你可以直接在变量定义时提取对象的属性值,并简化代码:
let person = {name: 'Alice',age: 25
};let { name, age } = person;console.log(name); // 输出: Alice
console.log(age); // 输出: 25
在这个例子中,{ name, age } 是对对象 person 的解构,它会自动提取 name 和 age 属性,并赋值给对应的变量 name 和 age。
🎯 总结
ES6 中的简化对象写法是一个非常有用的特性,能够大大减少代码的冗余,提高代码的可读性和可维护性。通过简化的语法,你可以更加直观地定义对象的属性、方法和动态属性名,同时结合对象解构,你可以高效地提取和赋值对象的属性。这个特性对于处理复杂对象时尤其有帮助。
关键点:
- 使用 简化属性写法:当属性名和变量名相同时,可以省略重复的部分。
- 使用 简化方法写法:可以省略 function 关键字,直接写方法名。
- 使用 动态属性名:可以通过表达式动态设置对象的属性名。
- 结合 对象解构,提高代码简洁性和易读性。
相关文章:
ES6/ES11知识点 续一
模板字符串 在 ECMAScript(ES)中,模板字符串(Template Literals)是一种非常强大的字符串表示方式,它为我们提供了比传统字符串更灵活的功能,尤其是在处理动态内容时。模板字符串通过反引号&…...
ES6入门---第二单元 模块二:关于数组新增
一、扩展运算符。。。 1、可以把ul li转变为数组 <script>window.onloadfunction (){let aLi document.querySelectorAll(ul li);let arrLi [...aLi];arrLi.pop();arrLi.push(asfasdf);console.log(arrLi);};</script> </head> <body><ul><…...
使用python加edge-tts实现文字转语音
文章目录 使用python加edge-tts实现文字转语音1. 使用 Python 安装 Edge-TTS2. 进一步优化3. 使用说明3.1 查看语音列表3.2 单语音转换3.3 批量生成所有语音3.4 改进亮点4. 使用教程最终代码文章创作不易使用python加edge-tts实现文字转语音 Edge-TTS(edge-tts Python 模块)本…...
如何用CSS实现HTML元素的旋转效果:从基础到高阶应用
在网页设计中,元素的动态效果能显著提升用户体验,而旋转效果是其中最常用的交互方式之一。CSS的transform属性提供了强大的旋转功能,结合动画(animation)和过渡(transition),开发者可…...
轻量级RTSP服务模块:跨平台低延迟嵌入即用的流媒体引擎
在音视频流媒体系统中,RTSP(Real-Time Streaming Protocol)服务模块通常扮演着“视频分发中心”的角色,它将编码后的音视频内容转为标准的流媒体格式,供客户端(播放器、云端平台、AI模块等)拉流…...
AVInputFormat 再分析
AVInputFormat 是 FFmpeg 中用于描述输入格式(如文件容器、设备流等)的核心结构体,属于 libavformat 库的一部分。其主要功能是定义解封装(demuxing)过程中如何解析不同格式的输入数据。以下是其关键特性与使用方式的总…...
wpf CommandParameter 传递MouseWheelEventArgs参数
在 WPF 中通过 CommandParameter 传递 MouseWheelEventArgs 参数时,需结合 事件到命令的转换机制 和 参数转换器 来实现。以下是具体实现方案及注意事项: 一、核心实现方法 1. 使用 EventToCommand 传递原始事件参数 通过 Interaction.Tr…...
摆脱养生误区泥沼,拥抱科学养生阳光
在养生的道路上,人们总是满怀热忱地追寻健康之道,然而,诸多似是而非的养生误区却如同泥沼一般,让不少人深陷其中,难以自拔。只有奋力摆脱这些误区的束缚,才能拥抱科学养生的温暖阳光,真正实现身…...
FreeRtos实战从入门到精通--任务创建和删除(动态方法)--事了拂衣去,深藏功与名
FreeRtos是之前的一些聪明的工程师写的免费且开源的嵌入式实时操作系统代码,由于我们实际工作中不需要再去写rtos,我们只需要用就行了,所以博主这里只分享项目工程实战相关的内容,具体rtos源码,可以无需理会࿰…...
卷积神经网络进化史:从LeNet-5到现代架构的完整发展脉络
摘要 本文系统梳理卷积神经网络(CNN)从诞生到繁荣的发展历程。从1998年Yann LeCun开创性的LeNet-5出发,重点解析2012年引爆深度学习革命的AlexNet,并详细拆解后续演进的五大技术方向:网络深度化(VGG)、卷积功能强化(ResNet)、检测任务迁移(F…...
《Qt C++ 项目中升级 GCC 版本的完整指南》
Qt C++ 项目中升级 GCC 版本的完整指南 在 Qt C++ 项目中升级 GCC 版本可能会影响编译工具链、Qt 库兼容性以及项目配置。以下是针对不同操作系统的升级步骤和注意事项: 一、为什么需要升级 GCC 版本? C++ 标准支持:新版本 GCC 支持 C++17/20 等新标准特性性能优化:编译速…...
Baklib赋能企业知识管理数字化转型
Baklib驱动知识智慧转化 在数字化浪潮中,企业知识资产的碎片化与低效流转已成为制约业务创新的核心瓶颈。Baklib作为新一代知识中台,通过构建智能化的知识治理体系,将分散的文档、数据与经验转化为可复用的业务智慧。其核心能力体现在多模态…...
LeetCode240. 搜索二维矩阵 II(巧妙转换)
编写一个高效的算法来搜索m x n矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目中最关键的信息就是每行从左到右升序,每列从左到右升序,如果暴力的话就用不到…...
AVFormatContext 再分析二
说明 :将 avfromatContext 的变量依次打印分析,根据ffmpeg 给的说明,猜测,结合网上的文章字节写测试代码分析二。 37 AVInputFormat *iformat; /** * The input container format. * * Demuxing only, set by avfo…...
leetcode0096. 不同的二叉搜索树-medium
1 题目:不同的二叉搜索树 官方标定难度:中 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出…...
【科研绘图系列】R语言绘制世界地图(map plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图输出图片系统信息介绍 【科研绘图系列】R语言绘制世界地图(map plot) 加载R包 library(ggmap) library(RColorBrewer) library(pals) …...
【原创】风云扫描王[特殊字符]OCR识别翻译!证件照
📣文字识别,文字提取,扫描翻译,证件扫描,表格识别,PDF加水印等一体的扫描应用。扫描任何东西,包括文件、纸质笔记、收据和书籍,把它们扫描成清晰的PDF文件和图像。使用OCR技术将图像…...
Fabrice Bellard(个人网站:bellard.org)介绍
Fabrice Bellard 是法国人,国际知名程序员。 Fabrice Bellard(个人网站:bellard.org)是计算机领域最具影响力的程序员之一,其贡献跨越多个技术领域并持续推动开源生态发展。以下是其关键成就与技术贡献的梳理&…...
Linux电源管理(5)_Hibernate和Sleep功能介绍
原文:Linux电源管理(5)_Hibernate和Sleep功能介绍 1. 前言 Hibernate和Sleep两个功能是Linux PM的核心功能,它们的目的是类似的:暂停使用——>保存上下文——>关闭系统以节电>恢复系统——>恢复上下文——>继续使用。 本文…...
【C/C++】Linux的futex锁
文章目录 Linux Futex1. 概述2. 核心设计思想3. Futex 系统调用接口4. 核心操作4.1 阻塞等待 (FUTEX_WAIT)4.2 唤醒线程 (FUTEX_WAKE)4.3 进阶操作 5. Futex 的使用场景5.1 实现用户态互斥锁 (Mutex)5.2 实现条件变量 (Condition Variable) 6. Futex 的优缺点7. Futex 与传统同…...
ChatGPT:重塑人工智能交互范式的破晓之作
2022年11月30日,总部位于旧金山的研究公司OpenAI正式发布了ChatGPT——一款以病毒式传播速度席卷全球的AI聊天机器人。它不仅能像人类一样生成内容、回答问题和解决问题,更在推出后的两个月内吸引了超过1亿月活跃用户,刷新了消费级技术应用的…...
java面向对象编程【高级篇】之特殊类
目录 🚀前言🌟final关键字💯常量 🦜单例类💯饿汉式单例类💯懒汉式单例类 ✍️枚举类🐍抽象类💯应用场景💯模版方法设计模式 ⚙️接口💯实现类💯接…...
JVM 一文详解
目录 JVM 简介 JVM 中的内存区域划分 1. 堆(一个进程只有一份 ------ 线程共享) 2. 栈(一个进程可以有 N 份 ------ 线程私有) Java 虚拟机栈: 本机方法栈: 3. 程序计数器(一个线程可以…...
PVD中断检测掉电
文章目录 概述配置掉电擦写注意 概述 STM32 PVD功能具体可以检测到上电、掉电瞬间,其处理方式有中断响应及事件响应。掉电设置为上升沿触发,上电为下降沿触发 配置 1.开启PVD中断并设置其优先级 2.配置响应中断或事件的阈值电压 3.配置响应模式 生成…...
Nginx — 防盗链配置
防盗链简述 防盗链是一种保护网络资源所有者权益的技术手段,旨在防止未经授权的用户或网站通过直接链接的方式盗用资源,以下是关于防盗链的简述: 原理 基于请求头验证:服务器通过检查请求头中的特定字段,如Referer字…...
题解:P2485 [SDOI2011] 计算器
### 思路 本题是一个比较模板化的题目。 #### 一操作 考虑使用快速幂。 快速幂,只需要把 $k$ 变成二进制即可实现 $\Theta(\log k)$ 的时间复杂度。 实现方法: cpp long long qmi(long long a,long long k,long long p){ long long res 1; …...
【算法刷题笔记day one】滑动窗口(定长基础版)
前言 hello大家好呀 好久不见,上次更新是去年12月份的事情了。这段时间好好沉淀了一下,打了几场比赛,论文也写了一些,也收集了不少信息,对未来方向也有了不一样的计划。 这个算法系列可以说是接着我之前的数据结构系…...
Redis从入门到实战实战篇2
面试重点:本篇包含悲观锁,乐观锁,多线程以及分布式锁的知识 目录 3.优惠卷秒杀 3.1 -全局唯一ID 3.2 -Redis实现全局唯一Id 3.3 添加优惠卷 3.4 实现秒杀下单 3.5 库存超卖问题分析 3.6 乐观锁解决超卖问题 3.7 优惠券秒杀-一人一单 …...
代码随想录算法训练营Day43
力扣300.最长递增子序列 力扣674.最长连续递增子序列【easy】 力扣1143.最长公共子序列【medium】 力扣718.最长重复子数组【medium】 一、力扣300.最长递增子序列【medium】 题目链接:力扣300.最长递增子序列 视频链接:代码随想录 题解链接:…...
Scrapy框架之【settings.py文件】详解
settings.py 文件的主要作用是对 Scrapy 项目的全局设置进行集中管理。借助修改这个文件中的配置项,你可以对爬虫的行为、性能、数据处理等方面进行灵活调整,而无需修改爬虫代码。 ①默认英文注释settings.py # Scrapy settings for douban project # …...
Nginx发布Vue(ElementPlus),与.NETCore对接(腾讯云)
案例资料链接:https://download.csdn.net/download/ly1h1/90745660 1.逻辑说明 1.1 逻辑示意图 # 前端请求处理逻辑图浏览器请求流程: 1. 浏览器发起请求├─ 开发环境(DEV)│ ├─ 请求URL: http://192.168.0.102:3000/api/xxx│ └─ 被Vite代理处理└─ 生产…...
深入探索 AAC 编码原理与 ADTS 格式:音频世界的智慧结晶
在数字音频的广阔领域中,AAC 编码及其相关的 ADTS 格式扮演着至关重要的角色。无论是在我们日常使用的音乐 APP,还是高清视频中的音频部分,都能看到它们的身影。今天,就让我们深入探索 AAC 编码原理与 ADTS 格式的奥秘,…...
深度学习核心架构:探明四种基础神经网络
摘要 本文对多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)和注意力机制等深度学习核心架构的内部运作机制进行可视化分析。通过展示参数学习过程、激活映射和注意力分布等关键特征,揭示了"黑箱"模型的内部工作原理,为模型可解释性研…...
解析机器人 2.0.2 | 支持超过50种短视频平台的链接解析,无水印提取,多功能下载工具
解析机器人是一款功能强大的工具软件,登录即可解锁会员特权。它支持超过50种短视频平台的链接解析,包括抖音、快手、西瓜、bilibili等,并能实现无水印提取。此外,还提供P2P下载、磁力链等多种下载方式,确保用户能够快速…...
【漫话机器学习系列】237. TSS总平方和
深度理解 TSS(总平方和):公式、意义与应用 在机器学习与统计建模领域,评价模型好坏的重要指标之一就是方差与误差分析。其中,TSS(Total Sum of Squares,总平方和)扮演着非常关键的角…...
flutter3.29 build.gradle.kts设置安卓签名
1、在android目录下创建key.properties文件 storePassword密码 keyPassword密码 keyAlias别名 storeFilejks文件完整路径 2、修改android/app/build.gradle.kts 顶部插入import java.util.Properties import java.io.FileInputStreamval keystoreProperties Properties() v…...
<servlet-class>和</url-pattern>的作用
在 SpringMVC 的 web.xml 配置中,<servlet-class> 和 <url-pattern> 是两个关键配置项,分别用于指定处理请求的 Servlet 类和定义该 Servlet 拦截的请求路径规则。以下是它们的具体作用及原理分析: 一、<servlet-class> 的…...
linux部署的mysql数据库修改表名为小写配置
背景: 使用ruoyi-flowable框架初始化流程表结构时, 执行的sql语句创建的表名是大写。但mysql执行sql时大小写是敏感的 删除大写表 处理配置 使用mysql 8.0.41配置表名大小写敏感配置,需要初始化数据库 在MySQL 8.0及以上版本中,lower_case_table_names参…...
【Hot 100】94. 二叉树的中序遍历
目录 引言二叉树的中序遍历我的解题代码优化更清晰的表述建议: 🙋♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】94. 二叉树的中序遍历❣️ 寄语:书到用时方恨少ÿ…...
基于D-Mixer与TransXNet的YOLOv8改进—融合全局-局部特征与空间降维注意力机制的CNN-ViT混合架构
随着目标检测任务对精度与效率要求的不断提升,传统的卷积神经网络(CNN)在建模长程依赖和复杂语义关系方面逐渐暴露出其局限性。而视觉Transformer(ViT)虽然在全局信息建模上表现优异,却因计算开销大、局部细节感知能力不足,在实时检测任务中难以直接部署。本文提出一种面向Y…...
《算法导论(第4版)》阅读笔记:p2-p3
《算法导论(第4版)》学习第 2 天,p2-p3 总结,总计 2 页。 一、技术总结 无。 二、英语总结(生词:1) 1.incremental (1) increase: in-(“in”) crescere “to grow” (2)increment (3)incremental: increment -al adj. incremental…...
基于Qlearning强化学习的电梯群控系统高效调度策略matlab仿真
目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 Q-learning强化学习原理 2.2 基于Q-learning的电梯群控系统建模 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作…...
嵌入式硬件篇---STM32F103C8T6STM32F103RCT6
文章目录 前言一、相同点内核与主频基础外设开发环境 二、不同点1. 存储容量2. 外设资源3. 封装与引脚 三、代码移植注意事项1. 内存与 Flash 限制Flash差异RAM调整 2. 外设差异外设缺失:GPIO 映射: 3. 中断向量表中断向量偏移 4. 时钟与总线配置APB分频…...
rhce第二次作业
任务目标 1.配置ssh实现A,B主机互相免密登录 2.配置nginx服务,通过多ip区分多网站 任务一 关闭防火墙 [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# systemctl stop firewalld.service A主机免密登录B主机 ### A主机生成密钥 [rootlocalh…...
Linux第20节 --- inode和文件系统
一、没有被打开的文件 如果一个文件没有被打开,那么该文件存储在哪里? 该文件是存储在磁盘当中的! 文件 文件内容 文件属性! 文件的内容是按照数据块存储的;文件的属性其实就是inode(是一个128字节的…...
LeetCode - 19.删除链表的倒数第N个结点
目录 题目 解法一 双指针算法 核心思想 执行流程 具体例子 代码 解法二 两次遍历法 核心思想 执行流程 具体例子 代码 题目 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 解法一 双指针算法 核心思想 利用双指针间隔固定距离(n1)&a…...
在 Ubuntu 上安装 cPanel
开始之前,请确保拥有一台 Ubuntu 服务器,推荐使用 Ubuntu 22.04 LTS。如果没有,可以查看免费服务器: 11个免费 VPS,够用一辈子了!(2025最新)Top 11 免费VPS推荐平台对比(…...
《Linux macOS :GCC升级方法》
GCC(GNU Compiler Collection)是广泛使用的编译器套件,升级到9以上版本可以获得更好的C17/20支持和性能优化。以下是不同Linux发行版和macOS的升级方法: Ubuntu/Debian 系统 添加工具链源 sudo apt update sudo apt install soft…...
C++ STL vector容器详解:从原理到实践
引言 亲爱的小伙伴们,今天我要和大家分享一个C编程中的"神器"——vector容器!作为STL(标准模板库)中最常用的容器之一,vector就像是一个"超级数组",既有数组的高效随机访问特性&#…...
[计算机网络]数据链路层
0 概论:数据链路层都干什么事,提供啥功能 比物理层再高一层就是数据链路层,咱们上一篇讲物理层,物理层直接接触传输介质,现在数据链路层是使用物理层的传输服务,然后实现更多的功能。物理层是只管把比特流…...