The new features of es6 are: 1. let and const; 2. symbol; 3. Template string; 4. Destructuring expression; 5. Object aspects, such as Map and Set; 6. Function aspects, such as parameters Default value and arrow function; 7. class keyword; 8. promise and proxy; 9. Modularization; 10. Operator.
What are the new features of es6?
New features of ES6
1, let and const
As mentioned before:https: //m.miracleart.cn/js-tutorial-499866.html
2. symbol
Symbol is a new basic symbol introduced in ES6 A data type used to represent a unique value and cannot be operated with other data types. It is the seventh data type in JavaScript, alongside undefined, null, Number, String, Boolean, and Object. You can create a Symbol value like this:const a = Symbol(); console.log(a); //Symbol() //因?yàn)镾ymbol是基本數(shù)據(jù)類型,而不是對(duì)象,不能 new 。 const a = new Symbol();//報(bào)錯(cuò),Symbol is not a constructorAfter using Symbol() to create a Symbol type value and assign it to a variable, you will get a unique value in memory. Now except through variable a, no one can recreate this value in any scope
const a = Symbol();const b = Symbol();Memory deconstruction diagram
3. Template String
- Before ES6, handling template strings:
- Build templates by "\" and " "
- Use
${}to define;
backtick
(``)can be done directly;
<script> url="xxxxxx" // es6之前 let html="<div>"+ " <a>"+url+"</a>"+ "</div>"; //es6 let eshtml=`<div> <a>${url}</a> </div>`</script>very easy to use
3.1 New string method (supplementary)
- includes()
Determine whether the string contains the parameter string and return a boolean value.
- startsWith() / endsWith()
, determine whether the string starts or ends with the parameter string. Returns a boolean value. These two methods can have a second parameter, a number, indicating the position to start the search.
let str = 'blue,red,orange,white';str.includes('blue'); //truestr.startsWith('blue'); //true str.endsWith('blue'); //false
- repeat()
The method returns a new string the specified number of times.
console.log('hello'.repeat(2)); //'hellohello'
- padStart()/padEnd()
, use the parameter string to complete the string from the front or back according to the given length, and return a new string.
let arr = 'hell';console.log(arr.padEnd(5,'o')); //'hello'console.log(arr.padEnd(6,'o')); //'helloo'console.log(arr.padEnd(6)); //'hell ',如果沒(méi)有指定將用空格代替 console.log(arr.padStart(5,'o')); //'ohell'
4. Destructuring expression
Destructuring assignment is an extension of the assignment operator. It is a pattern matching for anarray or object, and then assigns values ??to the variables in it.
String, and the new Map and Set added in ES6 can all use destructuring expressions
4.1 Array destructuringlet [a,b,c] = [1,2,3];console.log(a,b,c); //1,2,3
let [a,b,c] = [1,,3];console.log(a,b,c); //1,undefined,3
let [a,,b] = [1,2,3];console.log(a,b);//1,3
let [a,..b] = [1,2,3];
//...是剩余運(yùn)算符,表示賦值運(yùn)算符右邊除第一個(gè)值外剩余的都賦值給b
console.log(a,b);
//1,[2,3]
4.2 Object destructuring
The destructuring assignment of an object is similar to that of an array, but the variable name on the left needs to use the attribute name of the object, and use curly brackets { } instead of square brackets []let obj = { name: "ren", age: 12, sex: "male" };let { name, age, sex } = obj;console.log(name, age, sex); //'ren' 12 'male'let { name: myName, age: myAge, sex: mySex } = obj; //自定義變量名console.log(myName, myAge, mySex); //'ren' 12 'male'
5. Object aspect
##5.1 Map and SetMap and Set belong to Newly added objects in es6
5.1.1 MapThe Map object is used to save key-value pairs. Any value supported by JavaScript can be used as a key. Or a value.
Different from objects,- object keys can only be
- strings
or ES6 symbol values, while Map can be any value.
The Map object has a - size attribute
, which stores the number of key-value pairs, while the object object has no similar attribute.
let myMap = new Map([['name','ren'],['age',12]]);console.log(myMap); //{'name'=>'ren','age'=>12}myMap.set('sex','male');console.log(myMap); //{'name'=>'ren','age'=>12,'sex'=>'male'}console.log(myMap.size); //3myMap.get('name'); //'ren'myMap.has('age'); //truemyMap.delete('age'); //truemyMap.has('age'); //falsemyMap.get('age'); //undefined
5.1.2 Set can be understood as the Set collection object of the backend
The Set object is similar to the Map object, but it stores Not a key-value pair. Similar to an array, but itseach element is unique
. let mySet = new Set([1,2,3]);
//里面要傳一個(gè)數(shù)組,否則會(huì)報(bào)錯(cuò)console.log(mySet);
//{1,2,3}mySet.add(4);console.log(mySet);
//{1,2,3,4}mySet.delete(1);
//truemySet.has(1);
//falseconsole.log(mySet);
//{2,3,4}
Using the characteristics of Set object
, you can easily achieve duplication of arrays 參數(shù):數(shù)值 -------- 返回值: 參數(shù):函數(shù)-------- 返回值:數(shù)組 參數(shù):函數(shù)-------- 返回值:undefined 參數(shù):函數(shù)-------- 返回值:數(shù)值 參數(shù):函數(shù)-------- 返回值: 在 ES6 中,添加了 箭頭函數(shù)實(shí)現(xiàn)了一種更加簡(jiǎn)潔的書寫方式。箭頭函數(shù)內(nèi)部沒(méi)有 講不清楚,等我學(xué)會(huì)了,后面在講 ES6使用關(guān)鍵字 ES6 通過(guò) export 和export default 導(dǎo)出模塊。 模塊化優(yōu)點(diǎn)let arr = [1,1,2,3,4,4];let mySet = new Set(arr);
let newArr = Array.from(mySet);console.log(newArr);
//[1,2,3,4]
5.3 數(shù)組的新方法
Array.from()
是內(nèi)置對(duì)象Array的方法,實(shí)例數(shù)組不能調(diào)用includes()
參數(shù):數(shù)值 -------- 返回值:true/false
map()
、filter()
參數(shù):函數(shù)-------- 返回值:數(shù)組forEach()
參數(shù):函數(shù)-------- 返回值:undefined
find()
參數(shù):函數(shù)-------- 返回值:數(shù)值some()
、every()
參數(shù):函數(shù)-------- 返回值:true/false
5.3.1 Array.from()方法
Array.from()
方法可以將可迭代對(duì)象轉(zhuǎn)換為新的數(shù)組。let arr = [1, 2, 3];let obj = {
double(n) {
return n * 2;
}}console.log(Array.from(arr, function (n){
return this.double(n);}, obj)); // [2, 4, 6]
5.3.2 includes()方法
true/false
includes()
方法------是查看數(shù)組中是否存在這個(gè)元素,存在就返回true,不存在就返回falselet arr = [1,33,44,22,6,9]let ary = arr.includes(22)console.log(ary)
5.3.3 map()、filter() 方法
map()
方法-----要利用原數(shù)組經(jīng)過(guò)運(yùn)算后的數(shù)組,或者從對(duì)象數(shù)組中拿某個(gè)屬性filter()
方法------是將符合挑選的篩選出來(lái)成為一個(gè)新數(shù)組,新數(shù)組不會(huì)影響舊數(shù)組。<script>
let arr = [1, 33, 44, 2, 6, 9];
let newarr1 = arr.filter((v) => v > 10); //newarr1-------[33, 44]
let newarr2 = arr.filter((v) => v * 2); //newarr2-------[1, 33, 44, 2, 6, 9]
let newarr3 = arr.map((v) => v > 10); //newarr3-------[false, true, true, false, false, false]
let newarr4 = arr.map((v) => v * 2); //newarr4------- [2, 66, 88, 4, 12, 18]</script>
5.3.4 forEach()方法
forEach()
方法------是循環(huán)遍歷數(shù)組中的每一項(xiàng),沒(méi)有返回值find()
方法---------是查找數(shù)組中符合條件的第一個(gè)元素,直接將這個(gè)元素返回出來(lái)let arr = [1,33,44,2,6,9]let a1= []arr.forEach((v, i)=>{
if (v > 10) {
a1.push(arr[i])
} })console.log(a1) [33,44]let a2= arr.find(v => v > 10)console.log(a2)
5.3.4 find()方法
find()
方法----------是查找數(shù)組中符合條件的第一個(gè)元素,直接將這個(gè)元素返回出來(lái)let arr = [1,33,44,2,6,9]let a= arr.find(v => v > 10)console.log(a) // 33
5.3.6 some()、every() 方法
true/false
some()
方法------找到一個(gè)符合條件的就返回true
,所有都不符合返回false
。every()
方法------數(shù)組所有值都符合條件才會(huì)返回true
,有一個(gè)不符合返回false
。let arr = [1,2,3,4,6,11]let newarr = arr.some(function(v){
return v > 10})console.log(newarr)
//truelet newarr2 = arr.every(function(v){
return v > 10})console.log(newarr2)
//false
5.4 object的新方法
Object.is()
、Object.assign()
、Object.keys()
、Object.values()
、Object.entries()
等方法。5.4.1 Object.is()
Object.is()
方法用來(lái)判斷兩個(gè)值是否為同一個(gè)值,返回一個(gè)布爾類型的值。const obj1 = {};const obj2 = {};console.log(Object.is(obj1, obj2)); // falseconst obj3 = {};const value1 = obj3;const value2 = obj4;console.log(Object.is(value1, value2)); // true
5.4.2 Object.assign()
Object.assign()
方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象分配到目標(biāo)對(duì)象,并返回目標(biāo)對(duì)象。------難理解看實(shí)例
對(duì)象合并const obj1 = { a: 1 };const obj2 = { b: 2 };const obj3 = { a:5 , c: 3 };//對(duì)象合并,把后面對(duì)像合并到第一個(gè)對(duì)象,對(duì)象里相同的屬性會(huì)覆蓋Object.assign(obj1, obj2, obj3);console.log(obj1); // { a: 5, b: 2 , c:3}
5.4.3 Object.keys()、Object.values()、Object.entries()
不解釋直接看例子<script>
let person = {
name: "admin",
age: 12,
language: ["java", "js", "css"],
};
console.log(Object.keys(person)); //[ 'name', 'age', 'language' ]
console.log(Object.values(person)); //[ 'admin', 12, [ 'java', 'js', 'css' ] ]
console.log(Object.entries(person)); /* [
["name", "admin"],
["age", 12],
["language", ["java", "js", "css"]],
]; */</script>
5.5 對(duì)象聲明簡(jiǎn)寫
<script>
let name ='admin'
let age = 20
//es6之前
// let person={
// name:name,
// age:age
// }
//es6 聲明對(duì)象時(shí)的屬性名與引用的變量名相同就可以省略
let person={
name,
age }</script>
5.6 …(對(duì)象擴(kuò)展符)
<script>
let person={
name: "admin",
age: 12,
wife:"迪麗熱巴"
}
let person2={...person}
console.log(person2===person);//false
console.log(person2);
//{name: 'admin', age: 12, wife: "迪麗熱巴"}
</script>
<script>
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = { a: 5, c: 3 };
let newObj ={...obj1,...obj2,...obj3}
console.log(newObj);
// { a: 5, b: 2 , c:3}
</script>
6、函數(shù)方面
6.1 參數(shù)默認(rèn)值
<script>
// es6之前
// function add(a, b) {
// if(!a) a=0
// if(!b) b=0
// return a + b;
// }
//es6
function add(a = 0, b = 0) {
return a + b;
}
let x=add();
let y=add(2);
let z=add(3, 4);
console.log(x,y,z); //x=0, y=2, z=7</script>
6.2 箭頭函數(shù)
arguments
,也沒(méi)有prototype
屬性,所以不能用new
關(guān)鍵字調(diào)用箭頭函數(shù)。let add = (a,b) => {
return a+b;}let print = () => {
console.log('hi');}let fn = a => a * a;
//當(dāng)只有一個(gè)參數(shù)時(shí),括號(hào)可以省略,函數(shù)體只有單行return語(yǔ)句時(shí),大括號(hào)也可以省略。
6.3 箭頭函數(shù)和普通函數(shù)最大的區(qū)別在于其內(nèi)部this永遠(yuǎn)指向其父級(jí)對(duì)象的this。(重點(diǎn))
var age = 123;
let obj = {
age:456,
say:() => {
console.log(this.age); //this指向window
}
};obj.say(); //123
7、class(類)
class
作為對(duì)象的模板被引入ES6,你可以通過(guò) class
關(guān)鍵字定義類。class
的本質(zhì)依然是一個(gè)函數(shù)。<script>
class person {
//關(guān)鍵字聲明方式
constructor(name) {
this.name=name }
say() {
console.log("hello");
}
}
var p = new person('p');
p.say(); //'hello'
console.log(p.name);</script>
類的繼承通過(guò)extends
關(guān)鍵字實(shí)現(xiàn)。
子類必須在constructor
中調(diào)用super()
<script>
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
say() {
console.log(this.name + ":" + this.age);
}
}
class Student extends Person {
constructor(name, age, sex) {
super(name, age);
this.sex = sex;
}
}
var student = new Student("admin", 12, "male");
student.name; //'admin'
student.sex; //'male'
student.say(); //'ren:12'</script>
8、promise和proxy
9、模塊化
import
導(dǎo)入模塊(文件),有兩種常用的方式:import ‘模塊名稱’ from ‘路徑’;import ‘路徑’;
let name = 'ren',age = 12;export {name,age};
//注意:變量需要用大括號(hào)包裹,然后才能向外輸出
1.防止命名沖突
2.復(fù)用性強(qiáng)
10、運(yùn)算符
...
擴(kuò)展運(yùn)算符
可選鏈 ?.
函數(shù)綁定運(yùn)算符::
若本文對(duì)你有幫助 點(diǎn)個(gè)贊 點(diǎn)個(gè)關(guān)注
總結(jié)——ES6思維導(dǎo)圖
推薦學(xué)習(xí):《react視頻教程》
The above is the detailed content of What are the new features of es6?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In ES6, you can use the reverse() method of the array object to achieve array reversal. This method is used to reverse the order of the elements in the array, putting the last element first and the first element last. The syntax "array.reverse()". The reverse() method will modify the original array. If you do not want to modify it, you need to use it with the expansion operator "...", and the syntax is "[...array].reverse()".

async is es7. async and await are new additions to ES7 and are solutions for asynchronous operations; async/await can be said to be syntactic sugar for co modules and generator functions, solving js asynchronous code with clearer semantics. As the name suggests, async means "asynchronous". Async is used to declare that a function is asynchronous; there is a strict rule between async and await. Both cannot be separated from each other, and await can only be written in async functions.

For browser compatibility. As a new specification for JS, ES6 adds a lot of new syntax and API. However, modern browsers do not have high support for the new features of ES6, so ES6 code needs to be converted to ES5 code. In the WeChat web developer tools, babel is used by default to convert the developer's ES6 syntax code into ES5 code that is well supported by all three terminals, helping developers solve development problems caused by different environments; only in the project Just configure and check the "ES6 to ES5" option.

Steps: 1. Convert the two arrays to set types respectively, with the syntax "newA=new Set(a);newB=new Set(b);"; 2. Use has() and filter() to find the difference set, with the syntax " new Set([...newA].filter(x =>!newB.has(x)))", the difference set elements will be included in a set collection and returned; 3. Use Array.from to convert the set into an array Type, syntax "Array.from(collection)".

In es5, you can use the for statement and indexOf() function to achieve array deduplication. The syntax "for(i=0;i<array length;i++){a=newArr.indexOf(arr[i]);if(a== -1){...}}". In es6, you can use the spread operator, Array.from() and Set to remove duplication; you need to first convert the array into a Set object to remove duplication, and then use the spread operator or the Array.from() function to convert the Set object back to an array. Just group.

In es6, the temporary dead zone is a syntax error, which refers to the let and const commands that make the block form a closed scope. Within a code block, before a variable is declared using the let/const command, the variable is unavailable and belongs to the variable's "dead zone" before the variable is declared; this is syntactically called a "temporary dead zone". ES6 stipulates that variable promotion does not occur in temporary dead zones and let and const statements, mainly to reduce runtime errors and prevent the variable from being used before it is declared, resulting in unexpected behavior.

No, require is the modular syntax of the CommonJS specification; and the modular syntax of the es6 specification is import. require is loaded at runtime, and import is loaded at compile time; require can be written anywhere in the code, import can only be written at the top of the file and cannot be used in conditional statements or function scopes; module attributes are introduced only when require is run. Therefore, the performance is relatively low. The properties of the module introduced during import compilation have slightly higher performance.

In ES6, you can use the length attribute of the array object to determine how many items there are in the array, that is, to get the number of elements in the array; this attribute can return the number of elements in the array, just use the "array.length" statement. Returns a value representing the number of elements of the array object, that is, the length value.
