Résumé de toutes les nouvelles fonctionnalités de JavaScript ECMAScript 6
WBOY
Libérer: 2022-08-15 18:13:22
avant
1600 Les gens l'ont consulté
Cet article vous apporte des connaissances pertinentes sur javascript Il présente principalement un résumé de toutes les nouvelles fonctionnalités de JavaScript ECMAScript 6 (ES2015~ES2022). L'article présente en détail le contenu autour du thème, qui a une certaine valeur de référence. est Jetons un coup d'oeil, j'espère que cela aidera tout le monde.
Cela fait 8 ans qu'ECMAScript a officiellement publié ES6 en 2015, et depuis 2015, chaque année, une nouvelle version sera publiée dans Juin, avec l'année en cours comme numéro de version.
De nombreuses nouveautés sont apparues dans ces nombreuses versions Afin de faciliter la mémoire, j'ai organisé toutes les nouveautés dans cet article.
ps : Certaines informations indiquent que toutes les versions après ES2015 sont collectivement appelées ES6, et certaines disent que ES6 signifie ES2015, ES7 signifie ES2016, et ainsi de suite, ce qui ne sera pas discuté ici.
ES2015 (ES6)
ES2015 est la version avec les plus grands changements. Fondamentalement, tout le contenu avant ES2015 a été étendu C'est à peu près comme le montre la figure ci-dessous :
let, const. Mot clé et portée au niveau du bloc
Avant ES6, il n'y avait qu'une seule façon de déclarer des variables, qui consistait à utiliser le mot-clé var. Dans ES2015, let et ont été ajoutés Le mot clé const est utilisé pour déclarer des variables et des constantes. Le code est le suivant : <code>var关键字,在ES2015中新增了let和const关键字来声明变量与常量,
代码如下:
// 声明变量
let v = 100
v = 200
// 声明常量
const V = 200
// 修改常量
// V = 300 // 报错
Copier après la connexion
同时使用let和const关键字声明的变量或者常量是具有块级作用域的,
示例代码如下:
{
var v = 100
}
{
let val = 200
}
console.log(v)
console.log(val) // 报错 val is not defined
Copier après la connexion
值得注意的是使用let或者const关键字声明的变量不具有变量提升的特性,且存在暂时性死区的特性。
函数的扩展
在ES2015中允许函数使用默认值,示例代码如下:
// es2015之前
function foo(v) {
v = v ? v : 100
return v
}
// es2015
function bar(v = 100) {
return v
}
Copier après la connexion
值得注意的是如果有多个参数时,默认参数必须从后向前使用。
在ES2015中新增了箭头函数,这是函数的一种简写形式,示例代码如下:
function foo(v) {
return v``
}
// 箭头函数写法
const foo = (v) => {
return v
}
// 简写形式 1
const foo = v => { // 只有一个参数可以省略括号
return v
}
// 简写形式 2
const foo = v => v // 语句中只有return时可以省略return和花括号
Copier après la connexion
值得注意的是箭头函数的this是根据执行上下文决定的,内部并不会绑定this。
使用箭头函数时内部并不存在arguments对象,而是采用剩余参数的方式代替,
示例代码如下:
const foo = (...args) => {
// console.log(arguments) // ReferenceError: arguments is not defined
console.log(args) // args 是一个数组
}
foo(1, 2, 3, 4) // [ 1, 2, 3, 4 ]
Copier après la connexion
在ES2015中为函数增加的要给name属性,该属性指向函数的名称,
示例代码如下:
function foo(v) {
return v
}
const bar = v => v
console.log(foo.name) // foo
console.log(bar.name) // bar
Les variables ou constantes déclarées en utilisant à la fois le let et le const<. Les mots-clés /code> sont Avec une portée au niveau du bloc, l'exemple de code </tbody></table>🎜 est le suivant : 🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">const arr = [1, 2, 3, 4, 5, 6]
const newArr = [...arr] // 复制数组
console.log(Math.max.call(null, ...arr)) // 将数组中的每一项作为参数使用</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>🎜Il est à noter que les variables déclarées à l'aide de <code>let ou const</code > les mots-clés n'ont pas de caractéristiques de promotion variables et il existe une zone morte temporaire. 🎜🎜L'extension de fonction🎜🎜🎜permet aux fonctions d'utiliser les valeurs par défaut dans ES2015. L'exemple de code est le suivant :🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">function foo() {
return Array.from(arguments) // 将 arguments 转换为数组
}
console.log(foo(1, 2, 3, 4, 5, 6)) // [ 1, 2, 3, 4, 5, 6 ]</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>🎜Il convient de noter que🎜s'il y a plusieurs paramètres, les paramètres par défaut doivent être utilisés à partir de. à l'envers🎜. 🎜🎜Dans ES2015, 🎜ajout de la fonction flèche, qui est une forme abrégée de fonction🎜, 🎜L'exemple de code est le suivant : 🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;">Array.of(1) // [1]
Array.of(true, 1, &#39;一碗周&#39;) // [true, 1, &#39;一碗周&#39;]</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>🎜Il convient de noter que le <code>this de la fonction flèche est basé sur le contexte d'exécution Déterminé, this ne sera pas lié en interne. 🎜🎜Lors de l'utilisation de la fonction flèche, il n'y a pas d'objet d'arguments internes, mais les paramètres restants sont utilisés à la place. 🎜🎜🎜L'exemple de code est le suivant : 🎜🎜
🎜Extension des valeurs numériques🎜🎜L'expansion des valeurs numériques dans ES2015 ajoute principalement quelques ajouts aux deux objets Math. et Number, ainsi que les représentations binaires et octales. 🎜🎜Dans ES2015, utilisez 0b ou 0B pour représenter le binaire, et utilisez 0o ou 0O pour représenter l'octal. 🎜🎜🎜L'exemple de code est le suivant : 🎜🎜
import a from 'm' // 导入模块 m 中的默认导出,将其命名为 a
import a, { b } from 'm' // 导入模块 m 中的默认导出以及单独导入成员 b
import * as A from 'm' // 导入模块中的所有成员
import 'm' // 执行 m 模块
export const b = 1 // 单独导出
export default b // 默认导出
export { b } // 按需导出
export { b as bb } // 改名导出
export { b } from 'm' // 导入模块 m 中的成员 b 并导出
Copier après la connexion
解构赋值
ES2015新增了解构赋值的语法,允许我们使用按照一定的模式,在数组或者对象中提取指定的值,
示例代码如下:
// 数组的解构赋值
let [name, age, hobby = 'coding' /* 结构赋值的默认值 */] = ['一碗周', 18]
// 交换两个变量的值
let a = 1
let b = 2
;[a, b] = [b, a]
console.log(a, b) // 2 1
// 对象的结构赋值
let { name: ObjName /* 解构赋值重命名 */, sex } = { name: '一碗周', sex: 1 }
// 函数参数的解构赋值
function bar({ name, age }) {
return name + age
}
bar({ name: '一碗周', age: 18 }) // 一碗周18
// 之前
var getGlobal = function () {
if (typeof self !== 'undefined') { return self; }
if (typeof window !== 'undefined') { return window; }
if (typeof global !== 'undefined') { return global; }
throw new Error('unable to locate global object');
};
var globals = getGlobal();
if (typeof globals.setTimeout !== 'function') {
// no setTimeout in this environment!
}
Copier après la connexion
// 之后
if (typeof globalThis.setTimeout !== 'function') {
// no setTimeout in this environment!
}
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn