(8)ECMAScript语法详解


本系列教程目录Vue3+Element Plus全套学习笔记-目录大纲


文章目录

  • 第2章 ECMAScript
    • 2.1 ECMAScript 的发展历史
    • 2.2 什么是ES6
    • 2.3 ES6语法新特性
      • 2.3.1 变量声明let
      • 2.3.2 常量声明
      • 2.3.3 模板字符串
      • 2.3.4 函数默认参数
      • 2.3.5 箭头函数
      • 2.3.6 对象初始化简写
      • 2.3.7 解构
      • 2.3.8 Spread Operator
      • 2.3.9 import 和 export
        • 1)安装babel
        • 2)使用import和export

第2章 ECMAScript

ECMAScript 是一种由 Ecma 国际(Ecma International,前身为欧洲计算机制造商协会),在标准 ECMA-262 中定义的脚本语言规范。这种语言在万维网上应用广泛,它往往被称为 JavaScript 或 JScript,但实际上后两者是 ECMA-262 标准的实现和扩展。

这种语言在万维网上应用广泛,被视为网页浏览器中的核心语言。ECMAScript 的发展历程中,经历了多个版本的更新和演进。下面我们将逐一介绍这些版本。

尽管 JavaScript 和 JScript 与 ECMAScript 兼容,但包含超出 ECMAScript 的功能。

2.1 ECMAScript 的发展历史

版本发表日期与前版本的差异
11997年6月首版
21998年6月格式修正,以使得其形式与ISO/IEC16262国际标准一致
31999年12月新增强大的正则表达式,更好的词法作用域链处理, 新的控制指令,异常处理,错误定义更加明确,数据输出的格式化及其它改变
4放弃由于关于语言的复杂性出现分歧,第4版本被放弃。 其中的部分成为了第5版本及Harmony的基础;由ActionScript实现
ES52009年12月新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。 澄清了许多第3版本的模糊规范,并适应了与规范不一致的真实世界实现的行为。 增加了部分新功能,如getters及setters,支持JSON以及在对象属性上更完整的反射
5.12011年6月ECMAScript标5.1版形式上完全一致于国际标准ISO/IEC 16262:2011。
ES62015年6月ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6)。 作为最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。
72016年6月ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性
82017年6月ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性
92018年6月ECMAScript 2018 (ES2018),第 9 版,包含了异步循环,生成器,新的正则表达式特性和 rest/spread 语法。
102019年6月ECMAScript 2019 (ES2019),第 10 版
112020年6月ECMAScript 2020 (ES2020),第 11 版
122021年ECMAScript 2021 (ES2021),第 12 版
132022年ECMAScript 2022 (ES2022),第 13 版
142023年ECMAScript 2023 (ES2023),第 14 版

ECMAScript官网:https://ecma-international.org/publications-and-standards/standards/ecma-262/

2.2 什么是ES6

编程语言JavaScript是ECMAScript的实现和扩展 。ECMAScript是由ECMA(一个类似W3C的标准组织)参与进行标准化的语法规范。

ECMAScript标准不定义HTML或CSS的相关功能,也不定义类似DOM(文档对象模型)的[Web API],这些都在独立的标准中进行定义。ECMAScript涵盖了各种环境中JS的使用场景,无论是浏览器环境还是类似[node.js]的非浏览器环境。

ECMAScript标准的历史版本分别是1、2、3、5。

那么为什么没有第4版?其实,在过去确实曾计划发布提出巨量新特性的第4版,但最终却因想法太过激进而惨遭废除(这一版标准中曾经有一个极其复杂的支持泛型和类型推断的内建静态类型系统)。

ES4饱受争议,当标准委员会最终停止开发ES4时,其成员同意发布一个相对谦和的ES5版本,随后继续制定一些更具实质性的新特性。这一明确的协商协议最终命名为“Harmony”,因此,ES5规范中包含这样两句话:ECMAScript是一门充满活力的语言,并在不断进化中。未来版本的规范中将持续进行重要的技术改进。

ECMAScript 6.0(以下简称ES6)2015年6月正式发布。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

ES6的特性比较多,在 ES5 发布近 6 年(2009-11 至 2015-6)之后才将其标准化。两个发布版本之间时间跨度很大,所以ES6中的特性比较多。 在这里列举几个常用的:

  • 模块化
  • 箭头函数
  • 函数参数默认值
  • 模板字符串
  • 解构赋值
  • 延展操作符
  • 对象属性简写
  • Promise
  • Let与Const

2.3 ES6语法新特性

2.3.1 变量声明let

我们都是知道在ES6以前,var关键字声明变量。无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部)。这就是函数变量提升例如

function show(flag){if(flag){var test="hello";}console.log(test);
}show(true)

以上的代码实际上是:

function show(flag){var test;		//变量提升if(flag){test="hello";}console.log(test);
}show(true)

所以不用关心flag是否为true or false。实际上,无论如何test都会被创建声明。

接下来ES6主角登场:

我们通常用let和const来声明,let表示变量、const表示常量。let和const都是块级作用域。怎么理解这个块级作用域?在一个函数内部 ,在一个代码块内部。看以下代码

function show(flag){if(flag){// var test="hello";let test='hello';}//在这里访问不到console.log(test)
}
show(true)

2.3.2 常量声明

const 用于声明常量,看以下代码

//定义常量
const name='xiaohui';//常量不允许重新赋值
name='xiaolan'console.log(name)

2.3.3 模板字符串

es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点。

第一个用途,基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定。

let str1='xiaolan';
let str2='xiaobiao';//普通拼接方式
console.log(str1+'-hello-'+str2)//ES6 模板字符串
console.log(`${str1}-hello-${str2}`)

第二个用途,在ES5时我们通过反斜杠()来做多行字符串或者字符串一行行拼接。ES6反引号(``)直接搞定。

//ES6之前多行字符串
let str3 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\
bbbbbbb\n\
ccccccc'//ES6多行字符串
let str4 =`asdasdasdasd
asdasdasdasd
asdasdsadas`;console.log(str3)
console.log('------------------------')
console.log(str4)

2.3.4 函数默认参数

ES6为参数提供了默认值。在定义函数时便初始化了这个参数,以便在参数没有被传递进去时使用。看例子代码

function show(num=30){          //给函数参数默认值console.log(num)
}show()      //30
show(50)      //50

2.3.5 箭头函数

ES6很有意思的一部分就是函数的快捷写法。也就是箭头函数。

箭头函数最直观的三个特点。

  1. 不需要function关键字来创建函数
  2. 省略return关键字
  3. 继承当前上下文的 this 关键字

看下面代码:

function test1(a, b) {return a + b;
}//ES6定义函数
test2 = (a, b) => {return a + b;
}//如果函数中就一句话那么return可以省略
test3 = (a, b) => a + b;console.log(test1(10, 20));
console.log(test2(10, 20));
console.log(test3(10, 20));

2.3.6 对象初始化简写

ES5我们对于对象都是以键值对的形式书写,是有可能出现键值对重名的。例如

function showBook(name,author){return {name:name,author:author}
}//ES6新写法:如果key和val一样的话可以省略
function showBook2(name,author){return {name,author}
}console.log(showBook('《论语》','孔子'))
console.log(showBook2('《道德经》','老子'))

2.3.7 解构

数组和对象是JS中最常用也是最重要表示形式。为了简化提取信息,ES6新增了解构,这是将一个数据结构分解为更小的部分的过程。

ES5我们提取对象中的信息形式如下

const book = {name: '《孟子》', author: '孟子'
}
const name = book.name;
const book = book.author;
console.log(name + ' --- ' + author);

是不是觉得很熟悉,没错,在ES6之前我们就是这样获取对象信息的,一个一个获取。现在,ES6的解构能让我们从对象或者数组里取出数据存为变量,例如

const book = {name: '《大学》', author: '曾子'
}//ES6之前取值方式
// var name=book.name;
// var author=book.author;//ES6新方式,相当于同时定义了两个变量,分别取出person中对应的值
var {name, address} = book;console.log(name, author)var nums = [32, 54, 43, 49];
var [num1, num2, num3] = nums;console.log(num1);          //nums[0]
console.log(num2);          //nums[1]
console.log(num3);          //nums[2]

2.3.8 Spread Operator

ES6中另外一个好玩的特性就是Spread Operator【传播操作符】,也是三个点儿…接下来就展示一下它的用途。 组装对象或者数组

const books = ['大学', '中庸'];
const books2 = [...books, '论语', '孟子'];
console.log(books2)     // [ '大学', '中庸', '论语', '孟子' ]const user1 = {name: 'xiaohui', password:'admin'}
const user1 = {...info, age: 22,address: '湖北荆州'}
console.log(info2)      // { name: 'xiaohui',password:'admin', age: 22, address: '湖北荆州' }

2.3.9 import 和 export

1)安装babel

ES6+很多高级功能node是不支持的,就需要使用babel转换成ES5

(1)babel转换配置,项目根目录添加.babelrc 文件

{"presets" : ["es2015"]
}

(2)安装es6转换模块

npm install babel-preset-es2015 --save-dev

(3)全局安装命令行工具

npm install babel-cli -g

(4)将ES6语法转换为ES5:

# src: 源代码目录
# dist: 转码之后的目录
babel src -d dist
2)使用import和export

import用于导入模块、export用于导出模块。

ES6导入、导出的用法比较多样化,可以选择自己喜欢的用法来导入导出。

  • 第一种方式:

创建一个demo01文件夹,准备一个demo01.js

let show=function(){console.log("千里之行,始于足下。")
}export {show}            //将方法导出

创建demo02.js,导入demo01

import {fun} from './demo01'       //导入其他模块的方法fun()       //调用导入进来的方法

将ES6语法转换为ES5:

babel demo01 -d demo01_dist

执行程序:

node ./demo01_dist/demo02
  • 第二种方式:

修改demo01.js:

export function showContent_01() {console.log('上善若水,水善利万物而不争。')
}
export function showContent_02() {console.log('吾生也有涯,而知也无涯。')
}

修改demo02.js:

//只取需要的方法即可,多个方法用逗号分隔
import { showContent_01, showContent_02 } from "./demo01"
showContent_01()
showContent_02()

将ES6语法转换为ES5:

babel demo01 -d demo01_dist

执行程序:

node ./demo01_dist/demo02
  • 第三种方式:

修改demo01.js:

export default {showContent_01() {console.log('夫唯不争,故天下莫能与之争。')},showContent_02() {console.log('知者不言,言者不知。')}
}

修改demo02.js:

import content from "./demo01"
content.showContent_01()
content.showContent_02()

将ES6语法转换为ES5:

babel demo01 -d demo01_dist

执行程序:

node ./demo01_dist/demo02

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

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

相关文章

Android JNI开发中头文件引入的常见问题与解决方案​,提示:file not found

Android JNI开发中头文件引入的常见问题与解决方案 问题场景(新手易犯错误) 假设你在开发一个JNI项目,想要实现一个线程安全的队列(SafeQueue),于是直接在cpp目录下创建了safe_queue.h文件,并开…

C++静态与动态联编区别解析

在 C++ 中,静态联编(Static Binding)和动态联编(Dynamic Binding)是两种不同的函数调用绑定机制,核心区别在于确定函数调用的时机和多态性的支持。以下是详细解释: 1. 静态联编(Static Binding) 定义:在编译阶段确定函数调用与具体实现的关系。特点: 由编译器直接确…

如何批量为多个 Word 文档添加水印保护

在日常办公中,Word文档添加水印是一项重要的操作,特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能,但当需要一次性给多个Word文档添加水印时,手动操作显得非常繁琐且低效。为了提高效率,可…

【愚公系列】《Python网络爬虫从入门到精通》057-分布式爬取中文日报新闻数据

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…

Linux系统编程 day9 SIGCHLD and 线程

SIGCHLD信号 只要子进程信号发生改变&#xff0c;就会产生SIGCHLD信号。 借助SIGCHLD信号回收子进程 回收子进程只跟父进程有关。如果不使用循环回收多个子进程&#xff0c;会产生多个僵尸进程&#xff0c;原因是因为这个信号不会循环等待。 #include<stdio.h> #incl…

微信小程序拖拽排序有效果图

效果图 .wxml <view class"container" style"--w:{{w}}px;" wx:if"{{location.length}}"><view class"container-item" wx:for"{{list}}" wx:key"index" data-index"{{index}}"style"--…

hadoop三大组件的结构及各自的作用

1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系统&#xff0c;用于存储和管理海量数据。它具有高容错性、高吞吐量和可扩展性&#xff0c;能够在多个节点上存储和管理大规模数据 1.2架构&#xff1a;采用主从架构&#xff0c;由一个 NameNode 和多个 DataNode 组成。NameNode…

解决jupyter notebook修改路径下没有c.NotebookApp.notebook_dir【建议收藏】

文章目录 一、检查并解决问题二、重新设置默认路径创作不易&#xff0c;感谢未来首富们的支持与关注&#xff01; 最近在用jupyter notebook编写代码时&#xff0c;更新了一下Scikit-learn的版本&#xff0c;然后重新打开jupyter notebook的时候&#xff0c;我傻眼了&#xff0…

MCP Host、MCP Client、MCP Server全流程实战

目录 准备工作 MCP Server 实现 调试工作 MCP Client 实现 MCP Host 配置 第一步:配置支持 function calling的 LLM 第二步:添加MCP Server 一般有两种方式,第一种json配置,第二种直接是Command形式,我这里采用Command形式 第三步:使用MCP Server 准备工作 安装…

4.21—4.22学习总结 JavaWeb:HTML-CSS

Web&#xff1a;能够通过浏览器访问到的网站。 Web标准&#xff1a; HTML&#xff1a; vscode中进行注释的快捷键为ctrl斜线/ h1的字体最大&#xff0c;依次递减&#xff0c;只存在h1—h6。 超链接&#xff1a; 设置字体颜色&#xff1a; 方式三写一个css文件&#xff0c;将方…

Kaamel Agent: 基于EU AI Act的AI影响评估(AIIA)

1. 引言&#xff1a;安全视角下的AI监管 随着人工智能技术的快速发展和广泛应用&#xff0c;AI系统在为社会带来创新和效率的同时&#xff0c;也引发了诸多关于安全、隐私和合规的担忧。在这一背景下&#xff0c;全球范围内涌现出多种监管框架和标准&#xff0c;旨在确保AI系统…

Mongodb分布式文件存储数据库

文章目录 一、MongoDB 简介基本信息特点内部组件 二、MongoDB 部署1. 安装依赖2. 解压部署并配置环境变量3. 修改配置文件以及启动服务4.数据库权限管理 三、MongoDB 管理1. 角色权限2. 操作命令用户管理命令常用命令&#xff08;Mongo4.2.8&#xff09;数据库相关用户相关集合…

麒麟V10安装MySQL8.4

1、下载安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解压 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安装MySQL 3.1、卸载mariadb rpm -qa | grep mariadb rpm -e m…

Unreal如何使用后处理材质实现一个黑屏渐变效果

文章目录 前言相机后期处理材质创建材质相机设置动态修改FadeAlpha参数使用示例最后前言 UE5 开发VR ,如何通过PostProcess轻松实现黑屏渐变效果 最简单的办法,其实是使用一个半球形模型,遮挡住相机,然后控制这个半球形遮罩的颜色透明度,至少Unity中默认的Tunneling是这么…

其它生成式(对比列表生成式)

一、字典生成式&#xff1a; # keys[name, age, gender] # dic{key:None for key in keys} # print(dic) items[(name, Tom), (age, 18), (gender, male)] res{k:v for k,v in items if k ! gender} print(res) 二、集合生成式&#xff1a; keys[name, age, gender] set1{ke…

健身房管理系统(springboot+ssm+vue+mysql)含运行文档

健身房管理系统(springbootssmvuemysql)含运行文档 健身房管理系统是一个全面的解决方案&#xff0c;旨在帮助健身房高效管理其运营。系统提供多种功能模块&#xff0c;包括会员管理、员工管理、会员卡管理、教练信息管理、解聘管理、健身项目管理、指导项目管理、健身器材管理…

LeetCode 第 262 题全解析:从 SQL 到 Swift 的数据分析实战

文章目录 摘要描述题解答案&#xff08;SQL&#xff09;Swift 题解代码分析代码示例&#xff08;可运行 Demo&#xff09;示例测试及结果时间复杂度分析空间复杂度分析总结未来展望 摘要 在实际业务中&#xff0c;打车平台要监控行程的取消率&#xff0c;及时识别服务质量的问…

三生原理与现有密码学的核心区别?

AI辅助创作&#xff1a; 三生原理与现有密码学的核心区别 一、‌哲学基础与设计逻辑‌ ‌动态生成 vs 静态分析‌ 三生原理以“阴阳动态平衡”为核心&#xff0c;通过参数化生成&#xff08;如素数构造中的阴阳元联动公式&#xff09;模拟系统演化过程&#xff0c;而现有密码…

4.19-4.20学习总结 网络编程+反射+动态代理

网络编程&#xff1a; IPv6有2的128次方个ip。 端口号&#xff1a; 协议&#xff1a; UDP发送和接收消息&#xff1a; UDP的三种通信方式&#xff1a; 单播&#xff1a;一对一&#xff0c;一个发送端对应一个接收端 创建DatagramSocket对象 组播&#xff1a;一个发送端对应一…

Swiper、样式结构重用、GridGridItem

今日核心&#xff1a; 容器组件&#xff1a;Swiper、Grid\GridItem样式&结构重用&#xff1a;Builder、Extend、Styles 相关资源: 图片素材&#xff1a;&#x1f4ce;day01.zip 1. Swiper 1.1. 适用场景 首先来看看 Swiper 在什么情况下会用到 链接 Swiper组件提供滑…