标签: ecmascript-2021

JavaScript 中带下划线的数字文字

我最近遇到了这段代码,我想知道在 JavaScript 中使用或不使用下划线编写这些数字文字是否有任何区别:

let number = 1234567890;
console.log(number);

let number2 = 123_4567_890;
console.log(number2);
Run Code Online (Sandbox Code Playgroud)

javascript numbers ecmascript-2021

11
推荐指数
2
解决办法
4541
查看次数

JavaScript 字符串替换 vs replaceAll

ECMAScript 2021 添加了一个新的 String 函数replaceAll。很久以前,在一个不远的星系中,人们使用split+join或正则表达式来替换所有出现的字符串

我创建了以下示例来比较新方法和旧方法。虽然我可以在第一种情况下看到一些差异,例如我不能使用带有+ 的替换模式,或者我需要使用 来转义特殊字符,但在第二种情况下我看不出任何区别。splitjoinRegExp(str,"g")

新方法和旧方法有什么区别(行为差异、性能、浏览器兼容性...)?

const source = "abcdefabcdef";
const str1 = "abc", str2 = "xyz";
const reg1 = /abc/g, reg2 = "xyz";

//Case 1 : When we want to replace a string by another
console.log(source.split(str1).join(str2));
console.log(source.replace(new RegExp(str1,"g"),str2));
//versus
console.log(source.replaceAll(str1,str2));

//Case 2 : When we want to use a regular expression
console.log(source.replace(reg1,reg2));
//versus
console.log(source.replaceAll(reg1,reg2));

//Result = "xyzdefxyzdef"
Run Code Online (Sandbox Code Playgroud)

javascript string replaceall ecmascript-2021

8
推荐指数
1
解决办法
2304
查看次数

ES2021 (ES12) 中的 WeakRef 和终结器是什么

我想通过一个简单的例子来了解ES2021WeakRef中的什么是终结器以及在哪里使用它们。

我知道,WeakRef是一个班级。这将允许开发人员创建对对象的弱引用,而终结器或FinalizationRegistry允许您注册将在对象被垃圾收集时调用的回调函数

const myWeakRef = new WeakRef({
  name: 'Cache',
  size: 'unlimited'
})

// Log the value of "myWeakRef":
console.log(myWeakRef.deref())
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-2021

6
推荐指数
1
解决办法
1613
查看次数

在箭头函数上运行 eslint 时报告意外标记“=”

我有一个 JavaScript 类,其中有一个异步方法,如下所示。

class ABC {
    func = async () => { //----line 10
        //some code
    }
    func2 = () => { //----line 11
        //some code 
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行 ESLint 时,它报告一个错误。应用程序本身正在按预期工作。

unexpected token '=' at line 10 (& 11)
Run Code Online (Sandbox Code Playgroud)

eslintrc.json

{
   "env":{
       "es2021":true
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能消除这些 lint 错误并仍然保留这些方法作为箭头函数?

ESLint 版本:eslint :"^7.32.0"

javascript eslint class-fields ecmascript-2021

3
推荐指数
1
解决办法
756
查看次数

ES12:空合并运算符和对象

例如我有一个像这样的对象:

const a = {
 b: "value"
 // and also what about: c: '', or c: 0, c: false ?
};
Run Code Online (Sandbox Code Playgroud)

我想为我的对象分配一个'c'键,但前提是它之前没有分配过。

通常我们会做这样的事情:

if (!a.c) {
  a.c = 1; // or without { } for a bit shorty way.
}
Run Code Online (Sandbox Code Playgroud)

但是 ES12 标准引入了更多新的 Nullish 合并和逻辑运算符,所以有人可以向我解释一下它如何帮助我替换上面的示例以及作为null数字0行为(空字符串和false行为也是一个优点)吗?

其背后真正的问题是:使用这个新功能真的可以覆盖所有情况并在实际生产项目中替换上面的示例,还是保留更传统的方式更好。(当然,这都是关于语法糖人员的,但我想了解更多关于覆盖范围的信息)

javascript node.js ecmascript-2021

1
推荐指数
1
解决办法
678
查看次数