ES2023(ES14)新特性有什么?

1. Array.prototype.with

with 方法返回一个新数组,替换指定索引处的元素

const arr = ['a', 'b', 'c', 'd'];
const res = arr.with(2, 'f');
console.log(res);//['a', 'b', 'f', 'd']
console.log(arr);//['a', 'b', 'c', 'd']
Array.prototype.toSorted  

2. Array.prototype.toSorted

toSorted 方法返回一个新的已排序数组,不改变原数组。

const numbers = [5, 3, 2, 4, 1];
const sortedNumbers = numbers.toSorted();
console.log(sortedNumbers); // [1, 2, 3, 4, 5]
console.log(numbers); // [5, 3, 2, 4, 1]  // 原数组不变

3. Array.prototype.toReversed

toReversed 方法返回一个新的数组,其元素顺序是原数组的反转。 和reverse()类似,但它会改变原数组

const numbers = [5, 3, 2, 4, 1];
const sortedNumbers = numbers.toSorted();
console.log(sortedNumbers); // [1, 2, 3, 4, 5]
console.log(numbers); // [5, 3, 2, 4, 1]  // 原数组不变
Array.prototype.toSpliced  
const months = ['Jan', 'Mar', 'Apr', 'May'];

// 在索引 1 处添加一个元素
const months2 = months.toSpliced(1, 0, 'Feb');
console.log(months2); // ["Jan", "Feb", "Mar", "Apr", "May"]


// 从第 2 个索引开始删除两个元素
const months3 = months.toSpliced(2);
console.log(months3); // ["Jan", "Mar"]

console.log(months); //['Jan', 'Mar', 'Apr', 'May'];

4. Array.prototype.toSpliced

toSpliced 是一种数组操作方法,它与 splice 类似,但toSpliced不会修改原数组,而是返回一个新数组,包含删除和新增元素后的结果。它在操作数组时更加安全,因为不会改变原始数据。

const months = ['Jan', 'Mar', 'Apr', 'May'];

// 在索引 1 处添加一个元素
const months2 = months.toSpliced(1, 0, 'Feb');
console.log(months2); // ["Jan", "Feb", "Mar", "Apr", "May"]

// 从第 2 个索引开始删除两个元素
const months3 = months.toSpliced(2);
console.log(months3); // ["Jan", "Mar"]

console.log(months); //['Jan', 'Mar', 'Apr', 'May'];

5. Object.hasOwn

Object.hasOwnObject.prototype.hasOwnProperty 的简写,检查属性是否是对象的自身属性,并不是继承来的。

const obj = {
  a: 1,
};
console.log(obj);
console.log(Object.hasOwn(obj, 'a'));//true
console.log(Object.hasOwn(obj, 'valeOf'));//false

6. findLast() 和 findLastIndex()

findLast(): 由后往前通过索引查找数组中符合条件的第一个元素。

const array1 = [5, 12, 50, 130, 44];

const found = array1.findLast((element) => element > 45);

console.log(found);// 130

findLastIndex(): 由后往前通过索引查找数组中符合条件的第一个元素所在的索引。

const array1 = [5, 12, 50, 130, 44];

const isLargeNumber = (element) => element > 45;

console.log(array1.findLastIndex(isLargeNumber));//3

7. Hashbang 语法

Hashbang 注释是一种特殊的注释语法,它会以#!开头,后面仅跟着解释器(interpreter) 的路径,并且只会在脚本或是模组的最开始有效。
以下方代码为例,这段代码是告诉系统,用 Node.js 来执行文件:

#!/usr/bin/env node
console.log('Hello, world!');

8. WeakMap 支持 Symbol 作为 key

Symbols 具有唯一的标识,适合生成唯一的键。
🔍什么是Symbol?在实际开发中怎么用?

const keyA = Symbol('fruit');
const keyB = Symbol('fruit');

const map = new WeakMap();
map.set(keyA, 'apple');

console.log(map.get(keyA)); // "apple"
console.log(map.get(keyB)); // undefined
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为 CSDN 开发的 AI 语言模型,我可以告诉您,ES2023 新增的特性包括:1. Promise.any() 方法;2. WeakRefs 弱引用;3. 数字分隔符;4. String.prototype.replaceAll() 方法;5. Logical Assignment Operators 逻辑赋值运算符;6. Numeric Separators 数字分隔符。以上是我对您问题的回答,希望能够帮到您。 ### 回答2: ES2023是指ECMAScript的下一版标准,它的新增特性有以下几个方面: 1. 数值分隔符(Numeric Separators):ES2023将新增一个下划线(_)作为数值分隔符,以提高数字的可读性和编写代码时的易读性。例如,可以使用数字分隔符将一个大数字分隔成更易读的部分。 2. Promise.any()方法:ES2023将引入Promise.any()方法,该方法返回一个Promise,一旦其中任何一个传入的Promise变为resolve状态,该方法就会立即resolve。这个特性可以用于处理多个异步操作,只要有一个成功即可,无需等待其他。 3. 数值类型千分位分隔符(Intl.NumberFormat):ES2023将提供Intl.NumberFormat构造函数的新特性,使得开发者能够使用千位分隔符来格式化和解析数字。这在国际化开发中特别有用。 4. 字符串用于限制属性名称(Symbol-based Property Restrictions):ES2023将引入Symbol-based Property Restrictions来限制属性名称的值必须为Symbol类型。这样可以避免在使用对象属性时不小心使用了字符串。 5. SharedArrayBuffer 和 Atomics增强:ES2023将对SharedArrayBuffer和Atomics进行一些增强,以提高多线程和并发操作的性能和安全性。 以上就是ES2023新增的一些特性,通过这些特性的引入,可以提高JavaScript开发的效率和代码质量,同时也为多线程和国际化开发提供了更好的支持。 ### 回答3: ES2023JavaScript的下一个版本,虽然它尚未正式发布,但已经可以预测一些可能的新增特性。以下是可能包含在ES2023中的一些特性: 1. Shared memory and atomics: ES2023可能会引入共享内存和原子操作,这将允许多个线程之间共享数据,并能够以原子方式访问和修改共享数据。 2. Optional chaining: 该特性已经在ES2020中引入。它允许开发者使用?.语法来简化对对象属性或方法的安全访问,避免了因为遇到空值或未定义的情况而导致的错误。 3. Pipeline operator: 管道运算符是一种用于简化函数式编程的语法。它允许通过简洁流畅的方式将函数应用于一系列数据。这个特性在ES2022被正式接受,并且可能进一步改进和扩展。 4. Record and Tuple types: 这两种类型已经被TC39委员会接受为Stage 2特性,并有望在ES2023中正式成为一部分。Record类型允许定义具有固定属性集的对象,而Tuple类型允许定义具有固定长度的数组。 5. Ergonomic brand checks: 这个特性的目标是为了提高类型安全性,同时保持语法的简洁和易读。它将提供一种在编译时对对象进行类型判断的方法,以便在运行时避免错误。 请注意,以上列出的特性只是一些可能会出现在ES2023中的特性,具体实施和变化还有待官方发布和确认。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值