Inhaltsverzeichnis
基础语法
该运算符主要用于函数调用
扩展运算符后面还可以放置表达式
一、 替代数组的 apply 方法
使用 Math.max() 函数来获取最大值的用法是:" >使用 Math.max() 函数来获取最大值的用法是:
使用 apply 方法结合 Math.max():" >使用 apply 方法结合 Math.max():
二、扩展运算符的应用 
1. 合并数组" >1. 合并数组
2. 拷贝数组" >2. 拷贝数组
3. 将伪数组转换为数组" >3. 将伪数组转换为数组
Grundlegende Syntax
Dieser Operator wird hauptsächlich für Funktionsaufrufe verwendet
Ausdrücke können auch nach dem Spread-Operator platziert werden
1 Die Apply-Methode zum Ersetzen array
Die Verwendung der Funktion Math.max() zum Erhalten des Maximalwerts ist:" >Die Verwendung der Funktion Math.max() zum Erhalten des Maximalwerts ist:
Verwenden Sie die apply-Methode in Verbindung mit Math.max():" >Verwenden Sie die apply-Methode in Verbindung mit Math.max():
2. Anwendung von Spread-Operatoren
1. Arrays zusammenführen" >1. Arrays zusammenführen
2. Array kopieren" >2. Array kopieren
4.与解构赋值结合" >4.与解构赋值结合
5. 字符串" >5. 字符串
6.Map 和 Set 结构,Generator 函数" >6.Map 和 Set 结构,Generator 函数
Heim Web-Frontend js-Tutorial Lassen Sie uns über den Spread-Operator in ES6 sprechen

Lassen Sie uns über den Spread-Operator in ES6 sprechen

Aug 08, 2022 pm 02:47 PM
es6

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.

Lassen Sie uns über den Spread-Operator in ES6 sprechen

[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 循环进行遍历的对象,例如:数组、字符串、MapSetDOM节点等。

基础语法

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
Nach dem Login kopieren

该运算符主要用于函数调用

function push(array, ...items) {
  array.push(...items);
}
function add(x, y) {
  return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42
Nach dem Login kopieren

        上面代码中,array.push(...items)add(...numbers)这两行,都是函数的调用,它们都使用了扩展运算符。该运算符将一个数组,变为参数序列。 

扩展运算符后面还可以放置表达式

const arr = [
  ...(x > 0 ? ['a'] : []),
  'b',
];
Nach dem Login kopieren

         如果扩展运算符后面是一个空数组,则不产生任何效果。

[...[], 1]
// [1]
Nach dem Login kopieren

扩展运算符还有许多用法...

一、 替代数组的 apply 方法

使用 Math.max() 函数来获取最大值的用法是:

const m = Math.max(1, 2, 3); //结果为3
Nach dem Login kopieren

使用 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));
Nach dem Login kopieren

ES6使用扩展运算符(...)就很简单就可以展开,上面的例子变为:

var arr = [2, 4, 8, 6, 0];
console.log(Math.max(...arr));  // 3
Nach dem Login kopieren

二、扩展运算符的应用 

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]
Nach dem Login kopieren

        使用扩展运算符就可以很简单地把数组展开为参数列表

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
Nach dem Login kopieren

       上面代码中,a3a4是用两种不同方法合并而成的新数组,但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了引用指向的值,会同步反映到新数组。

        注意:这两种方法都是浅拷贝,使用的时候需要注意。

2. 拷贝数组

        数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。

        ES5 只能用变通方法来复制数组。

const a1 = [1, 2];
const a2 = a1.concat();
a2[0] = 2;
a1 // [1, 2]
Nach dem Login kopieren

        上面代码中,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: {…}}
Nach dem Login kopieren

       记住:数组仍通过指针得到,所以我们并没有复制数组本身,我们复制的只是一个新的指针。

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 kopieren
Nach dem Login kopieren

Dieser Operator wird hauptsächlich für Funktionsaufrufe verwendet

// ES5
a = list[0], rest = list.slice(1)
// ES6
[a, ...rest] = list
Nach dem Login kopieren
Nach dem Login kopieren
Im obigen Code sind die beiden Zeilen array.push(...items) und add(...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

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 kopieren
Nach dem Login kopieren
🎜 Wenn auf den Spread-Operator ein leeres Array folgt, hat dies keine Auswirkung. 🎜
const [...butLast, last] = [1, 2, 3, 4, 5];
//  报错
const [first, ...middle, last] = [1, 2, 3, 4, 5];
//  报错
Nach dem Login kopieren
Nach dem Login kopieren
🎜Es gibt viele andere Verwendungsmöglichkeiten des Spread-Operators...🎜

1 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 kopieren
Nach dem Login kopieren

Verwenden 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: 🎜
let map = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);
let arr = [...map.keys()]; // [1, 2, 3]
Nach dem Login kopieren
Nach dem Login kopieren
🎜ES6 kann einfach mit dem Spread-Operator (...) erweitert werden. Das obige Beispiel wird zu: 🎜
var go = function*(){
yield 1;
yield 2;
yield 3;
};
[...go()] // [1, 2, 3]
Nach dem Login kopieren
Nach dem Login kopieren

2. Anwendung von Spread-Operatoren

1. Arrays zusammenführen

🎜 Der Spread-Operator bietet uns eine neue Möglichkeit, Arrays zusammenzuführen🎜
const obj = {a: 1, b: 2};
let arr = [...obj]; // TypeError: Cannot spread non-iterable object
Nach dem Login kopieren
Nach dem Login kopieren
🎜 Mit dem Spread-Operator können Sie Arrays ganz einfach zu einer Parameterliste erweitern 🎜 rrreee🎜 Im obigen Code sind a3 und a4 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 gibt a1 einen Klon des ursprünglichen Arrays zurück. Das Ändern von a2 hat keine Auswirkungen auf a1. 🎜🎜 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 wie Node.childNodes und Methoden wie document.querySelectorAll besteht. code> zurückgegeben. 🎜

        像 NodeList 和 arguments 这种伪数组,类似于数组,但不是数组,没有 Array 的所有方法,例如findmapfilter 等,但是可以使用 forEach() 来迭代

        可以通过扩展运算符将其转为数组,如下:

const nodeList = document.querySelectorAll(".row");
const nodeArray = [...nodeList];
console.log(nodeList);
console.log(nodeArray);
Nach dem Login kopieren
Nach dem Login kopieren

        注意:使用扩展运算符将伪数组转换为数组有局限性,这个类数组必须得有默认的迭代器且伪可遍历的

4.与解构赋值结合

        扩展运算符可以与解构赋值结合起来,用于生成数组

// ES5
a = list[0], rest = list.slice(1)
// ES6
[a, ...rest] = list
Nach dem Login kopieren
Nach 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 kopieren
Nach dem Login kopieren

        注意:如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

const [...butLast, last] = [1, 2, 3, 4, 5];
//  报错
const [first, ...middle, last] = [1, 2, 3, 4, 5];
//  报错
Nach dem Login kopieren
Nach dem Login kopieren

5. 字符串

        ES6的扩展语法可以很简单的把一个字符串分割为单独字符的数组:

[...'hello']
// [ "h", "e", "l", "l", "o" ]
Nach dem Login kopieren
Nach dem Login kopieren

6.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 kopieren
Nach dem Login kopieren

        Generator 函数运行后,返回一个遍历器对象,因此也可以使用扩展运算符。

var go = function*(){
yield 1;
yield 2;
yield 3;
};
[...go()] // [1, 2, 3]
Nach dem Login kopieren
Nach dem Login kopieren

        上面代码中,变量go是一个 Generator 函数,执行后返回的是一个遍历器对象,对这个遍历器对象执行扩展运算符,就会将内部遍历得到的值,转为一个数组。

        如果对没有 Iterator 接口的对象,使用扩展运算符,将会报错。

const obj = {a: 1, b: 2};
let arr = [...obj]; // TypeError: Cannot spread non-iterable object
Nach dem Login kopieren
Nach 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ist Async für es6 oder es7? Ist Async für es6 oder es7? Jan 29, 2023 pm 05:36 PM

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.

So kehren Sie ein Array in ES6 um So kehren Sie ein Array in ES6 um Oct 26, 2022 pm 06:19 PM

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()“. ".

So finden Sie in es6 verschiedene Elemente in zwei Arrays So finden Sie in es6 verschiedene Elemente in zwei Arrays Nov 01, 2022 pm 06:07 PM

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)“.

Warum muss das Miniprogramm es6 in es5 konvertieren? Warum muss das Miniprogramm es6 in es5 konvertieren? Nov 21, 2022 pm 06:15 PM

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“.

Ist eine es6-Syntax erforderlich? Ist eine es6-Syntax erforderlich? Oct 21, 2022 pm 04:09 PM

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.

Was bedeutet die temporäre Totzone von es6? Was bedeutet die temporäre Totzone von es6? Jan 03, 2023 pm 03:56 PM

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.

Ist die ES6-Karte bestellt? Ist die ES6-Karte bestellt? Nov 03, 2022 pm 07:05 PM

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.

So implementieren Sie die Array-Deduplizierung in es5 und es6 So implementieren Sie die Array-Deduplizierung in es5 und es6 Jan 16, 2023 pm 05:09 PM

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.

See all articles