当前位置: 首页 > 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;镜像…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...