ECMAScript新特性

news2024/11/17 8:52:38

代码

ECMAScript概述

ECMAScript 是脚本语言的标准化规范,也就是语言的语法。比如:怎样定义变量、怎样定义函数和逻辑运算等等。

那么ECMAScript 和 JavaScript 是何关系?
JavaScript 是ECMAScript 的扩展语言,JavaScript实现了ECMAScript。 比如在浏览器环境中 JavaScript 就是 ECMAScript 和 WebAPI的集合
在这里插入图片描述
ES(ECMAScript)于1997年被提出,2015年后基本保持一个版本的迭代

名称标准版本发布时间
ECMAScript2019(ES2019)102019年6月
ECMAScript2018(ES2018)92018年6月
ECMAScript2017(ES2017)82017年6月
ECMAScript2016(ES2016)72016年6月
ECMAScript2015(ES2015)62015年6月
ECMAScript5.1(ES5.1)5.12011年6月
ECMAScript5(ES5)52009年12月
ECMAScript4(ES4)4被放弃
ECMAScript3(ES3)31999年12月
ECMAScript2(ES2)21998年6月
ECMAScript1(ES1)11997年6月

ES2015 是最新ES标准比较典型的版本,主要在于

  • 相比ES5.1变化较大
  • 命名标准发生变化,按照年份命名

在有些书上或博客上对于ES6有两种意思,一种是特指(ES2015),另一种是泛指是指ES2015版本之后的所有版本。

ECMAScript新特性主要有以下内容:

  • 解决原有语法上的的一些问题和不足 (var)
  • 对原有语法进行增强 (对象解构)
  • 全新的对象、全新的方法、全新的功能(class、promsie)
  • 全新的数据类型和 数据结构(Symbol)

let 与块级作用域

作用域:某个成员能够起作用的范围。

在ES2015之前,ES只有两种作用域:

  • 全局作用域
  • 函数作用域

在ES2015后,又增加了块级作用域。块级作用域:使用{} 中间的作用域。

在ES2015前没块级作用域作用域的概念,在{} 内容使用var 定义的变量,在{}外也可以访问,这样对于复杂代码是非常不安全的。

if(true) {
    var foo_1 = "foo_1"
}
console.log(foo_1)        // foo_1

在块作用域内使用let 声明变量,在{} 外部是不可以访问的:

if(true) {
    let foo_2 = "foo_2"
}
// ReferenceError: foo_2 is not defined
console.log(foo_2)

在for 循环中会有会有两层嵌套的块级作用域,函数体中的作用域是嵌套在for 循环内部的单独的作用域

for(let i = 0;i < 3; i++) {
    let i = "foo_3"
    console.log(i)
}

上边代码我们可以简单的理解为下面:

let i = 0;
if(i < 3) {
    let i = "foo_3" 
    console.log(i)
}
i++
if(i < 3) {
    let i = "foo_3" 
    console.log(i)
}
i++

if(i < 3) {
    let i = "foo_3" 
    console.log(i)
}
i++

let 声明的变量不会变量提升,所以在使用之前必须先声明

console.log(foo_4)
var foo_4 = "foo_4"

console.log(foo_5)
let foo_5 = "foo_5"

为啥ES2015不把var 废掉?
因为考虑到兼容,原来很多项目还在使用var

const

用于生成只读属性。 声明之时,就要赋值;声明之后,不可修改内存指向

const foo_6 = "foo_6"
const foo_7 = {
    name: "hyb",
    age: 18
}

foo_7.name = "hsf";
// TypeError: Assignment to constant variable.
// foo_7 = {}

var、let 、const 使用指南?
不用var; 主用const; 辅用let

数组解构

当我们获取数组元素时,通常情况下通过下标获取

const arr = [100, 200, 300];
const firstObj = arr[0];
const secondObj = arr[1];

ES2015后我们可以通过数组解构获取元素。

const [arrFirst, arrSecond] = arr;

我们可以,获取指定位置的元素,剩余元素、和若获取元素为空时设置默认值

// 前面位置留空格
const [, arrSecond] = arr;

// 剩余元素
const [arrFirst, arrSecond2, ...rest] = arr;

// 默认值
const [arrFirst1,arrSecond3, arrThird, arrFour = 2] = arr;

console.log(arrSecond, rest ,arrFour)

对象解构

数组时根据索引位置进行解构, 对象要根据key值进行解构

const obj1 = {
    name: "hsf"
}

const name = "hyb";
// 如果我们提前已经定一个一个name 变量,肯定会冲突,那么起别名 和若解构出来为null, 设置默认值
const { name:nameAlias = "foo" , age = 2} = obj1;

console.log(nameAlias, age); 

参考资料ecma

  • ES新特性图
  • ecma

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

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

相关文章

项目管理逻辑:日志\周报\月报, 一直要求写, 有用吗?

目录 1.公司管控项目: 2.什么是项目的生命周期? 3.项目管控举例 3.1装修项目阶段划分 3.2研发项目 4.控制项目的核心 1.公司管控项目: 写周报,日报,项目问题照样失控, 其实本质上的问题就是 我们没有如何设置好项目的阶段和项目的里程碑. 项目管理的五个阶段 2.什么是…

Golang基本命令操作

在前两期【初探Golang语言之环境搭建】 和 【Golang语法总结与学习】&#xff0c;对环境搭建和基本语法有介绍&#xff0c;本篇对常用的命令进行学习和梳理&#xff0c;记录下来&#xff0c;方便备查。 一、Go 语言基本命令 // 编译&#xff0c;生成exe文件 go build // 移除…

家庭用户无线上网案例(AC通过三层口对AP进行管理)

组网需求 为一个家庭用户使用的网络架构。该家庭消费用户的上网流量大多是低速流量&#xff0c;例如浏览网页、玩游戏、看视频等。家庭成员使用的无线终端主要为手机、PC、电视机等。终端接入的数量正常情况下在10个以内&#xff0c;偶尔有家庭聚会等特殊情况&#xff0c;终端接…

微服务框架 SpringCloud微服务架构 11 自定义镜像 11.1 镜像结构

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构11 自定义镜像11.1 镜像结构11.1.1 镜像结构11.1.2 总结11 自定义镜像 11…

【人工智能与机器学习】——线性回归、逻辑回归与分类评价指标(学习笔记)

&#x1f4d6; 前言&#xff1a;线性回归&#xff08;Lincar Regression&#xff09;模型是最简单的线性模型之一&#xff0c;简而言之就像一元一次函数&#xff0c;是所有机器学习初学者的起点。而逻辑回归&#xff08;Logistic Regression&#xff09;则稍显复杂&#xff0c;…

微服务架构

单体架构 优点&#xff1a; 1&#xff1a;部署简单: 由于是完整的结构体&#xff0c;可以直接部署在一个服务器上即可。 2&#xff1a;技术单一: 项目不需要复杂的技术栈&#xff0c;往往一套熟悉的技术栈就可以完成开发。 3&#xff1a;用人成本低: 单个程序员可以完成业务接口…

k8s之Pod控制器详解

文章目录一、Pod控制器介绍1、什么是Pod控制器1.2、ReplicaSet(RS)1.3、Deployment(Deploy)1.3.1、重建更新1.3.2、滚动更新1.3.2、版本回退1.3.3、金丝雀发布1.4、Horizontal Pod Autoscaler(HPA)1.5、DaemonSet(DS)1.6、Job1.7、CronJob(CJ)一、Pod控制器介绍 Pod是kubernet…

c语言结构体看这篇文章就够啦(详细介绍结构体)

前言&#xff1a; c语言两大重要点&#xff0c;一个是指针&#xff0c;另一个就是结构体啦&#xff0c;这篇文章我将全面的介绍一下结构体&#xff0c;和他的使用&#xff0c;相信大家看完这篇以后定能对结构体有个深入的理解&#xff0c;并且会正确的使用它。 &#x1f49e; &…

智工教育:注册计量师一级和二级的科目一样吗?

注册计量师有二级、一级之分&#xff0c;其中二级考试所涉及的科目为《计量法律法规及综合知识》《计量专业实务与案例分析》&#xff0c;必须要在连续2年内考过&#xff0c;否则就要重新报考。 而一级的考试科目&#xff0c;则分别是《计量法律法规及综合知识》、《测量数据处…

H2/H∞半车悬架控制仿真分析

目录 前言 1.悬架模型 2.LMI求解 3.simulink仿真分析 3.1结论 前言 对于H2/H∞控制的鲁棒项相比不用多说&#xff0c;之前也写过两篇关于1/4车的H2/H∞控制文章&#xff0c;链接如下&#xff1a; 基于LMI的车辆主动悬架控制_Mr. 邹的博客-CSDN博客 基于MATLAB/Simulink的…

01-redis篇 两种数据储存持久化方式

目录 1. 背景: 2. 两种数据持久化方式 2.1 RDB存储机制 -> (1) 配置docker版redis -> (2) rdb默认开启, 配置如下 redis.conf 打开 ->(3)安全退出的模式 ->(4) save与bgsave 2.2 AOF持久化机制 ->(1) 修改redis.conf 开启aof储存机制 ->(2) 为什么要…

ahooks解决React闭包问题方法示例

这篇文章主要为大家介绍了ahooks解决React闭包问题方法示例详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff0c;祝大家多多进步&#xff0c;早日升职加薪 引言 本文是深入浅出 ahooks 源码系列文章的第三篇&#xff0c;这个系列的目标主要有…

ShardingSphere介绍

ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 设计哲学为 Database Plus&#xff0c;旨在构建异构数据库上层的标准…

项目管理逻辑:为什么职能部门官僚主义气息浓重?

目录 1.管理孤岛 2.业务部门和职能部门之间的关系 3.企业如何转型升级 3.1垂直管理模式 3.2精细管理模式 4.成熟企业的职能部门和组织部门 1.管理孤岛 职能部门办事状态 每个公司通常从管理的角度会划分很多个层级 . 不同层级之间通常会存在管理隔阂,也就是说不同的领…

HCIA笔记(2)

一、地址&#xff08;全球唯一、地址统一&#xff09; 1.MAC地址&#xff1a;芯片出厂时&#xff0c;厂家烧录进去的一个串号。48位二进制构成 2.物理地址&#xff1a;C8-CB-9E-6B-3A-41 --- 为了方便人类区分和识别&#xff0c;我们会将48位二进制转换为12位16进制表示 3.查…

logging java日志选择

文章目录hutoolsslf4japache logging[JDK logging](https://www.liaoxuefeng.com/wiki/1252599548343744/1264738568571776)logbacklog4j2hutools <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>…

一种在 Python 中实现更快 OpenCV 视频流的多线程方法

概述在本文中&#xff0c;我们将看到两个没有多线程的 Python 代码示例&#xff0c;用于从摄像头读取视频帧。我们将看到使用/不使用多线程获得的 FPS 的差异。什么是多线程&#xff1f;线程是进程中的一个执行单元。多线程是指通过在线程之间快速切换对 CPU 的控制&#xff08…

257.二叉树的所有路径

257.二叉树的所有路径 文章目录257.二叉树的所有路径题目题解技巧 - 参数的作用域巧妙的题解方法题目 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&a…

【Redis实战】GeoHash实现原理与基本使用

文章目录GeoHash可以解决什么问题&#xff1f;基于网格划分的最近邻查询GeoHash划分规则GeoHash的使用方式Redis GEOADD 命令语法示例Redis GEORADIUS 命令语法半径单位&#xff1a;可选性参数&#xff1a;示例Redis GEORADIUSBYMEMBER 命令语法示例Redis GEODIST 命令语法示例…

Android 面试中Binder必问,是否了解过?

1.简单介绍下binder binder是一种进程间通讯的机制 进程间通讯需要了解用户空间和内核空间 每个进程拥有自己的独立虚拟机&#xff0c;系统为他们分配的地址空间都是互相隔离的。 如两个进程需要进行通讯&#xff0c;则需要使用到内核空间做载体&#xff0c;内核空间是所有进…