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

【ECMAScript标准规范】

ECMAScript 是一种定义脚本语言核心功能的标准,最常见的实现就是 JavaScript。随着 ECMAScript 标准的不断发展,JavaScript 也引入了许多新的特性,极大提高了开发效率和代码可读性

1. ECMAScript 5 (ES5)

ECMAScript 5(2009年)是一个非常重要的版本,它引入了许多现代 JavaScript 的核心特性。

1.1 严格模式 (strict mode)

严格模式通过 'use strict'; 声明启用,作用是禁止一些不安全的操作,减少错误的发生。

示例:严格模式
'use strict';

var obj = {};
obj.foo = 'bar';  // 没问题

foo = 'bar';  // 报错:变量未声明,严格模式下不允许隐式声明变量

1.2 JSON 对象

ES5 引入了 JSON 对象,提供了 parse()stringify() 方法,用于处理 JSON 数据。

示例:JSON.parse()JSON.stringify()
// JSON.stringify:将对象转换为 JSON 字符串
const obj = { name: 'Alice', age: 25 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // '{"name":"Alice","age":25}'

// JSON.parse:将 JSON 字符串转换为对象
const parsedObj = JSON.parse(jsonString);
console.log(parsedObj);  // { name: 'Alice', age: 25 }

1.3 Array 方法

ES5 增加了许多数组方法,帮助开发者更高效地操作数组。

示例:forEach(), map(), filter()
const arr = [1, 2, 3, 4, 5];

// forEach:遍历数组
arr.forEach(item => console.log(item));

// map:返回一个新数组,包含原数组中每个元素的平方
const squares = arr.map(x => x * x);
console.log(squares); // [1, 4, 9, 16, 25]

// filter:筛选出大于 3 的元素
const greaterThanThree = arr.filter(x => x > 3);
console.log(greaterThanThree); // [4, 5]

2. ECMAScript 6 (ES6) - 2015年

ECMAScript 6(也叫 ES2015 或 ES6)是 JavaScript 的一次重要升级,新增了大量语言特性,使得 JavaScript 更加现代化。

2.1 letconst

ES6 引入了 letconst 来替代 var,提供了块级作用域。

示例:letconst
// let:块级作用域
if (true) {
  let a = 10;
  console.log(a);  // 输出 10
}
// console.log(a);  // 报错:a is not defined

// const:声明常量,不可重新赋值
const b = 20;
b = 30;  // 报错:Assignment to constant variable.

2.2 箭头函数 (=>)

箭头函数简化了函数的语法,且 this 的绑定方式不同。

示例:箭头函数
// 普通函数
function sum(a, b) {
  return a + b;
}

// 箭头函数
const sumArrow = (a, b) => a + b;

console.log(sum(1, 2)); // 3
console.log(sumArrow(1, 2)); // 3

2.3 模板字符串(Template Literals)

模板字符串用反引号(`)包裹,可以嵌入变量或表达式。

示例:模板字符串
const name = 'Alice';
const age = 25;
const message = `Hello, my name is ${name} and I am ${age} years old.`;
console.log(message);  // "Hello, my name is Alice and I am 25 years old."

2.4 类(Classes)

ES6 引入了类的概念,使得面向对象编程变得更加简洁。

示例:类(Class)
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

const alice = new Person('Alice', 25);
alice.greet();  // "Hello, my name is Alice."

2.5 Promise

Promise 是用于处理异步操作的新特性,能够使异步代码更加简洁和可读。

示例:Promise
const promise = new Promise((resolve, reject) => {
  let success = true;
  if (success) {
    resolve("Success!");
  } else {
    reject("Failure!");
  }
});

promise
  .then(result => console.log(result))  // "Success!"
  .catch(error => console.log(error));  // "Failure!"

3. ECMAScript 2017 (ES8)

ECMAScript 2017 引入了一些新的语言特性,最重要的两个特性是 async / awaitObject.entries()

3.1 asyncawait

asyncawait 用于简化异步操作,使得异步代码看起来像同步代码。

示例:asyncawait
// 异步函数
async function fetchData() {
  const data = await new Promise((resolve) => setTimeout(() => resolve("Data fetched!"), 1000));
  console.log(data);
}

fetchData();  // 输出 "Data fetched!" (1秒后)

3.2 Object.entries()Object.values()

Object.entries() 返回一个对象的键值对数组,而 Object.values() 返回对象的值数组。

示例:Object.entries()Object.values()
const person = { name: 'Alice', age: 25 };

// Object.entries:返回键值对数组
const entries = Object.entries(person);
console.log(entries);  // [['name', 'Alice'], ['age', 25]]

// Object.values:返回值数组
const values = Object.values(person);
console.log(values);  // ['Alice', 25]

4. ECMAScript 2019 (ES10)

ES10 引入了几个非常有用的新功能,如 Array.prototype.flat()Array.prototype.flatMap()Object.fromEntries()

4.1 Array.prototype.flat()Array.prototype.flatMap()

flat() 用于将嵌套的数组扁平化,而 flatMap() 首先对数组进行映射操作,然后扁平化。

示例:flat()flatMap()
const arr = [1, [2, 3], [4, [5, 6]]];

// flat:将嵌套数组扁平化
console.log(arr.flat());  // [1, 2, 3, 4, [5, 6]]
console.log(arr.flat(2));  // [1, 2, 3, 4, 5, 6]

// flatMap:先映射再扁平化
const mappedArr = arr.flatMap(x => x);
console.log(mappedArr);  // [1, 2, 3, 4, [5, 6]]

4.2 Object.fromEntries()

Object.fromEntries() 将一个键值对的数组转换为对象。

示例:Object.fromEntries()
const entries = [['name', 'Alice'], ['age', 25]];
const obj = Object.fromEntries(entries);
console.log(obj);  // { name: 'Alice', age: 25 }

5. ECMAScript 2020 (ES11)

ES11 引入了几个重要的新特性,其中包括 BigInt 类型、Nullish Coalescing Operator (??)Optional Chaining (?.)

5.1 BigInt

BigInt 类型允许你表示大于 Number 类型的整数。

示例:BigInt
const bigIntNumber = 1234567890123456789012345678901234567890n;  // 后缀 n 表示 BigInt
console.log(bigIntNumber);  // 1234567890123456789012345678901234567890n

5.2 Nullish Coalescing Operator (??)

?? 用于判断 nullundefined,如果是,则返回默认值。

示例:??
const name = null;
const defaultName = name ?? "Default Name";
console.log(defaultName);  // "Default Name"

5.3 Optional Chaining (?.)

`?.

允许你在访问深层嵌套的对象属性时避免出现TypeError,如果某个属性为 nullundefined,则返回 undefined`。

示例:?.
const person = { name: 'Alice', address: { city: 'Wonderland' } };

// 安全访问深层属性
console.log(person.address?.city);  // "Wonderland"
console.log(person.contact?.phone);  // undefined


http://www.kler.cn/a/391379.html

相关文章:

  • 《计算机组成及汇编语言原理》阅读笔记:p48-p81
  • Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • Idean 处理一个项目引用另外一个项目jar 但jar版本低的问题
  • Pytorch | 从零构建Vgg对CIFAR10进行分类
  • 【Linux系统编程】:信号(2)——信号的产生
  • 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)
  • 「QT」基础数据类 之 QVariant 通用数据类
  • PHY6235超低功耗蓝牙和专有2.4G应用的SOC芯片内置MCU
  • Git 中的 patch 功能
  • 生成式模型的热点新闻和进展
  • 第8章利用CSS制作导航菜单
  • 鸿蒙ZRouter动态路由框架—生命周期管理能力
  • 论云游戏的性能与性价比,ToDesk、青椒云、顺网云游戏等具体实操看这篇就够了
  • SAP ABAP开发学习——function alv复选框设置
  • [论文阅读]Enhanced Membership Inference Attacks against Machine Learning Models
  • jmeter基础05_第1个http请求
  • Java基于SpringBoot+Vue的宠物共享平台的设计与实现(附源码,文档)
  • 22. 记录架构
  • 【热门主题】000041 网络安全:守护数字世界的坚固防线
  • Javascript笔记(一):闭包函数
  • 状态空间方程离散化(Matlab符号函数)卡尔曼
  • 看不见的力量——超声技术在工业中的应用
  • Spring Boot编程训练系统:深入设计与实现
  • [Codesys]常用功能块应用分享-BMOV功能块功能介绍及其使用实例说明
  • P-tuning、Prompt-tuning和Prefix-tuning区别是什么?
  • Java 实现自定义 LRU 缓存