前端笔记-ECMAScript语法概览

更多详细可以查看1.1 ES6 教程 | 菜鸟教程

这里我将大概记录ES与JS大概不一样的部分,方便联合记忆。

历史与关系

  • ECMAScript:是一种由 Ecma 国际组织制定的脚本语言规范,它是 JavaScript 的标准化版本。ECMAScript 为 JavaScript 提供了语法、类型、语句、关键字等基础规范,随着时间推移不断发展和更新版本。
  • JavaScript:是一种广泛应用于网页开发等领域的编程语言,它遵循 ECMAScript 规范,并由各大浏览器厂商进行实现和扩展。除了 ECMAScript 规定的核心特性外,JavaScript 还包括宿主环境(如浏览器)提供的 API,如 DOM、BOM 等。

变量声明

  • JS(ES5 及以前):使用var声明变量,存在变量提升现象,即变量可以在声明之前使用,其作用域为函数级作用域。例如:
function test() {console.log(x); // 输出undefinedvar x = 10;
}
test();
  • ES6:引入了letconstlet声明的变量具有块级作用域,不存在变量提升,在声明之前访问会报错,称为 “暂时性死区”。const用于声明常量,一旦声明,不可重新赋值,且也具有块级作用域,当然,仅在一个代码块内的声明let和const变量,仅在代码块内有效。例如:
{let y = 20;const z = 30;
}
console.log(y); // 报错,y is not defined
console.log(z); // 报错,z is not defined

 传统 JavaScript 使用var声明变量,存在函数级作用域和变量提升现象。例如,var声明的变量可以在声明之前被访问,值为undefined,而letconst声明的变量不存在变量提升,在声明之前访问会报错。


函数

  • JS(ES5 及以前):函数声明有函数声明语句和函数表达式两种方式,this指向在运行时根据函数的调用方式确定,在全局函数中,this指向全局对象(浏览器中是window),在对象方法中,this指向调用该方法的对象。例如:
function add(a, b) {return a + b;
}
const subtract = function (a, b) {return a - b;
};
  • ES6:引入了箭头函数,语法为(param1, param2, ...) => { function body },箭头函数没有自己的this,它的this继承自外层作用域,更适合用于回调函数等场景,避免了this指向不明确的问题。例如:
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((num) => num * 2);

与传统的function关键字定义的函数相比,箭头函数没有自己的this绑定,它的this指向定义时所在的外层作用域,避免了一些常见的this指向问题。 


数组

  • JS(ES5 及以前):有pushpopshiftunshift等方法用于操作数组。例如:
const arr = [1, 2, 3];
arr.push(4);
arr.shift();
  • ES6:增加了findfindIndexincludes等方法。find用于找到数组中满足条件的第一个元素,findIndex用于找到满足条件的第一个元素的索引,includes用于判断数组是否包含某个元素。例如:
const numbers = [1, 2, 3, 4, 5];
const found = numbers.find((num) => num > 3);
const index = numbers.findIndex((num) => num === 4);
const hasFive = numbers.includes(5);

对象

  • JS(ES5 及以前):通过对象字面量或构造函数创建对象,使用点语法或方括号语法访问属性。例如:
const person = {name: 'John',age: 30
};
console.log(person.name);
console.log(person['age']);
  • ES6:允许对象属性的简洁表示法,即属性名和变量名相同时可以简写。还增加了Object.assign方法用于对象的合并,Object.keysObject.valuesObject.entries方法用于获取对象的键、值和键值对数组。例如:
const name = 'Alice';
const age = 25;
const person = { name, age }; // 简洁表示法
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = Object.assign({}, obj1, obj2);
const keys = Object.keys(person);
const values = Object.values(person);
const entries = Object.entries(person);

模块

  • JS(ES5 及以前):没有原生的模块系统,通常使用第三方库如RequireJS等来实现模块加载。
  • ES6:引入了原生的模块系统,使用importexport关键字来导入和导出模块。例如:
    // 定义模块 math.js
export function add(a, b) {return a + b;
}
export function subtract(a, b) {return a - b;
}
import { add, subtract } from './math.js';
console.log(add(5, 3));
console.log(subtract(5, 3));

字符串

  • JS(ES5 及以前):有charAtindexOfsubstring等方法操作字符串。
const str = 'Hello, World!';
console.log(str.charAt(0));
console.log(str.indexOf('World'));
console.log(str.substring(7, 12));
  • ES6:增加了includesstartsWithendsWith等方法,用于更方便地判断字符串是否包含某个子串、是否以某个子串开头或结尾。
const str = 'Hello, World!';
console.log(str.includes('World'));
console.log(str.startsWith('Hello'));
console.log(str.endsWith('!'));

数据类型与结构

  • Symbol 类型
  • 一种新的数据类型,Symbol值是唯一的、不可变的,常用于创建对象的唯一属性键,避免属性名冲突。
  • 在 ES6 之前,JavaScript 的基本数据类型只有numberstringbooleannullundefinedSymbol的引入为对象属性的管理提供了更强大的方式。
let sy = Symbol("KK");
console.log(sy);   // Symbol(KK)
typeof(sy);        // "symbol"// 相同参数 Symbol() 返回的值不相等
let sy1 = Symbol("kk"); 
sy === sy1;       // false
  • 解构赋值
  • 可以方便地从数组或对象中提取值,并赋值给多个变量。例如,const [a, b, c] = [1, 2, 3]可以将数组中的值分别赋给abcconst { name, age } = { name: 'John', age: 30 }可以从对象中提取nameage属性并赋值给同名变量。
  • 传统的赋值方式需要逐个进行赋值操作,解构赋值更加简洁和直观,提高了代码的可读性和便利性,尤其在处理函数返回多个值或对象属性较多的情况时优势明显。

面向对象编程

  • 类的语法
    • 使用class关键字来定义类,包括构造函数、实例方法和静态方法等。
class Person {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}`);}static createPerson(name, age) {return new Person(name, age);}
}

在 ES6 之前,JavaScript 通过构造函数和原型链来模拟类和继承,代码结构相对复杂且不直观。class语法使 JavaScript 的面向对象编程更加清晰和易于理解,与其他面向对象编程语言的语法更加相似。

  • 继承:使用extends关键字实现类的继承,super关键字用于调用父类的构造函数和方法。
class Student extends Person {constructor(name, age, grade) {super(name, age);this.grade = grade;}sayHello() {super.sayHello();console.log(`I'm in grade ${this.grade}`);}
}

ES6 之前的继承实现需要手动操作原型链,容易出现一些问题,如原型链混乱、子类实例无法正确访问父类属性等。extendssuper的使用使继承的实现更加规范和可靠。

异步编程

  • Promise是一种用于处理异步操作的对象,它代表了一个异步操作的最终完成(或失败)及其结果值。可以使用then方法来处理成功的结果,catch方法来处理失败的情况。
  • 在 Promise 出现之前,JavaScript 的异步操作通常使用回调函数来处理,但回调函数容易导致回调地狱,即多层嵌套的回调函数使代码难以阅读和维护。Promise 通过链式调用的方式使异步操作的代码更加清晰和易于管理。

  • async/await
    • ES7 引入:基于 Promise 之上的异步函数语法,async函数返回一个 Promise 对象,await只能在async函数内部使用,用于暂停函数执行,等待 Promise 被解决(resolved)或被拒绝(rejected)。
    • 与 Promise 的then链式调用相比,async/await使异步代码看起来更像同步代码,大大提高了异步代码的可读性和可维护性,减少了异步操作带来的复杂性。

模块系统

  • ES6 模块
    • ES6 引入:使用importexport关键字来实现模块的导入和导出。可以将不同的功能封装在不同的模块中,通过export暴露需要对外提供的变量、函数、类等,通过import在其他模块中引入这些内容。
    • 在 ES6 之前,JavaScript 没有官方的模块系统,开发者通常使用各种第三方库(如 CommonJS、AMD 等)来实现模块功能。ES6 模块系统提供了标准化的模块定义和加载方式,使代码的组织和管理更加规范和高效。

(未完待续)

这些 ES 的特性极大地丰富和增强了 JavaScript 的功能和表现力,使开发者能够更方便、高效地编写复杂的前端应用程序。在学习和使用 JavaScript 时,掌握这些 ES 的重要特性是非常关键的。

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

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

相关文章

操作主机的管理

1.在AD林范围内,有哪几个操作主机角色 架构主机(Schema Master) 功能:负责整个AD林中所有对象和属性的定义,是唯一可以更新目录架构的DC。架构更新会从架构主机复制到目录林中的所有其他域控制器。 作用范围&#xf…

【Linux】网络编程

目录 端口号 网络字节序 socket编程 接口 sockaddr结构 udp网络程序 创建套接字 绑定 接收 发送 客户端需要绑定吗? 客户端执行方法 本地环回地址 终端文件 代码 tcp网络程序 SOCK_STREAM 监听 查询网络信息 获取新连接 地址转换函数 客户端绑…

Go 语言中的select是做什么的

Go 语言中的 select 是做什么的 在 Go 语言中,select 语句是用于处理多个通道(channel)操作的一种控制结构。它类似于 switch 语句,但专门用于并发编程,允许 Goroutine 在多个通道上等待操作(发送或接收&a…

智慧班牌系统解决方案,SaaS智慧电子班牌云平台

智慧班牌系统解决方案 系统概述 智慧班牌是智慧校园建设不断发展的产物,是教育信息化改革的载体。通过智慧班牌可以高效便捷传递各种知识信息和通知信息、及时反馈课堂信息、实现班级的透明化管理。智慧班牌将学生平安考勤、异常出勤情况及时反馈至家长、老师&…

利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案

以下是一个利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案: 方案流程 数据读取:从 Excel 文件中读取数据。文本向量化:使用大模型将文本数据转换为向量表示。聚类分析:运用聚类算法对向量进行分组,将相似度高的数据归为…

【Docker基础】容器技术详解:生命周期、命令与实战案例

文章目录 一、什么是容器?二、为什么需要容器三、容器的生命周期容器状态容器OOM容器异常退出容器异常退出容器暂停 四、容器命令命令清单详细介绍 五、容器操作案例容器的状态迁移容器批量操作容器交互模式attached 模式detached 模式interactive 模式 容器 与 宿主…

Laravel 实现 队列 发送邮件功能

一. 什么是队列 在构建 Web 应用程序时,你可能需要执行一些任务,例如解析文件,发送邮件,大量的数据计算等等,这些任务在典型的 Web 请求期间需要很长时间才能执行。 庆幸的是,Laravel 可以创建在后台运行…

flink Shuffle的总结

关于 ** ​5 种 Shuffle 类型** 的区别、使用场景及 Flink 版本支持的总结: * 注意:下面是问AI具体细节与整理学习 1. 核心区别 Shuffle 类型核心特点使用场景Flink 版本支持Pipelined Shuffle流式调度,纯内存交换,低延迟(毫秒级…

Git使用与管理

一.基本操作 1.创建本地仓库 在对应文件目录下进行: git init 输入完上面的代码,所在文件目录下就会多一个名为 .git 的隐藏文件,该文件是Git用来跟踪和管理仓库的。 我们可以使用 tree 命令(注意要先下载tree插件&#xff09…

计算机视觉——深度学习图像处理中目标检测平均精度均值(mAP)与其他常用评估指标

概述 平均精度均值(mAP)是目标检测领域中最为流行且复杂的重要评估指标之一。它广泛用于综合总结目标检测器的性能。许多目标检测模型会输出类似以下的参数结果: Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.3…

C语言中单链表操作:查找节点与删除节点

一. 简介 前面学习了C语言中创建链表节点,向链表中插入节点等操作,文章如下: C语言中单向链表:创建节点与插入新节点-CSDN博客 本文继续学习c语言中对链表的其他操作,例如在链表中查找某个节点,删除链表…

WePY 框架:小程序开发的“Vue式”利器!!!

WePY 框架:小程序开发的“Vue式”利器 🚀 哈喽,大家好!👋 今天我们要聊聊一个在微信小程序开发中大放异彩的框架——WePY!它是什么?有什么特点?为啥值得一试?别急&#…

什么是微前端?有什么好处?有哪一些方案?

微前端(Micro Frontends) 微前端是一种架构理念,借鉴了微服务的思想,将一个大型的前端应用拆分为多个独立、自治的子应用,每个子应用可以由不同团队、使用不同技术栈独立开发和部署,最终聚合为一个整体产品…

【家政平台开发(33)】库存管理模块开发实战:从基础搭建到智能管控

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

Mysql个人笔记

Mysql个人笔记 sql基础书写规则和种类种类书写规则注释规则启动 DDL数据类型数据库的操作useshowcreatedrop 表的操作useshowcreate创建表复制表 dropalter Mysql的存储引擎 DMLselectselect语句like(谓词)where聚合函数:关于nullgroup byexi…

【重装系统】大白菜自制U盘装机,备份C盘数据,解决电脑启动黑屏/蓝屏

1. 准备 U 盘 U 盘容量至少 8G,备份 U 盘的数据(后期会格式化) 2. 从微软官网下载操作系统镜像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下载安装大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盘&#…

各类神经网络学习:(十)注意力机制(第2/4集),pytorch 中的多维注意力机制、自注意力机制、掩码自注意力机制、多头注意力机制

上一篇下一篇注意力机制(第1/4集)待编写 一、pytorch 中的多维注意力机制: 在 N L P NLP NLP 领域内,上述三个参数都是 向量 , 在 p y t o r c h pytorch pytorch 中参数向量会组成 矩阵 ,方便代码编写。…

uni-app初学

文章目录 1. pages.json 页面路由2. 图标3. 全局 CSS4. 首页4.1 整体框架4.2 完整代码4.3 轮播图 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分类 uni-row、uni-col4.6 商品列表 小程序开发网址: 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下…

VBA将Word文档内容逐行写入Excel

如果你需要将Word文档的内容导入Excel工作表来进行数据加工,使用下面的代码可以实现: Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL运行一段时间后磁盘出现100%读写

MySQL运行一段时间后磁盘出现100%读写的情况,可能是由多种原因导致的,以下是一些常见原因及解决方法: 可能的原因 1. 磁盘I/O压力过大[^0^]:数据量过大,数据库查询和写入操作消耗大量I/O资源。索引效率低&#xff0c…