ES 2023 新特性概述

更新日期: 2023-11-17阅读: 1.2k标签: 特性

于2023年6月27日ECMA大会批准了ECMAScript 2023(es14)规范,意味着新的一些语法将正式成为标准。下面整理关于ES 2023的新特性:

从后往前查找数组(Array find from last)
Hashbang 语法(Hashbang Grammar)
WeakMap支持使用Symbol作为key(Symbols as WeakMap keys)
不改变原数组的新的原型方法(Change Array by Copy)


数组倒序查找

在数组中查找元素是常见的需求, 以下是我们遍历数组中常用的两个方法,但是目前这两种方法都是从前往后遍历的。

Array.prototype.find() : 返回第一个查找到的元素,如果没有找到,返回 undefined
Array.prototype.findIndex() : 返回第一个查找到的元素的索引,如果没有找到,返回 -1
let nums = [5,4,3,2,1];
let lastEven = nums.findLast((num) => num % 2 === 0); // 2
let lastEvenIndex = nums.findLastIndex((num) => num % 2 === 0); // 3

新增了两个数组方法findLast()和findLastIndex() ,用法跟 find 和 findIndex 完全一致,唯一的区别就是它们会从数组的最后一个成员开始,依次向前检查。这两个方法都很方便,可跳过创建临时的重复、突变和混乱的索引减法。


Hashbang 语法

Hashbang也称为shebang,就是在文件开头的一行,以 #! 开头的注释,用来指定脚本的解释器,表示可在注释中包含任意文本。

#!/usr/bin/env node
// in the Script Goal
'use strict';
console.log(1);

这个注释的意思是,使用 `Node.js` 作为解释器来运行这个脚本。只有当脚本直接在 shell 中运行时,Hashbang 语法才有语意意义,其他环境下 JavaScript 解释器会把它视为普通注释。


将符号作为WeakMap键

WeakMap结构与Map结构类似,也是用于生成键值对的集合。

在弱集合和注册表中使用符号

注意:注册的符号不可作为 weakmap 键。

let sym = Symbol("foo");
let obj = {name: "bar"};
let wm = new WeakMap();
wm.set(sym, obj);
console.log(wm.get(sym)); // {name: "bar"}
sym = Symbol("foo");
let ws = new WeakSet();
ws.add(sym);
console.log(ws.has(sym)); // true
sym = Symbol("foo");
let wr = new WeakRef(sym);
console.log(wr.deref()); // Symbol(foo)
sym = Symbol("foo");
let cb = (value) => {
console.log("Finalized:", value);
};
let fr = new FinalizationRegistry(cb);
obj = {name: "bar"};
fr.register(obj, "bar", sym);
fr.unregister(sym);


不改变原数组的新的原型方法

很多数组的方法会改变原数组,比如push()、pop()、reversed()、sort()等等,我们称它们为破坏性方法,只要调用了数组这些方法,它的值就变了。非破坏性方法,比如我们经常用到的 filter、some、map、find 等方法,都是不会改变原数组的。

现在新增了4个数组的方法,允许对数组进行操作时,不改变原数组,返回一个原数组的拷贝。

toReversed():是 reverse() 的非破坏性版本
toSorted():是 sort() 的非破坏性版本
toSpliced(start, deleteCount, ...items):是splice()的非破坏性版本
with():是修改数组指定索引值的非破坏性版本

toSorted:

const greek = ['gamma', 'aplha', 'beta']
greek.toSorted(); // [ 'aplha', 'beta', 'gamma' ]
greek; // [ 'gamma', 'aplha', 'beta' ]
const nums = [0, -1, 3, 2, 4]
nums.toSorted((n1, n2) => n1 - n2); // [-1,0,2,3,4]
nums; // [0, -1, 3, 2, 4]
toReversed:
const greek = ['gamma', 'aplha', 'beta']
greek.toReversed(); // [ 'beta', 'aplha', 'gamma' ]
greek; // [ 'gamma', 'aplha', 'beta' ]
toSpliced:
const greek = ['gamma', 'aplha', 'beta']
greek..toSpliced(1,2); // [ 'gamma' ]
greek; // [ 'gamma', 'aplha', 'beta' ]
greek.toSpliced(1,2, ...['delta']); // [ 'gamma', 'delta' ]
greek; // [ 'gamma', 'aplha', 'beta' ]
with:
const greek = ['gamma', 'aplha', 'beta'];
greek.with(2, 'bravo'); // [ 'gamma', 'aplha', 'bravo' ]
greek; //  ['gamma', 'aplha', 'beta'];

参考:https://h3manth.com/ES2023/

链接: https://fly63.com/article/detial/12558

CSS新特性contain,控制页面的重绘与重排

contain 属性允许我们指定特定的 DOM 元素和它的子元素,让它们能够独立于整个 DOM 树结构之外。目的是能够让浏览器有能力只对部分元素进行重绘、重排,而不必每次都针对整个页面。

Html5、Css3、ES6的新特性

Html5的新特性语义化标签:有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重。表单新特性,多媒体视频(video)和音频(audio)

ES6新特性--var、let、const

var不存在块级作用域,具有变量提升机制。 let和const存在块级作用域,不存在变量提升。在同一作用域内只能声明一次。const在声明时需要赋值且无法修改,但如果常量是对象,则对象的属性可以修改。

Js即将到来的3个新特性

Optional Chaining(可选链式调用);Nullish coalescing(空值合并);Pipeline operator(管道运算符)通过三个函数对字符串进行处理;

Angular 8的新特性介绍

在今天早些时候Angular团队发布了8.0.0稳定版。其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能。下面是我对8.0.0一些新功能的简单介绍,希望可以帮助大家快速了解新版本

使用 React 要懂的 Js特性

与我使用的其他框架相比,我最喜欢 React 的原因之一就是它对 JavaScript 的暴露程度。没有模板DSL( JSX 编译为合理的 JavaScript),组件 API 只是通过添加 React Hooks 变得更简单,并且该框架为解决的核心 UI 问题提供非常少的抽象概念

ES2019 新特性汇总

最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~另外之前也整理了 《ES6/ES7/ES8/ES9系列》,可以一起看哈。

Js的用途和特性

JavaScript 最初的目的是为了“赋予网页生命”。这种编程语言我们称之为脚本。它们可以写在 HTML 中,在页面加载的时候会自动执行。脚本作为纯文本存在和执行。它们不需要特殊的准备或编译即可运行。

十个超级实用的 JS 特性

你可能刚上手 JavaScript,或者只是曾经偶尔用过。不管怎样,JavaScript 改变了很多,有些特性非常值得一用。 这篇文章介绍了一些特性,在我看来,一个严肃的 JavaScript 开发者每天都多多少少会用到这些特性

解密HTTP/2与HTTP/3 的新特性

HTTP/2 相比于 HTTP/1.1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!