ES6 、ESNext 规范、编译工具babel
ES6 、ESNext 规范、编译工具简介
- ES6
- ES(ECMAScript) vs JS
- 常量
- 进一步探讨 obj对象的扩展
- 面试:使对象属性也不能更改——Object.freeze(obj)
- 解构deconstruction
- 变量的解构赋值:
- 数组解构赋值:
- 对象解构赋值:
- 字符串解构赋值:
- 数值和布尔值的解构赋值:
- 函数参数的解构赋值:
- 箭头函数 arrow_function
- 箭头函数this指向的规则:
- 应用:
- class
- 属性定义
- 变量的只读
- 如何实现私有属性
- 适配器模式
- 静态属性
- 编译 babel
ES6
ES(ECMAScript) vs JS
ES(ECMAScript)是JS(JavaScript)的一个
规范或者标准,而JS则是ES的实现。
JS类似方言,ES是一个统一规范。
具体来说:
JavaScript是一种在浏览器中运行的
脚本语言,用于实现网页的交互功能。
而ECMAScript 是 JavaScript 的标准化版本,由欧洲计算机制造商协会(ECMA)制定并维护
//ECMA概念与JS的发展史
常量
发展路径var => defineProperty => const
1.不允许重复声明 / 不能更改常量
在ES5中:Object.defineProperty()
Object.defineProperty(window,'arg2',{value:'yy',writable: false
})
console.log(arg2); // yy
arg2 = 'student'// =>不会报error
console.log(arg2)// yy
在ES6中:
const arg3 = 'yy'
console.log(arg3)
arg3 ='student' // ERROR: arg3 => 禁止更改常量
2.const无变量声明提升/ dead zone—暂时性死区
if(true){console.log(arg3) // errorconst arg3= 'yy'
}
3.const对象—不变的是地址:
在vue3中,const a = ref(5)创建的是一个对象,可改变a.value

进一步探讨 obj对象的扩展
在大佬开发中,只要是对象类型,大部分使用const声明可变属性的对象。

只要地址不改变,都是常量。
对象更改可使用let newObj = Object.assign(obj1空对象,obj2)来实现。
Object.assign 对象的合并(相同属性后者会覆盖前者)
面试:使对象属性也不能更改——Object.freeze(obj)
浅冻结对象or数组


不能修改属性,不能删除属性,不能添加属性。
冻结后,对象可执行属性的增改等代码,但不算数。
追问:只能冻结当前层级 => 如何破局?=> 递归每一层冻结
现象如下:

处理如下:

解构deconstruction
提高开发效率,减少代码重复书写。
变量的解构赋值:
解构不成功:变量的值等于undefined;
//解构不成功:
let [x] = []
console.log(x) => undefined
不完全解构:等号左边匹配右边一部分。
默认值:当右侧严格等于undefined时,取默认值。默认值可以引用解构赋值的其它变量,但该变量必须已经声明。
只要有可能,就不要在模式中放置圆括号()

数组解构赋值:
数组的元素按次序排列,变量取值由他的位置决定;
对象解构赋值:
对象的属性没有次序,变量须与属性同名才能取到正确值(否则等于undefined)。
对象解构赋值是下面简写:(实际内部机制先找到同名属性,再赋值给对应变量。真正赋值的是后者,非前者。)


字符串解构赋值:
字符串被转换成了类似数组的对象。
const [a,b,c,d,e] = ‘hello’;
类似数组的对象都有一个length属性,因此还可以对length属性进行解构赋值。
let {length: len} = ‘hello’; // len :5
数值和布尔值的解构赋值:
如果等号右边是数值和布尔值,则会先转换为对象。

解构赋值的规则是:只要等号右边的值不是对象或数组,就先将其转为对象。
由于undefined和null无法转为对象,所以对它们进行解构赋值会报错。
函数参数的解构赋值:
函数参数可以使用解构赋值;也可以使用默认值。
箭头函数 arrow_function
箭头函数
没有自己的this,它所谓的this捕获的是它所在上下文的this值。 (this指向函数声明时所在作用域下的this值。)
不能作为构造函数。无法new。不能使用arguments变量。
简写:当形参只有一个时可省略小括号;当代码体只有一条语句时可省略花括号,此时return也必需省略。
箭头函数this指向的规则:
- 继承外层函数的this:箭头函数没有自己的this,它的this是继承自外层第一个普通函数的this。例如,在一个函数中定义箭头函数,箭头函数的this将继承自该普通函数的this2。
- 全局环境:在全局环境下,箭头函数的this指向全局对象(如window)。但在严格模式下,全局普通函数的this指向undefined34。
- 定时器:在setTimeout或setInterval中,箭头函数的this指向全局对象(如window)
是一个泛式,它不具备独立上下文
getCourse中this指向的是windowconst obj = {teacher:'yy',getTeacher:function(){console.log('function',this.teacher)},course:'es',getCourse:()=>{ console.log('course',this)}}
应用:
适合与this无关的回调,定时器、数组的方法回调;
arr.map()
不适合与this有关的回调,事件回调,对象的方法。
例如不适合:
dom操作:

不适合作为构造函数—类操作。
class
助力了js更加面向对象的能力。
在 es5中:通过构造函数

在 es6中:通过class
本质还是一个方法,更面向对象,易读

属性定义
变量的只读
如何实现私有属性

适配器模式

静态属性
编译 babel
新语法老古董浏览器不去主动兼容,我们怎么办
思路转变: 写浏览器友好的代码 => 写开发者友好的代码
如何在项目中使用和集成babel翻译官
- 手动挡 过程编译、脚本打包
- 管道型工具 监听变化加工
- 工程化继承
相关文章:
ES6 、ESNext 规范、编译工具babel
ES6 、ESNext 规范、编译工具简介 ES6ES(ECMAScript) vs JS常量进一步探讨 obj对象的扩展面试:使对象属性也不能更改——Object.freeze(obj) 解构deconstruction变量的解构赋值:数组解构赋值:对象解构赋值:…...
DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释
中文版 本文详细介绍 DeepSpeed 配置文件,结合 4 卡 3090 的实际使用场景,重点解释各个参数的含义,并提供应对爆显存的方案。 DeepSpeed 配置文件详解:从基础到实战 DeepSpeed 是用于加速大规模分布式训练的重要工具,…...
前端JavaScript(一)---基本介绍
Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对…...
文本处理之sed
1、概述 sed是文本编辑器,作用是对文本的内容进行增删改查。 和vim不一样,sed是按行进行处理。 sed一次处理一行内容,处理完一行之后紧接着处理下一行,一直到文件的末尾 模式空间:临时储存,修改的结果临…...
uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?
在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…...
计算机网络 实验七 NAT配置实验
一、实验目的 通过本实验理解网络地址转换的原理和技术,掌握扩展NAT/NAPT设计、配置和测试。 二、实验原理 NAT配置实验的原理主要基于网络地址转换(NAT)技术,该技术用于将内部私有网络地址转换为外部公有网络地址,从…...
数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!
文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...
【kafka04】消息队列与微服务之Kafka 图形工具
Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…...
剖析前后端 API 接口参数设计:JSON 数据结构化全攻略
在当今软件开发领域,前后端分离架构已成为主流趋势。而 API 接口作为前后端之间数据交互的桥梁,其设计的合理性对系统的可维护性和扩展性起着至关重要的作用。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式&…...
vue3 多种方式接受props,定义ref,reactive
定义props 1 第一种 interface AddType { dialogStudyVisible: boolean; } const props defineProps<AddType>(); 第二种 // const props defineProps({ // dialogStudyVisible:{ // type:Boolean, // default:false // } // }) 第三种 // const …...
逻辑处理器核心指纹修改
navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义: third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…...
如何制作项目网页
一、背景 许多论文里经常会有这样一句话Supplementary material can be found at https://hri-eu.github.io/Lami/,这个就是将论文中的内容或者补充视频放到一个网页上,以更好的展示他们的工作。因此,这里介绍下如何使用前人提供的模板制作我…...
mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
随笔 从千万粉丝“何同学”抄袭开源项目说起,为何纯技术死路一条? 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 我们的系统应该配置哪些监控报警项? 监控报警系统如何实现自监控? java 老矣,尚能饭否ÿ…...
1、正则表达式
grep匹配 grep用来过滤文本内容,以匹配要查询的结果。 grep root /etc/passwd:匹配包含root的行 -m 数字:匹配几次后停止 -v:取反-i:忽略字符的大小写,默认的,可以不加-n:…...
Airsim安装问题:This project was made with a different version of the Unreal Engine.
本文记录如何在 Ubuntu 18.04 系统中配置 AirSim 和 Unreal Engine 4.27,并成功打开默认的 Blocks 环境项目。 环境说明 系统:Ubuntu 18.04Unreal Engine 版本:4.27AirSim:主分支文件路径: Unreal Engine:…...
java八股-分布式服务的接口幂等性如何设计?
文章目录 接口幂等token Redis分布式锁 原文视频链接:讲解的流程特别清晰,易懂,收获巨大 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 https://www.bilibili.com/…...
vscode python code runner执行乱码
打开vscode code runner插件配置,如图所示: 然后在setting.json修改运行python的默认命令: 将原来 替换成 "python":"set PYTHONIOENCODINGutf8 && python", 参考:Vscode——python环境输出中文乱…...
Java中的继承详解
在Java编程中,继承(Inheritance)是一种面向对象编程(OOP)的核心概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承&a…...
kafka进阶_2.存储消息
文章目录 一、存储消息介绍二、副本同步2.1、数据一致性2.2、HW在副本之间的传递 如果想了解kafka基础架构和生产者架构可以参考 kafka基础和 Kafka进阶_1.生产消息。 一、存储消息介绍 数据已经由生产者Producer发送给Kafka集群,当Kafka接收到数据后,…...
如何启用本机GPU硬件加速猿大师播放器网页同时播放多路RTSP H.265 1080P高清摄像头RTSP视频流?
目前市面上主流播放RTSP视频流的方式是用服务器转码方案,这种方案的好处是兼容性更强,可以用于不同的平台,比如:Windows、Linux或者手机端,但是缺点也很明显:延迟高、播放高清或者同时播放多路视频视频容易…...
如何用开源工具Lano Visualizer让桌面音乐体验“看得见“?[特殊字符]
如何用开源工具Lano Visualizer让桌面音乐体验"看得见"?🎵 【免费下载链接】Lano-Visualizer A simple but highly configurable visualizer with rounded bars. 项目地址: https://gitcode.com/gh_mirrors/la/Lano-Visualizer 在数字时…...
从内核恐慌到系统恢复:一次NMI watchdog触发的soft lockup深度诊断
1. 当服务器突然卡死:从NMI watchdog错误说起 那天下午3点,机房警报突然响起。我冲到服务器前,屏幕上赫然显示着刺眼的红色错误:"NMI watchdog: BUG: soft lockup - CPU#2 stuck for 23s!"。这台承载着核心业务的服务器…...
5G FR1与FR2频段下,SSB的Kssb子载波偏移配置实战与避坑指南
5G FR1与FR2频段下SSB的Kssb子载波偏移配置实战与避坑指南 在5G网络部署中,同步信号块(SSB)的配置直接关系到终端设备能否成功接入网络。其中,Kssb子载波偏移参数在不同频段(FR1与FR2)下的取值范围和单位存…...
手把手教你用C8051F330自制BLheli电调:从测绘XP-12A到暴力测试70涵道
从零构建BLheli电调:C8051F330硬件逆向与70涵道暴力测试全指南 当你拆开一台现成的航模电调,看到里面密密麻麻的元件时,是否想过自己也能从头打造一个?本文将带你深入电调硬件设计的核心,从测绘商业电调XP-12A开始&…...
告别图形界面:在Linux终端中高效管理百度网盘文件的完整指南
1. 为什么需要命令行管理百度网盘? 很多开发者都遇到过这样的场景:远程连接到Linux服务器时,需要快速上传日志文件到网盘,或者从网盘下载数据集到服务器。传统做法是先把文件下载到本地电脑,再用SFTP工具上传到服务器—…...
哔哩下载姬完全指南:从入门到精通的全能B站视频下载方案
哔哩下载姬完全指南:从入门到精通的全能B站视频下载方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
CODE-II:百万级心电图AI评估基准与深度学习模型实践
1. 项目概述:当心电图遇上AI,我们如何量化“看懂”的能力?心电图,这个在临床诊断中司空见惯的波形图,背后是心脏每一次搏动的电生理活动记录。医生们通过识别P波、QRS波群、T波的形态、间期和节律,来判断心…...
轻量级容器化部署工具Ship:简化中小团队应用部署流程
1. 项目概述:一个面向开发者的轻量级容器化部署工具最近在和朋友聊起中小团队或个人开发者的部署痛点时,大家普遍觉得,虽然Kubernetes(K8s)生态强大,但对于一个快速迭代的独立项目或小团队来说,…...
Google Docs接入Gemini后,这6类高频写作场景效率飙升210%(附可复制Prompt库)
更多请点击: https://intelliparadigm.com 第一章:Gemini深度集成Google Docs的底层机制解析 Gemini 与 Google Docs 的深度集成并非简单的 API 调用叠加,而是依托 Google 的统一 AI 基础设施(AISI)和文档实时协作协议…...
开发者技能图谱:如何利用GitHub仓库系统化规划技术学习路径
1. 项目概述:一个面向开发者的技能图谱与学习路径仓库最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫tayyabexe/skills。乍一看名字,你可能会觉得这又是一个“Awesome-XXX”式的资源列表合集。但点进去仔细研究后,我…...
