JavaScript中Set和WeakSet类型的数据结构.docxVIP

JavaScript中Set和WeakSet类型的数据结构.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScript中Set和WeakSet类型的数据结构

ES6提供了新的数据结构Set,Set对象不是数组,可以用来保存对象或者基本类型,所有保存的值都是唯一的, chrome浏览器38和FF13,以及nodeJS,对Set支持良好,以下的一些代码,都可以拷贝到控制台直接运行哦;创建Set实例的基本方法为:let set = newSet(); //或者 new Set(null);console.log(set);或者这样:let set = newSet([1,2,3,4,4,4,4,4]);console.log( Array.from(set) ); //输出:[ 1, 2, 3, 4 ]可以看到,以上重复的4,在set里面只保存了一个,所以Set对象可以用来给数组去重;Set也能用来保存NaN和undefined,如果有重复的NaN, Set会认为就一个NaN(实际上NaN!=NaN);实例Set以后的对象拥有这些属性和方法:属性StotypeStotype.size方法Stotype.add()Stotype.clear()Stotype.delete()Stotype.entries()Stotype.forEach()Stotype.has()Stotype.values()Stotype[@@iterator]()Set这种类型的数据结构其实我们可以直接用数组模拟出来,虽然不能和原生的比,只能模拟以上列表的一些方法和属性( 还有一些功能无法实现的, Set实例的[Symbol.species]指向自己,但是chrome中没有[Symbol.species]这个玩意儿…. )使用数组模拟一个Set构造器:htmlheadmeta charset=utf-8/headbodyscript use strict;classSet {//对_set进行去重;static refresh () {let _this = this;let __set = []this._set.forEach(function(obj) {if( __set.indexOf(obj) === -1 obj!=undefined) { __set.push(obj); } }); _this._set =__set;this.size = _this._set.length; }constructor(arg) {this.size = 0;this[Symbol.species] = this;this._set = Array.isArray(arg)arg||[];Set.refresh.call(this) } add (obj) {this._set.push(obj);Set.refresh.call(this)returnthis; } clear () {this._set.length = 0;returnthis; }delete (obj) {if( this._set.indexOf(obj)!=-1 ) {this._set[this._set.indexOf(obj)] = undefined; };Set.refresh.call(this);returnthis; }/** * @desc * @return Entries [[],[],[],[]] * */ entries () {let result = [];this.forEach(function(key, value) { result.push([key,value]); });return result; } has () {if( this._set.indexOf(obj)!=-1 ) returntrue; } keys () {returnthis[Symbol.iterator](); } values () {returnthis[Symbol.iterator](); }//直接使用数组的forEach方便啊; forEach (fn, context) {let _this = this;this._set.forEach((value) = fn.call(context||value, value,

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档