当前位置: 首页 > news >正文

ECMAScript 详解

ECMAScript 详解

ECMAScript(ES)是JavaScript的标准化脚本语言,由ECMA国际通过ECMA-262标准进行规范。ECMAScript定义了语法、类型、对象模型和内置对象等基本特性,是JavaScript、JScript和ActionScript等语言的核心部分。

以下是对ECMAScript的详细介绍,包括其历史、版本、语法、类型、对象、函数和重要特性。

历史和版本

ECMAScript的历史始于1995年,当时Netscape公司推出了JavaScript。为了标准化脚本语言,Netscape向ECMA国际提交了JavaScript的规范,于1997年发布了第一版ECMAScript标准。

主要版本及特性:

  1. ECMAScript 1 (ES1) - 1997: 初版标准,定义了基本语法和对象。
  2. ECMAScript 2 (ES2) - 1998: 小幅修订,主要是对ES1的修正。
  3. ECMAScript 3 (ES3) - 1999: 添加了正则表达式、try/catch异常处理、严格模式等。
  4. ECMAScript 4 (ES4): 由于争议未正式发布。
  5. ECMAScript 5 (ES5) - 2009: 严格模式、JSON支持、Array方法等。
  6. ECMAScript 2015 (ES6) - 2015: 又称ECMAScript 6或ES6,包含类、模块、箭头函数、let/const、Promise等众多新特性。
  7. ECMAScript 2016 (ES7) - 2016: 包含指数运算符(**)和Array.prototype.includes方法。
  8. ECMAScript 2017 (ES8) - 2017: async/await、Object.values、Object.entries等。
  9. ECMAScript 2018 (ES9) - 2018: 异步迭代器、Promise.finally、正则表达式改进等。
  10. ECMAScript 2019 (ES10) - 2019: Array.prototype.flat, Object.fromEntries, String.prototype.trimStart/trimEnd等。
  11. ECMAScript 2020 (ES11) - 2020: Nullish coalescing operator (??), Optional chaining (?.), Promise.allSettled等。
  12. ECMAScript 2021 (ES12) - 2021: String.prototype.replaceAll, WeakRefs, Logical Assignment Operators等。
  13. ECMAScript 2022 (ES13) - 2022: Top-level await, Class Fields, Private Methods等。

语法和基本类型

基本语法

ECMAScript的语法与C语言和Java相似。以下是一些基本语法示例:

// 变量声明
let x = 10;
const y = 20;// 条件语句
if (x < y) {console.log("x is less than y");
} else {console.log("x is not less than y");
}// 循环
for (let i = 0; i < 5; i++) {console.log(i);
}
数据类型

ECMAScript有七种基本数据类型:

  1. Number: 数值类型,包括整数和浮点数。
  2. String: 字符串类型,用于表示文本。
  3. Boolean: 布尔类型,只有truefalse两个值。
  4. Object: 对象类型,可以包含多个属性和方法。
  5. Undefined: 声明了变量但未赋值时的类型。
  6. Null: 表示空值。
  7. Symbol: ES6引入的一种独特且不可变的数据类型。
let num = 42; // Number
let str = "Hello"; // String
let bool = true; // Boolean
let obj = { key: "value" }; // Object
let und; // Undefined
let nul = null; // Null
let sym = Symbol("unique"); // Symbol

对象

对象是ECMAScript的核心部分,可以通过对象字面量、构造函数或类创建。

对象字面量
let person = {name: "John",age: 30,greet: function() {console.log("Hello, my name is " + this.name);}
};person.greet();
构造函数
function Person(name, age) {this.name = name;this.age = age;
}Person.prototype.greet = function() {console.log("Hello, my name is " + this.name);
};let john = new Person("John", 30);
john.greet();
类(ES6)
class Person {constructor(name, age) {this.name = name;this.age = age;}greet() {console.log(`Hello, my name is ${this.name}`);}
}let john = new Person("John", 30);
john.greet();

函数

函数是ECMAScript中的一等公民,可以以函数声明或函数表达式的方式定义。

函数声明
function add(a, b) {return a + b;
}console.log(add(2, 3));
函数表达式
const subtract = function(a, b) {return a - b;
};console.log(subtract(5, 3));
箭头函数(ES6)
const multiply = (a, b) => a * b;console.log(multiply(4, 5));

重要特性

模块(ES6)
// 导出模块
// module.js
export const pi = 3.14;
export function add(a, b) {return a + b;
}// 导入模块
// main.js
import { pi, add } from './module.js';console.log(pi);
console.log(add(2, 3));
Promise
const promise = new Promise((resolve, reject) => {setTimeout(() => {resolve("Success!");}, 1000);
});promise.then((value) => {console.log(value);
}).catch((error) => {console.log(error);
});
async/await(ES8)
function fetchData() {return new Promise((resolve) => {setTimeout(() => {resolve("Data fetched");}, 1000);});
}async function getData() {const data = await fetchData();console.log(data);
}getData();
解构赋值(ES6)
// 数组解构
let [a, b] = [1, 2];
console.log(a, b);// 对象解构
let { name, age } = { name: "John", age: 30 };
console.log(name, age);
扩展运算符(ES6)
// 数组展开
let arr = [1, 2, 3];
let newArr = [...arr, 4, 5];
console.log(newArr);// 对象展开
let obj = { a: 1, b: 2 };
let newObj = { ...obj, c: 3 };
console.log(newObj);

总结

ECMAScript作为JavaScript的标准,在不断演进中引入了许多新特性和改进,使得JavaScript变得更加强大和易用。理解和掌握ECMAScript的各个版本特性和使用方法,对于前端开发者来说至关重要。通过以上详解,希望能够帮助更好地理解和使用ECMAScript。

相关文章:

ECMAScript 详解

ECMAScript 详解 ECMAScript&#xff08;ES&#xff09;是JavaScript的标准化脚本语言&#xff0c;由ECMA国际通过ECMA-262标准进行规范。ECMAScript定义了语法、类型、对象模型和内置对象等基本特性&#xff0c;是JavaScript、JScript和ActionScript等语言的核心部分。 以下…...

使用Java Swing制作一个飞翔的小鸟游戏

文章目录 一、需求分析二、技术介绍2.1相关技术2.2开发环境 三、功能实现1、开始2、运动3、死亡 四、部分代码实现获取源码 文章最下方获取源码&#xff01;&#xff01;&#xff01; 文章最下方获取源码&#xff01;&#xff01;&#xff01; 文章最下方获取源码&#xff01;&…...

leetcode 684.冗余连接

思路&#xff1a;并查集 这里的图比较像一种特殊的数据结构&#xff0c;其实也是图论的一种东西&#xff0c;就是基环树&#xff0c;但是这里并不是有向图&#xff0c;而是无向图&#xff0c;所以并不能用那种剪枝操作然后找基环。 看到连通量&#xff0c;我们应该能想到两种…...

RestTemplet 自定义消息转换器总结

在RestTemplet 请求中&#xff0c;请求发送一个 HTTP 请求时&#xff0c;RestTemplet 会根据请求中的内容类型&#xff08;Content-Type&#xff09;选择合适的 HttpMessageConverter 来处理请求体的数据。同样地&#xff0c;当服务器返回一个 HTTP 响应时&#xff0c;RestTemp…...

贝叶斯算法:机器学习中的“黄金法则”与性能提升之道

&#x1f440;传送门&#x1f440; &#x1f50d;机器学习概述&#x1f340;贝叶斯算法原理&#x1f680;贝叶斯算法的应用✨文本分类✨医疗系统 &#x1f496;贝叶斯算法优化✨贝叶斯算法优化的主要步骤✨贝叶斯算法优化的优点✨贝叶斯算法优化的局限性 &#x1f697;贝叶斯算…...

element-ui 实现输入框下拉树组件(2024-05-23)

用element-ui的 el-input&#xff0c;el-tree&#xff0c;el-popover组件组合封装 import url("//unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css"); <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//…...

Nginx 相关使用

一、 Nginx 相关使用。 相关命令 启动 nginx start nginx立即停止 nginx nginx -s stop平缓停止 nginx&#xff08;已有请求不会意外停止&#xff09; nginx -s quit重新加载配置文件 nginx -s reload二、Nginx conf 配置文件详解 参考文章皮卡丘的猫 server 配置项 server 可…...

基于Python实现 HR 分析(逻辑回归和基于树的机器学习)【500010104】

介绍 数据集说明 此数据集包含与员工有关的综合属性集合&#xff0c;从人口统计细节到与工作相关的因素。该分析的主要目的是预测员工流动率并辨别导致员工流失的潜在因素。 在这个数据集中&#xff0c;有14,999行&#xff0c;10列&#xff0c;以及这些变量&#xff1a;满意度…...

5月岚庭工人大会“安全就是效率、形象即是品质”

2024年5月18日、19日岚庭一月一期的“产业工人大会”和“工程大会”圆满举行初夏正当时&#xff0c;此次大会主要围绕“安全”与“形象”展开六场专题培训只为精益求精产业工人和装修管家全体到场。 岚庭 以绝对【安全】护家护园 安全就是生命&#xff0c;违章就是事故&#x…...

Flutter 中的 MouseRegion 小部件:全面指南

Flutter 中的 MouseRegion 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;MouseRegion 是一个非常有用的小部件&#xff0c;它允许你为部件添加鼠标事件&#xff08;如点击、悬停、离开等&#xff09;。这在开发需要处理鼠标交互的应用时尤为重要。本文将详细介绍 Mou…...

C++笔试强训day36

目录 1.提取不重复的整数 2.【模板】哈夫曼编码 3.abb 1.提取不重复的整数 链接https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1?tpId37&tqId21232&ru/exam/oj 按照题意模拟就行&#xff0c;记得从右往左遍历 #include <iostream> usi…...

网络通信过程的技术分析

网络通信过程的技术分析 目录 网络通信过程的技术分析 一、引言 二、网络通信基础 三、通信协议 四、数据传输过程 五、网络设备与通信 六、网络安全与通信 七、高级网络通信概念 八、结论 一、引言 网络通信是现代计算机网络中的核心活动&#xff0c;它涉及多个层面的…...

一篇文章搞懂二叉树

文章目录 DP 树叶的度树的度节点的层次节点的祖先节点的子孙双亲节点或父节点 树的表示孩子兄弟表示法双亲表示法树和非树树的应用 二叉树满二叉树完全二叉树推论二叉树的存储以数组的方式以链表的方式堆(Heap)堆的分类大根堆和小根堆的作用 二叉树的遍历DFS和BFS DP 动态规划…...

python——__future__模块

__future__模块是Python的一个特殊内建模块&#xff0c;它提供了一种方式来让程序员在当前版本的Python中使用未来版本的语言特性&#xff0c;从而帮助代码实现向前兼容。这意味着&#xff0c;即使你正在使用的是旧版本的Python&#xff0c;也可以通过导入__future__模块中的某…...

开源一个工厂常用的LIMS系统

Senaite是一款强大且可靠的基于Web的LIMS/LIS系统&#xff0c;采用Python编写&#xff0c;构建在Plone CMS基础架构之上。该系统处于积极开发阶段&#xff0c;在灵活的定制空间中为开发人员提供了丰富的功能。其中&#xff0c;Senaite在处理REST的JSON API上做得出色&#xff0…...

SpringBoot项目中redis序列化和反序列化LocalDateTime失败

实体类中包含了LocalDateTime 类型的属性&#xff0c;把实体类数据存入Redis后变成这样&#xff1a; 此时&#xff0c;存入redis不会报错&#xff0c;但是从redis获取的时候&#xff0c;会报错&#xff1a; com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…...

linux怎么查询远程管理卡型号

在Linux中&#xff0c;要查询远程管理卡&#xff08;通常是服务器主板上的集成芯片&#xff0c;如iDRAC、iLO、BMC等&#xff09;的型号&#xff0c;可以使用一些特定厂商的工具&#xff0c;或者通过IPMI&#xff08;Intelligent Platform Management Interface&#xff09;来实…...

西储大学数据集学习

数据集下载地址&#xff1a;CWRU凯斯西储大学轴承数据数据集——附&#xff1a;下载链接_西储大学轴承数据集下载-CSDN博客 最近研究故障诊断&#xff0c;先对使用比较多的西储大学数据集研究。以资料【1】中的内容展开研究。 1、轴承的结构 轴承分为外圈、内圈、保持架和滚珠…...

《web应用技术》第九次作业

一、将前面的代码继续完善功能 1.采用XML映射文件的形式来映射sql语句&#xff1b; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis…...

dockerfile关键字

参考&#xff1a;59_Dockerfile保留字简介_哔哩哔哩_bilibili FROM 作用&#xff1a;指定基础镜像&#xff0c;即在这个基础镜像上构建新镜像&#xff0c;如下所示&#xff0c;表示在ubuntu20.04镜像的基础上构建新镜像 FROM ubuntu:20.04 MAINTAINER 作用&#xff1a;镜像…...

MATLAB分类与判别模型算法: 快速近邻法(FastNN)分类程序【含Matlab源码 MX_005期】

算法思路介绍&#xff1a; 1. 数据准备阶段&#xff1a; 生成一个合成数据集 X&#xff0c;其中包含三个簇&#xff0c;每个簇分布在不同的区域。 定义聚类层数 L 和每个层次的子集数量 l。 2. 聚类阶段&#xff1a; 使用K均值聚类算法将初始数据集 X 分成 l 个簇。…...

css卡片翻转 父元素翻转子元素不翻转效果

css卡片翻转 父元素翻转子元素不翻转效果 vue <div class"moduleBox"><div class"headTitle"><span class"headName">大额案例</span></div><div class"moduleItem"><span class"module…...

解决文件传输难题:如何绕过Gitee的100MB上传限制

引言 在版本控制和代码托管领域&#xff0c;Gitee作为一个流行的平台&#xff0c;为用户提供了便捷的服务。然而&#xff0c;其对单个文件大小设定的100MB限制有时会造成一些不便。 使用云存储服务 推荐理由&#xff1a; 便捷性&#xff1a;多数云存储服务如&#xff1a; Dro…...

零基础学Java第二十三天之网络编程Ⅱ

1. InetAddress类 用来表示主机的信息 练习&#xff1a; C:\Windows\system32\drivers\etc\ hosts 一个主机可以放多个个人网站 www.baidu.com/14.215.177.37 www.baidu.com/14.215.177.38 www.taobao.com/183.61.241.252 www.taobao.com/121.14.89.253 2. Socket 3.…...

【HarmonyOS尝鲜课】- 前言

面向人群 本课程适用于HarmonyOS应用开发的初学者。 有无经验的开发者都可以轻松掌握ArkTS语言声明式开发范式&#xff0c;体验更简洁、更友好的HarmonyOS应用开发旅程。 什么是HarmonyOS HarmonyOS&#xff08;鸿蒙操作系统&#xff09;是由华为技术有限公司开发的全场景分…...

phpstudy配置网站伪静态

apache的伪静态写法&#xff1a; RewriteEngine On RewriteCond % {REQUEST_FILENAME} !-f RewriteCond % (REQUEST_FILENAME) !-d RewriteRule ^(.*)$ indexp?/$1 [QSA, PT,L] nginx写法&#xff1a; location / { index index.html index.php; #autoindex on; if(!…...

浅谈traceroute网络诊断工具

traceroute 是一个网络诊断工具&#xff0c;用于跟踪和显示数据包从源主机到目标主机所经过的每一跳&#xff08;路由器&#xff09;的路径。它能够帮助用户识别网络路径中的瓶颈和故障点。traceroute 的工作原理主要基于 ICMP&#xff08;Internet Control Message Protocol&a…...

Java数据结构与算法(红黑树)

前言 红黑树是一种自平衡二叉搜索树&#xff0c;确保在插入和删除操作后&#xff0c;树的高度保持平衡&#xff0c;从而保证基本操作&#xff08;插入、删除、查找&#xff09;的时间复杂度为O(log n)。 实现原理 红黑树具有以下性质&#xff1a; 每个节点要么是红色&#…...

SpringBoot RPM制作

安装依赖 [root20240423-instance4 ~]# yum install rpmdevtools2.初始化目录 [root20240423-instance4 ~]# rpmdev-setuptree [root20240423-instance4 ~]# tree rpmbuild/ rpmbuild/ ├── BUILD ├── RPMS ├── SOURCES ├── SPECS └── SRPMS5 directories, 0 …...

专转本上岸别太老实做这三件事

如果你专转本上岸&#xff0c;千万不要当老实人去做这三件事&#xff0c;真的没有必要&#xff0c;不但浪费时间&#xff0c;还会让你提前进入对未来的迷茫期。建议转本人们一定要知道&#xff0c;首先就是不要过度关注学分。因为转本上岸只有两年&#xff0c;我们属于大三&…...