Lassen Sie uns über den Spread-Operator in ES6 sprechen
Dieser Artikel vermittelt Ihnen relevantes Wissen über Javascript, in dem hauptsächlich verwandte Themen zum Erweiterungsoperator vorgestellt werden. Der Erweiterungsoperator von S6 hat eine sehr einfache Syntax und verwendet drei Punkte zur Darstellung von „..“. Sie können ein Array in eine durch Kommas getrennte Parametersequenz umwandeln. Schauen wir uns das an. Ich hoffe, es wird für alle hilfreich sein.
[Verwandte Empfehlungen: Javascript-Video-Tutorial, Web-Frontend]
Die Syntax des Spread-Operators von ES6 ist sehr einfach und verwendet drei Punkte zur Darstellung von „…“. Sie können ein Array in eine durch Kommas getrennte Folge von Parametern konvertieren.
Es erweitert das iterierbare Objekt in seine einzelnen Elemente. Das sogenannte iterierbare Objekt ist jedes Objekt, das mit der for of
-Schleife durchlaufen werden kann, wie zum Beispiel: Array, String, Map -, <code>Set
-, DOM
-Knoten usw. for of
循环进行遍历的对象,例如:数组、字符串、Map
、Set
、DOM
节点等。
基础语法
var array = [1,2,3,4]; console.log(...array);//1 2 3 4 var str = "String"; console.log(...str);//S t r i n g
该运算符主要用于函数调用
function push(array, ...items) { array.push(...items); } function add(x, y) { return x + y; } const numbers = [4, 38]; add(...numbers) // 42
上面代码中,array.push(...items)
和add(...numbers)
这两行,都是函数的调用,它们都使用了扩展运算符。该运算符将一个数组,变为参数序列。
扩展运算符后面还可以放置表达式
const arr = [ ...(x > 0 ? ['a'] : []), 'b', ];
如果扩展运算符后面是一个空数组,则不产生任何效果。
[...[], 1] // [1]
扩展运算符还有许多用法...
一、 替代数组的 apply 方法
使用 Math.max() 函数来获取最大值的用法是:
const m = Math.max(1, 2, 3); //结果为3
使用 apply 方法结合 Math.max():
但如果要计算数组里的最大值,显然数组是不能直接作为 Math.max() 的参数,我们需要把它展开。在ES6之前,我们也是需要结合apply来处理:
var arr = [2, 4, 8, 6, 0]; function max(arr) { return Math.max.apply(null, arr); } console.log(max(arr));
ES6使用扩展运算符(...)就很简单就可以展开,上面的例子变为:
var arr = [2, 4, 8, 6, 0]; console.log(Math.max(...arr)); // 3
二、扩展运算符的应用
1. 合并数组
扩展运算符给了我们全新的合并数组的方法
// ES5 apply 写法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; Array.prototype.push.apply(arr1, arr2); //arr1 [0, 1, 2, 3, 4, 5]
使用扩展运算符就可以很简单地把数组展开为参数列表
const a1 = [{ foo: 1 }]; const a2 = [{ bar: 2 }]; const a3 = a1.concat(a2); const a4 = [...a1, ...a2]; a3[0] === a1[0] // true a4[0] === a1[0] // true
上面代码中,a3
和a4
是用两种不同方法合并而成的新数组,但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了引用指向的值,会同步反映到新数组。
注意:这两种方法都是浅拷贝,使用的时候需要注意。
2. 拷贝数组
数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。
ES5 只能用变通方法来复制数组。
const a1 = [1, 2]; const a2 = a1.concat(); a2[0] = 2; a1 // [1, 2]
上面代码中,a1
会返回原数组的克隆,再修改a2
就不会对a1
产生影响。
扩展运算符提供了复制数组的简便写法。
//拷贝数组 var array0 = [1,2,3]; var array1 = [...array0]; console.log(array1);//[1, 2, 3] //拷贝数组 var obj = { age:1, name:"lis", arr:{ a1:[1,2] } } var obj2 = {...obj}; console.log(obj2);//{age: 1, name: "lis", arr: {…}}
记住:数组仍通过指针得到,所以我们并没有复制数组本身,我们复制的只是一个新的指针。
3. 将伪数组转换为数组
NodeList
对象是节点的集合,通常是由属性,如Node.childNodes
和方法,如document.querySelectorAll
Grundlegende Syntax
const nodeList = document.querySelectorAll(".row"); const nodeArray = [...nodeList]; console.log(nodeList); console.log(nodeArray);Nach dem Login kopierenNach dem Login kopierenDieser Operator wird hauptsächlich für Funktionsaufrufe verwendet
Im obigen Code sind die beiden Zeilen// ES5 a = list[0], rest = list.slice(1) // ES6 [a, ...rest] = listNach dem Login kopierenNach dem Login kopierenarray.push(...items)
undadd(...numbers)
beide Funktionsaufrufe. , sie alle verwenden den Spread-Operator. Dieser Operator wandelt ein Array in eine Folge von Parametern um. 🎜Ausdrücke können auch nach dem Spread-Operator platziert werden
🎜 Wenn auf den Spread-Operator ein leeres Array folgt, hat dies keine Auswirkung. 🎜const [first, ...rest] = [1, 2, 3, 4, 5]; first // 1 rest // [2, 3, 4, 5] const [first, ...rest] = []; first // undefined rest // [] const [first, ...rest] = ["foo"]; first // "foo" rest // []Nach dem Login kopierenNach dem Login kopieren🎜Es gibt viele andere Verwendungsmöglichkeiten des Spread-Operators...🎜const [...butLast, last] = [1, 2, 3, 4, 5]; // 报错 const [first, ...middle, last] = [1, 2, 3, 4, 5]; // 报错Nach dem Login kopierenNach dem Login kopieren1 Die Apply-Methode zum Ersetzen array
>Die Verwendung der Funktion Math.max() zum Erhalten des Maximalwerts ist:
[...'hello'] // [ "h", "e", "l", "l", "o" ]Nach dem Login kopierenNach dem Login kopierenVerwenden Sie die apply-Methode in Verbindung mit Math.max():
🎜 Wenn Sie jedoch den Maximalwert im Array berechnen möchten, kann das Array dies offensichtlich nicht direkt als Parameter von Math.max() verwendet werden. Wir müssen es erweitern. Vor ES6 mussten wir auch „Apply to Process“ kombinieren: 🎜🎜ES6 kann einfach mit dem Spread-Operator (...) erweitert werden. Das obige Beispiel wird zu: 🎜let map = new Map([ [1, 'one'], [2, 'two'], [3, 'three'], ]); let arr = [...map.keys()]; // [1, 2, 3]Nach dem Login kopierenNach dem Login kopierenvar go = function*(){ yield 1; yield 2; yield 3; }; [...go()] // [1, 2, 3]Nach dem Login kopierenNach dem Login kopieren2. Anwendung von Spread-Operatoren
1. Arrays zusammenführen
🎜 Der Spread-Operator bietet uns eine neue Möglichkeit, Arrays zusammenzuführen🎜🎜 Mit dem Spread-Operator können Sie Arrays ganz einfach zu einer Parameterliste erweitern 🎜 rrreee🎜 Im obigen Code sindconst obj = {a: 1, b: 2}; let arr = [...obj]; // TypeError: Cannot spread non-iterable objectNach dem Login kopierenNach dem Login kopierena3
unda4
neue Arrays, die mit zwei verschiedenen Methoden zusammengeführt wurden, aber ihre Mitglieder sind alle mit den ursprünglichen Arrays identisch. Ein Verweis auf ein Mitglied ist eine oberflächliche Kopie. Wenn der Wert, auf den die Referenz zeigt, geändert wird, wird er synchron im neuen Array widergespiegelt.都 Hinweis: Bei diesen beiden Methoden handelt es sich um flache Kopien, bei deren Verwendung Vorsicht geboten ist. 🎜2. Array kopieren
🎜 Array ist ein zusammengesetzter Datentyp. Wenn Sie es direkt kopieren, kopieren Sie nur den Zeiger auf die zugrunde liegende Datenstruktur, anstatt eine brandneue zu klonen Array. 🎜🎜 ES5 kann nur Workarounds zum Kopieren von Arrays verwenden. 🎜rrreee🎜 Im obigen Code gibta1
einen Klon des ursprünglichen Arrays zurück. Das Ändern vona2
hat keine Auswirkungen aufa1
. 🎜🎜 Der Spread-Operator bietet eine einfache Möglichkeit, ein Array zu kopieren. 🎜rrreee🎜 Denken Sie daran: Das Array wird immer noch über einen Zeiger erhalten, wir kopieren also nicht das Array selbst, sondern kopieren einfach einen neuen Zeiger. 🎜3. Pseudo-Array in Array konvertieren h2 >
🎜NodeList
-Objekt ist eine Sammlung von Knoten, die normalerweise aus Eigenschaften wieNode.childNodes
und Methoden wiedocument.querySelectorAll besteht. code> zurückgegeben. 🎜
像 NodeList 和 arguments 这种伪数组,类似于数组,但不是数组,没有
Array
的所有方法,例如find
、map
、filter
等,但是可以使用forEach()
来迭代可以通过扩展运算符将其转为数组,如下:
const nodeList = document.querySelectorAll(".row"); const nodeArray = [...nodeList]; console.log(nodeList); console.log(nodeArray);Nach dem Login kopierenNach dem Login kopieren注意:使用扩展运算符将伪数组转换为数组有局限性,这个类数组必须得有默认的迭代器且伪可遍历的
4.与解构赋值结合
扩展运算符可以与解构赋值结合起来,用于生成数组
// ES5 a = list[0], rest = list.slice(1) // ES6 [a, ...rest] = listNach dem Login kopierenNach dem Login kopieren下面是另外一些例子:
const [first, ...rest] = [1, 2, 3, 4, 5]; first // 1 rest // [2, 3, 4, 5] const [first, ...rest] = []; first // undefined rest // [] const [first, ...rest] = ["foo"]; first // "foo" rest // []Nach dem Login kopierenNach dem Login kopieren注意:如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。
const [...butLast, last] = [1, 2, 3, 4, 5]; // 报错 const [first, ...middle, last] = [1, 2, 3, 4, 5]; // 报错Nach dem Login kopierenNach dem Login kopieren5. 字符串
ES6的扩展语法可以很简单的把一个字符串分割为单独字符的数组:
[...'hello'] // [ "h", "e", "l", "l", "o" ]Nach dem Login kopierenNach dem Login kopieren6.Map 和 Set 结构,Generator 函数
扩展运算符内部调用的是数据结构的 Iterator 接口,因此只要具有 Iterator 接口的对象,都可以使用扩展运算符,比如 Map 结构。
let map = new Map([ [1, 'one'], [2, 'two'], [3, 'three'], ]); let arr = [...map.keys()]; // [1, 2, 3]Nach dem Login kopierenNach dem Login kopierenGenerator 函数运行后,返回一个遍历器对象,因此也可以使用扩展运算符。
var go = function*(){ yield 1; yield 2; yield 3; }; [...go()] // [1, 2, 3]Nach dem Login kopierenNach dem Login kopieren上面代码中,变量
go
是一个 Generator 函数,执行后返回的是一个遍历器对象,对这个遍历器对象执行扩展运算符,就会将内部遍历得到的值,转为一个数组。如果对没有 Iterator 接口的对象,使用扩展运算符,将会报错。
const obj = {a: 1, b: 2}; let arr = [...obj]; // TypeError: Cannot spread non-iterable objectNach dem Login kopierenNach dem Login kopieren【相关推荐:javascript视频教程、web前端】
Das obige ist der detaillierte Inhalt vonLassen Sie uns über den Spread-Operator in ES6 sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

async ist es7. Async und Wait sind neue Ergänzungen zu ES7 und Lösungen für asynchrone Vorgänge. Man kann sagen, dass Async/Await syntaktischer Zucker für Co-Module und Generatorfunktionen ist und js asynchronen Code mit klarerer Semantik löst. Wie der Name schon sagt, bedeutet Async „asynchron“. Async wird verwendet, um zu deklarieren, dass eine Funktion asynchron ist. Es gibt eine strikte Regel zwischen Async und Wait.

In ES6 können Sie die Methode reverse() des Array-Objekts verwenden, um eine Array-Umkehrung zu erreichen. Diese Methode wird verwendet, um die Reihenfolge der Elemente im Array umzukehren, wobei das letzte Element zuerst und das erste Element zuletzt gesetzt wird .umkehren()". Die Methode reverse() ändert das ursprüngliche Array. Wenn Sie es nicht ändern möchten, müssen Sie es mit dem Erweiterungsoperator „…“ verwenden. Die Syntax lautet „[...array].reverse()“. ".

Schritte: 1. Konvertieren Sie die beiden Arrays jeweils in Mengentypen mit der Syntax „newA=new Set(a); newB=new Set(b);“ 2. Verwenden Sie has() und filter(), um den Differenzsatz zu finden Mit der Syntax „new Set([...newA].filter(x =>!newB.has(x)))“ werden die Differenzmengenelemente in eine Mengensammlung aufgenommen und zurückgegeben. 3. Verwenden Sie Array. from, um die Menge in einen Array-Typ umzuwandeln, Syntax „Array.from(collection)“.

Aus Gründen der Browserkompatibilität. Als neue Spezifikation für JS fügt ES6 viele neue Syntax und API hinzu. Moderne Browser bieten jedoch keine umfassende Unterstützung für die neuen Funktionen von ES6, daher muss ES6-Code in ES5-Code konvertiert werden. In den WeChat-Webentwicklertools wird babel standardmäßig verwendet, um den ES6-Syntaxcode des Entwicklers in ES5-Code umzuwandeln, der von allen drei Terminals gut unterstützt wird und Entwicklern hilft, Entwicklungsprobleme zu lösen, die durch unterschiedliche Umgebungen nur im Projekt verursacht werden Option „ES6 bis ES5“.

Nein, require ist die modulare Syntax der CommonJS-Spezifikation und die modulare Syntax der es6-Spezifikation ist import. require wird zur Laufzeit geladen, und import wird zur Kompilierungszeit geladen; Wenn „require“ ausgeführt wird, ist die Leistung relativ gering. Die beim Importieren eingeführten Eigenschaften weisen eine etwas höhere Leistung auf.

In es6 handelt es sich bei der temporären Totzone um einen Syntaxfehler, der sich auf die Befehle let und const bezieht, die dafür sorgen, dass der Block einen geschlossenen Bereich bildet. Bevor eine Variable innerhalb eines Codeblocks mit dem Befehl let/const deklariert wird, ist sie nicht verfügbar und gehört zur „toten Zone“ der Variablen, bevor die Variable deklariert wird. ES6 legt fest, dass die Variablenheraufstufung in temporären Totzonen und in let- und const-Anweisungen nicht erfolgt, hauptsächlich um Laufzeitfehler zu reduzieren und zu verhindern, dass die Variable vor ihrer Deklaration verwendet wird, was zu unerwartetem Verhalten führen kann.

Die Karte ist geordnet. Der Kartentyp in ES6 ist eine geordnete Liste, in der die Schlüsselnamen und entsprechenden Werte alle Datentypen unterstützen, indem die Methode „Objext.is()“ aufgerufen wird Daher werden die Zahl 5 und die Zeichenfolge „5“ als zwei Typen beurteilt und können im Programm als zwei unabhängige Schlüssel erscheinen.

In es5 können Sie die for-Anweisung und die Funktion indexOf() verwenden, um eine Array-Deduplizierung zu erreichen. Die Syntax „for(i=0;i<array length;i++){a=newArr.indexOf(arr[i]);if( a== -1){...}}". In es6 können Sie den Spread-Operator Array.from() und Set verwenden, um Duplikate zu entfernen. Sie müssen zuerst das Array in ein Set-Objekt konvertieren, um Duplikate zu entfernen, und dann den Spread-Operator oder die Funktion Array.from() verwenden Konvertieren Sie das Set-Objekt zurück in ein Array.
