Rumah >hujung hadapan web >tutorial js >Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

青灯夜游
青灯夜游ke hadapan
2022-08-24 10:32:562022semak imbas

Artikel ini akan memberi anda pemahaman yang mendalam tentang ES6 dan mempelajari tentang ciri baharu ES6 saya harap ia akan membantu anda!

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

Memahami ES6

ECMAScript ialah 脚本语言的标准化规范 yang pada mulanya Dinamakan Mocha, kemudian dinamakan semula LiveScript, dan akhirnya dinamakan semula JavaScript
ECMAScript 2015 (ES2015), edisi ke-6, asalnya dipanggil ECMAScript 6 (ES6), menambah ciri baharu .

Skop blok ES6 biarkan

Pertama sekali, apakah skop? Skop hanya bermaksud mengisytiharkan pembolehubah Skop yang sah bagi pembolehubah ini adalah sebelum let datang. js hanya mempunyai var dan 全局作用域 untuk 函数作用域, ES6 membawa 块级作用域 kepada js. [Cadangan berkaitan: tutorial pembelajaran javascript]

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

{
    var a = "?";
    let b = "⛳";
}
console.log(a);
console.log(b);
?
Uncaught ReferenceError: b is not defined

Seperti yang anda lihat, kami menggunakan var kata kunci Pembolehubah a ditakrifkan dalam blok Sebenarnya, ia boleh diakses secara global, jadi var声明的变量是全局的, tetapi kami mahu pembolehubah itu berkuat kuasa dalam blok dan tidak boleh diakses di luar blok ES6 untuk menambah Kata kunci skop peringkat blok let digunakan untuk mengisytiharkan pembolehubah ini a Apabila saya mengaksesnya semula, ralat dilaporkan, menyebut a is not defined, a tidak ditakrifkan

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

Tatasusunan pemusnah ES6

adalah seperti berikut, pertama, fungsi ditakrifkan untuk mengembalikan tatasusunan Sebelum memusnahkan tatasusunan, panggil tatasusunan dan tetapkan nilai pulangan ke temp, dan kemudian cetak tatasusunan temp Gunakan

, tentukan terus pembolehubah tatasusunan, dan kemudian arahkan nilai pulangan fungsi kepada pembolehubah Ia secara automatik akan menetapkan nilai item pertama kepada pembolehubah tatasusunan pertama item kedua kepada pembolehubah tatasusunan kedua. Dengan analogi, akhirnya cetak tiga pembolehubah dan lihat bahawa tiada masalah解构数组

function breakfast() {
    return ['?', '?', '?'];
}
var temp = breakfast();
console.log(temp[0], temp[1], temp[2]);

let [a, b, c] = breakfast();
console.log(a, b, c);
? ? ?
? ? ?

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 objek pemusnah

Pertama sekali

Fungsi mengembalikan breakfast Gunakan 对象 untuk mentakrifkan objek Kunci dalam pasangan nilai kunci mewakili nama kunci objek sebenar yang dipetakan. Nilai ialah pembolehubah tersuai Selepas pemusnahan selesai, tugasan akan diselesaikan secara automatik, dan kemudian fungsi sarapan akan dipanggil Kembalikan objek dan kemudian mencetak pembolehubah a, b, c Anda boleh melihat bahawa tiada masalah 解构对象

function breakfast() {
    return { a: '?', b: '?', c: '?' }
}
let { a: a, b: b, c: c } = breakfast();
console.log(a, b, c);
? ? ?

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

Rentetan templat ES6

Sebelum menggunakan rentetan templat, kami menggabungkan pembolehubah rentetan menggunakan

Menggunakan rentetan templat yang disediakan oleh ES6, mula-mula gunakan `` untuk membalut rentetan apabila menggunakan pembolehubah, gunakan

${变量}

let a = '?',
    b = '?️';

let c = '今天吃' + a + '吃完看' + b;
console.log(c);

let d = `今天吃 ${a} 吃完看 ${b}`;
console.log(d);
今天吃?吃完看?️
今天吃 ? 吃完看 ?️

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 Tentukan sama ada rentetan mengandungi rentetan lain

Menggunakan fungsi ini, anda boleh dengan mudah Adakah penyiapan rentetan itu bermula dengan sesuatu, adakah ia berakhir dengan sesuatu, adakah ia mengandungi sebarang operasi rentetan, dsb.

let str = '你好,我是小周 ❤️';
console.log(str.startsWith('你好'));
console.log(str.endsWith('❤️'));
console.log(str.endsWith('你好'));
console.log(str.includes(" "));
true
true
false
true

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

Parameter lalai ES6

Dalam ES6, anda boleh menggunakan parameter lalai apabila fungsi dipanggil dan tiada nilai diberikan kepada parameter, parameter lalai yang ditetapkan digunakan untuk pelaksanaan Apabila nilai ditetapkan kepada parameter, Ia akan dilaksanakan menggunakan nilai yang baru ditetapkan, menimpa nilai lalai, menggunakan yang berikut:

function say(str) {
    console.log(str);
}
function say1(str = '嘿嘿') {
    console.log(str);
}
say();
say1();
say1('❤️');
undefined
嘿嘿
❤️

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

Pengendali pengembangan ES6

Gunakan

untuk mengembangkan elemen untuk pengendalian yang mudah

...

let arr = ['❤️', '?', '?'];
console.log(arr);
console.log(...arr);
let brr = ['王子', ...arr];
console.log(brr);
console.log(...brr);
[ '❤️', '?', '?' ]
❤️ ? ?
[ '王子', '❤️', '?', '?' ]
王子 ❤️ ? ?

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!operator baki ES6

operator digunakan pada parameter fungsi, menerima tatasusunan parameter dan digunakan seperti berikut:

...

function f1(a, b, ...c) {
    console.log(a, b, c);
    console.log(a, b, ...c);
}
f1('?','?','☃️','㊙️');
? ? [ '☃️', '㊙️' ]
? ? ☃️ ㊙️

ES6 函数名字

使用 .name 可以获取函数的名字,具体使用如下:

function f1() { }
console.log(f1.name);
let f2 = function () { };
console.log(f2.name);
let f3 = function f4() { };
console.log(f3.name);
f1
f2
f4

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 箭头函数

使用箭头函数可以让代码更简洁,但是也要注意箭头函数的局限性,以及箭头函数中自身没有 this,this指向父级

let f1 = a => a;

let f2 = (a, b) => {
    return a + b;
}

console.log(f1(10));
console.log(f2(10, 10));
10
20

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 对象表达式

使用es6的对象表达式,如果对象属性和值一样,可以省略值,函数写法可以省去function,用法如下:

let a = '㊙️';
let b = '☃️';

const obj = {
    a: a,
    b: b,
    say: function () {

    }
}

const es6obj = {
    a,
    b,
    say() {

    }
}

console.log(obj);
console.log(es6obj);
{ a: '㊙️', b: '☃️', say: [Function: say] }
{ a: '㊙️', b: '☃️', say: [Function: say] }

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 恒量

使用 const 关键字定义衡量,const 限制的是给衡量分配值的动作,并不限制衡量中的值,使用如下:

const app = ['☃️', '?'];
console.log(...app);
app.push('?');
console.log(...app);
app = 10;

可以看到当再次给衡量分配值就报错了

☃️ ?
☃️ ? ?
app = 10;
    ^
TypeError: Assignment to constant variable.

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 对象属性名

使用点定义对象属性时,如果属性名中含有空格字符,是不合法的,语法通不过的,使用 [属性名] 可以完美解决,并且不仅可以直接写明属性名,还可以使用变量来指定,具体使用如下:

let obj = {};
let a = 'little name';
obj.name = '王子';
// 使用点定义属性中间有空格是不合法的
// obj.little name = '小王子';
obj[a] = '小王子';
console.log(obj);
{ name: '王子', 'little name': '小王子' }

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 判断两个值是否相等

一些特殊值使用 ===== 进行比较的结果,可能不满足你的需求,这是你可以使用Object.is(第一个值,第二个值) 来进行判断,可能你就开心的笑了

console.log(NaN == NaN);
console.log(+0 == -0);
console.log(Object.is(NaN, NaN));
console.log(Object.is(+0, -0));
false
true
true
false

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 复制对象

使用 Object.assign() 可以把一个对象复制到另一个对象,使用如下:

let obj = {};
Object.assign(
    // 源
    obj,
    // 复制目标对象
    { a: '☃️' }
);
console.log(obj);
{ a: '☃️' }

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 设置对象的 prototype

使用es6可以设置对象的 prototype,使用如下:

let obj1 = {
    get() {
        return 1;
    }
}
let obj2 = {
    a: 10,
    get() {
        return 2;
    }
}
let test = Object.create(obj1);
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj1);
Object.setPrototypeOf(test, obj2);
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj2);
1
true
2
true

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 proto

let obj1 = {
    get() {
        return 1;
    }
}
let obj2 = {
    a: 10,
    get() {
        return 2;
    }
}
let test = {
    __proto__: obj1
}
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj1);
test.__proto__ = obj2;
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj2);
1
true
2
true

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 super

let obj1 = {
    get() {
        return 1;
    }
}
let test = {
    __proto__: obj1,
    get() {
        return super.get() + ' ☃️';
    }
}
console.log(test.get());
1 ☃️

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 生成迭代器

在学习前,先首写一个迭代器

function die(arr) {
    let i = 0;

    return {
        next() {
            let done = (i >= arr.length);
            let value = !done ? arr[i++] : undefined;

            return {
                value: value,
                done: done
            }
        }
    }
}
let arr = ['☃️', '?', '?'];

let dieArr = die(arr);
console.log(dieArr.next());
console.log(dieArr.next());
console.log(dieArr.next());
console.log(dieArr.next());
{ value: '☃️', done: false }
{ value: '?', done: false }
{ value: '?', done: false }
{ value: undefined, done: true }

OK,看看简化的生成器

function* die(arr) {
    for (let i = 0; i <pre class="brush:php;toolbar:false">{ value: '?', done: false }
{ value: '☃️', done: false }
{ value: undefined, done: true }

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 类

使用es6可以快速方便的构建类,好耶

class stu {
    constructor(name) {
        this.name = name;
    }
    say() {
        return this.name + '说奥里给';
    }
}
let xiaoming = new stu("小明");
console.log(xiaoming.say());
小明说奥里给

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 get set

定义get/set方法,用于获取或者修改类的属性

class stu {
    constructor(name) {
        this.name = name;
    }
    get() {
        return this.name;
    }
    set(newStr) {
        this.name = newStr;
    }
}
let xiaoming = new stu("小明");
console.log(xiaoming.get());
xiaoming.set("大明")
console.log(xiaoming.get());
小明
大明

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 static

使用static关键字修饰的方法,不用实例化对象也可以直接使用

class stu {
    static say(str) {
        console.log(str);
    }
}
stu.say("奥里给 静态方法");
奥里给 静态方法

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 extends

使用继承,可以减少代码冗余,比如:

class Person {
    constructor(name, bir) {
        this.name = name;
        this.bir = bir;
    }
    showInfo() {
        return '姓名:' + this.name + '生日:' + this.bir;
    }
}
class A extends Person {
    constructor(name, bir) {
        super(name, bir);
    }
}
let zhouql = new A("周棋洛", "2002-06-01");
// 周棋洛本身是没有showInfo方法的,是继承自Person的
console.log(zhouql.showInfo());
姓名:周棋洛生日:2002-06-01

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 Set

Set 集合,与数组不同,Set 集合中不允许有重复元素

// 创建Set集合
let food = new Set('??');
// 重复添加,只有一个能进去
food.add('?');
food.add('?');

console.log(food);
// 当前集合大小
console.log(food.size);
// 判断集合中是否存在某一元素
console.log(food.has('?'));
// 删除集合中某一元素
food.delete('?');
console.log(food);
// 循环遍历集合
food.forEach(f => {
    console.log(f);
});
// 清空集合
food.clear();
console.log(food);
Set(3) { '?', '?', '?' }
3
true
Set(2) { '?', '?' }
?
?
Set(0) {}

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 Map

Map结合存储键值对

let food = new Map();
let a = {}, b = function () { }, c = "name";

food.set(a, '?');
food.set(b, '?');
food.set(b, '?');
food.set(c, '米饭');

console.log(food);
console.log(food.size);
console.log(food.get(a));
food.delete(c);
console.log(food);
console.log(food.has(a));

food.forEach((v, k) => {
    console.log(`${k} + ${v}`);
});
food.clear();
console.log(food);
Map(3) { {} => '?', [Function: b] => '?', 'name' => '米饭' }
3
?
Map(2) { {} => '?', [Function: b] => '?' }
true
[object Object] + ?
function () { } + ?
Map(0) {}

Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!

ES6 模块化

使用模块化开发,es6可以方便的导入和导出一些内容,还有默认导出等等细节

let a = '?';
let f1 = function (str = '你丫的写参数') {
    console.log(str);
}
export { a, f1 };
import {a, f1} from './27模块测试.js';
console.log(a);
f1();
f1('知道了');

恭喜你,读完了本篇文章,能力 + 100 ,颜值 + 10,欢迎下次再来。先别走,如果觉得文章写的不错,还请点赞,收藏,关注帅气的博主啊,手动狗头,我会继续努力,原创不易,你的支持就是小周的动力

(学习视频分享:web前端开发编程基础视频

Atas ialah kandungan terperinci Artikel ini akan memberi anda penjelasan pantas dan terperinci tentang ES6 dan mengenali ciri baharu!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam