ES6内置功能杂记

  1. Symbol 是一种独特的且不可变的数据类型,经常用来标识对象属性

  2. 可迭代协议用来定义和自定义对象的迭代行为。也就是说在 ES6 中,你可以灵活地指定循环访问对象中的值的方式

  3. 迭代器方法(可通过常量 [Symbol.iterator] 获得)是一个无参数的函数,返回的是迭代器对象。迭代器对象是遵守迭代器协议的对象

  4. 迭代器协议用来定义对象生成一系列值的标准方式。实际上就是现在有了定义对象如何迭代的流程。通过执行 .next() 方法来完成这一流程

  5. 在 ES6 中,有一个新的内置对象的行为和数学意义上的集合相同,使用起来类似于数组。这个新对象就叫做“Set”。Set 与数组之间的最大区别是:Set 不基于索引,不能根据集合中的条目在集合中的位置引用这些条目;Set 中的条目不能单独被访问

  6. 根据值列表创建 Set,则使用数组,示例在创建 Set 时,会自动移除重复的条目 "Super Mario Bros."

    const games = new Set(['Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart', 'Super Mario Bros.']);
    console.log(games);
    
    printer:
    Set {'Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart'}

     

  7. 创建 Set 后想要添加或删除条目,使用名称对应的 .add() 和 .delete() 方法,想要删除 Set 中的所有条目,可以使用 .clear() 方法

  8. 尝试向 Set 中 .add() 重复的条目,系统不会报错,但是该条目不会添加到 Set 中。此外,如果你尝试 .delete() Set 中不存在的条目,也不会报错,Set 保持不变

  9. .add() 添加不管成功与否,都会返回该 Set 对象。另一方面,.delete() 则会返回一个布尔值,该值取决于是否成功删除

  10. 使用 .size 属性可以返回 Set 中的条目数。不能像数组那样通过索引访问 Set,因此要使用 .size 属性,而不是 .length 属性来获取 Set 的大小

  11. .has() 方法可以检查 Set 中是否存在某个条目

  12. 检索所有值:使用 .values() 方法可以返回 Set 中的值。.values() 方法的返回值是 SetIterator 对象

  13. 迭代器对象SetIterator

  14. next()方法在迭代器对象上

  15. Set 中的项目可用for...of 循环访问

  16. 弱集合WeakSet

  17. WeakSet 和普通 Set 有以下关键区别:WeakSet 只能包含对象、WeakSet 无法迭代,意味着不能循环访问其中的对象、WeakSet 没有 .clear() 方法

    const student1 = { name: 'James', age: 26, gender: 'male' };
    const student2 = { name: 'Julia', age: 27, gender: 'female' };
    const student3 = { name: 'Richard', age: 31, gender: 'male' };
    
    const roster = new WeakSet([student1, student2, student3]);
    console.log(roster);
    
    
    print:
    WeakSet {Object {name: 'Julia', age: 27, gender: 'female'}, Object {name: 'Richard', age: 31, gender: 'male'}, Object {name: 'James', age: 26, gender: 'male'}}

     

  18. 如果将对象设为 null,则本质上是删除该对象。当 JavaScript 的垃圾回收器运行时,该对象之前占用的内存将被释放,以便稍后在程序中使用。这种机制的好处在于你不用去担心要删掉对 WeakSet 中已删除对象的引用,JavaScript 会帮你删除!如果对象被删除,当垃圾回收器运行时,该对象也会从 WeakSet 中删除。这样的话,如果你想要一种高效、轻便的解决方法去创建一组对象,就可以使用 WeakSet

  19. 映射 Map

  20. Set 类似于数组,Map 就类似于对象,因为 Map 存储键值对,和对象包含命名属性及值相类似

  21. Map 是一个可以存储键值对的对象,键和值都可以是对象、原始值或二者的结合

  22. 和 Set 不同,你无法使用值列表创建 Map;而是使用 Map 的 .set() 方法添加键值,.set() 方法有两个参数。第一个参数是键,用来引用第二个参数,即值

    const employees = new Map();
    
    employees.set('james.parkes@udacity.com', { 
        firstName: 'James',
        lastName: 'Parkes',
        role: 'Content Developer' 
    });
    employees.set('julia@udacity.com', {
        firstName: 'Julia',
        lastName: 'Van Cleve',
        role: 'Content Developer'
    });
    employees.set('richard@udacity.com', {
        firstName: 'Richard',
        lastName: 'Kalehoff',
        role: 'Content Developer'
    });
    
    console.log(employees);
    
    
    print:
    Map {'james.parkes@udacity.com' => Object {...}, 'julia@udacity.com' => Object {...}, 'richard@udacity.com' => Object {...}}

     

  23. 要移除键值对,只需使用 .delete() 方法

  24. 可以使用 .clear() 方法从 Map 中删除所有键值

  25. 使用 .set() 向 Map 中添加键已存在的键值对,不会收到错误,但是该键值对将覆盖 Map 中的现有键值对。此外,如果尝试使用 .delete() 删除 Map 中不存在的键值,不会收到错误,而 Map 会保持不变

  26. 如果成功地删除了键值对,.delete() 方法会返回 true,失败则返回 false.set() 如果成功执行,则返回 Map 对象本身

  27. 构建 Map 后,可以使用 .has() 方法并向其传入一个键来检查 Map 中是否存在该键值对

  28. 可以通过向 .get() 方法传入一个键,检索 Map 中的值

  29. 在 Map 上使用 .keys() 和 .values() 方法将返回新的迭代器对象,叫做 MapIterator。你可以将该迭代器对象存储在新的变量中,并使用 .next() 循环访问每个键或值。你所使用的方法将决定迭代器是否能够访问 Map 的键或值

  30. WeakMap 和普通 Map 很像,但是具有以下关键区别:WeakMap 只能包含对象作为键、WeakMap 无法迭代,意味着无法循环访问、WeakMap 没有 .clear() 方法

  31. 可以像创建普通 Map 那样创建 WeakMap,但是需要使用 WeakMap 构造函数

    const book1 = { title: 'Pride and Prejudice', author: 'Jane Austen' };
    const book2 = { title: 'The Catcher in the Rye', author: 'J.D. Salinger' };
    const book3 = { title: 'Gulliver's Travels', author: 'Jonathan Swift' };
    
    const library = new WeakMap();
    library.set(book1, true);
    library.set(book2, false);
    library.set(book3, true);
    
    console.log(library);

     

  32. WeakMap 通过专门处理对象作为键来利用这一点。如果将对象设为 null,则本质上是删除该对象。当 JavaScript 的垃圾回收器运行时,该对象之前占用的内存将被释放,以便稍后在程序中使用

  33. JavaScript Promise 是用新的 Promise()函数 - new Promise() 创建而成的

  34. promise 使你能够展开一些可以异步完成的工作,并回到常规工作。它通过向初始函数中传入两个函数来实现这一点,通常我们将这两个函数称为 resolve 和 reject

    new Promise(function (resolve, reject) {
        window.setTimeout(function createSundae(flavor = 'chocolate') {
            const sundae = {};
            // 请求冰淇淋
            // 得到锥形蛋筒
            // 加热冰淇淋
            // 舀一大勺到蛋筒里!
            if ( /* iceCreamConeIsEmpty(flavor) */ ) {
                reject(`Sorry, we're out of that flavor :-(`);
            }
            resolve(sundae);
        }, Math.random() * 2000);
    });

     

  35. resolve 方法用来表示请求已完成,并且成功完成了请求,如果请求无法完成,则使用 reject 方法

  36. Promise 将立即返回一个对象,该对象上具有一个 .then() 方法,我们可以让该方法通知我们 promise 中的请求成功与否。.then() 方法会接收两个函数:请求成功完成时要运行的函数、请求失败时要运行的函数

    const myPromiseObj = new Promise(function (resolve, reject) {
        // 圣代创建代码
    });
    
    
    mySundae.then(function(sundae) {
        console.log(`Time to eat my delicious ${sundae}`);
    }, function(msg) {
        console.log(msg);
        self.goCry(); // 不是一个真正的方法
    });

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值