js学习笔记05-ES6内置功能
admin
2023-07-27 18:40:06
0

Symbol(标识符)

Symbol 是一种独特的且不可变的数据类型,用来标识对象属性
要创建 Symbol,输入 Symbol(),并添加一个可选的字符串作为其描述

const  obj = Symbol("obj1");
const bowl = {
  [Symbol('banana')]: { color: 'yellow', weight: 183.15 },
  [Symbol('orange')]: { color: 'orange', weight: 170.097 },
  [Symbol('banana')]: { color: 'yellow', weight: 176.845 }
};
console.log(bowl);

可迭代协议

可迭代协议用来定义和自定义对象的迭代行为,灵活地指定循环访问对象中的值的方式.
字符串和数组就是内置的可迭代类型
为了使对象可迭代,它必须实现可迭代接口,接口须包含默认的迭代器方法。该方法将定义对象如何被迭代
迭代器方法(可通过常量 [Symbol.iterator] 获得)是一个无参数的函数,返回的是迭代器对象。迭代器对象是遵守迭代器协议的对象

迭代器协议

迭代器协议用来定义对象生成一系列值的标准方式。实际上就是现在有了定义对象如何迭代的流程。通过执行 .next() 方法来完成这一流程。
当对象执行 .next() 方法时,就变成了迭代器。.next() 方法是无参数函数,返回具有两个属性的对象:
1)value:表示对象内值序列的下个值的数据
2)done:表示迭代器是否已循环访问完值序列的布尔值
如果 done 为 true,则迭代器已到达值序列的末尾处。
如果 done 为 false,则迭代器能够生成值序列中的另一个值。

const digits = [0, 1, 2, 3, 4];
for (const digit of digits) {
  console.log(digit);
}//for of 进行迭代

const digits = [0, 1, 2, 3, 4];  //[Symbol.iterator]() 迭代器方法,返回无参函数
const arrayIterator = digits[Symbol.iterator]();

console.log(arrayIterator.next()); //Object {value: 0, done: false}
console.log(arrayIterator.next()); //Object {value: 1, done: false}

下面是对象属性迭代的例子

const james = {
    name: 'James',
    height: `5'10"`,
    weight: 185,
    [Symbol.iterator](){
        let keysArr = Object.keys(this);
        let index = 0;
        let obj = this;
        return {
            next(){
                return {"value": obj[keysArr[index]], 
                "key": keysArr[index], 
                "done": Boolean(index++ >= keysArr.length-1)} ;
            }
        }
    }
};
const iterator = james[Symbol.iterator]();
console.log(iterator.next().value); // 'James'

Set(集合)

数据不重复的数组,但是不能通过索引访问

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

修改 Set

添加.add() 返回set ,如果添加重复项,不会报错,也不会添加
删除.delete() 返回boolean
删除所有.clear() 没有返回值

使用 Set

.size 属性可以查看Set长度
.has() 方法可以检查 Set 中是否存在某项(entry),返回boolean
.values() 方法可以返回 Set 中的值,返回值是 SetIterator 对象
使用for...of 循环遍历Set.values();

const games = new Set(['Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart', 'Super Mario Bros.']);
for(let str of games.values()){    //for(let str of games) 效果一样
console.log(str);
}

WeakSet(弱集合)

只能包含对象,不能迭代,没有clean()
当集合中的对象为null时,自动回收.效率比set高

Map(映射)

如果说 Set 类似于数组,那么 Map 就类似于对象,因为 Map 存储键值对,和对象包含命名属性及值相类似

修改 Map

.set() 方法添加键值(两个参数)。第一个参数是键,用来引用第二个参数,即值
使用 .delete() 方法移除键值对
使用 .clear() 方法从 Map 中删除所有键值对

处理 Map

使用 .has() 方法并向其传入一个键来检查 Map 中是否存在该键值对
通过向 .get() 方法传入一个键,获取 Map 中的值
使用 for...of 循环遍历Map

WeakMap(弱映射)

WeakMap(弱映射)的行为和 WeakSet 的一样,只是 WeakMap 处理的是键值对,而不是单个条目

相关内容

热门资讯

浙江宣传:“走个面儿”咋就没面... “咱北京两千多万人口,您受累,您走个面儿,把这第一波的票房带起来,咱就有了。”某知名导演的新片首映礼...
辞职声明仅95秒遭质疑,韩国队... 【环球时报综合报道】美加墨世界杯小组赛出局后,韩国队主教练洪明甫当地时间28日在墨西哥的韩国队大本营...
美媒爆料:美军第五舰队总部遭伊... 据美国《华尔街日报》27日报道,其通过对卫星图像、社交媒体视频和五角大楼记录的分析发现,今年2月底至...
英国智库给菲律宾GDP增速“浇... 【环球时报特约记者 叶满】英国经济研究机构凯投宏观发布的最新一期《亚洲经济展望》报告(以下简称“报告...
欧洲持续高温,有华人用冰箱降温... 连日来,欧洲多国迎来罕见极端高温天气,法国、德国、意大利等地气温持续飙升,部分地区突破40摄氏度。受...
伊副外长强调船只须按“伊朗线路... 伊朗外交部副部长加里巴巴迪当地时间29日晚间在接受采访时强调,所有船只均须按照“伊朗线路”通过霍尔木...
委内瑞拉强震已致1719人死亡 当地时间29日,委内瑞拉全国代表大会主席罗德里格斯通报,地震已造成该国1719人死亡,5034人受伤...
铋晟新材料申请氯氧化铋基复合材... 国家知识产权局信息显示,江苏铋晟新材料有限公司申请一项名为“一种氯氧化铋基复合材料及其制备方法和用途...
韩国政府将投资千万亿韩元于AI... 韩国总统李在明29日在总统府青瓦台主持召开会议,公布总额超千万亿韩元的半导体、物理人工智能(AI)和...
以色列防长称以伊可能随时再起冲... △卡茨(资料图)据以色列方面29日消息,以国防部长卡茨当天表示,鉴于复杂的安全局势和在黎巴嫩的军事行...