es6 set 数据的初步认识

// set 是一种新的数据类型;类似数组,成员的值时唯一的
var set = new Set(); // 使用方法 生成一个空的set数据类型的容器
console.log(set)
// 类型
console.log(typeof(set)) // object
console.log(set instanceof Set) // true
console.log(set instanceof Object) //true

    var set1 = new Set('hell world')
    console.log(set1)
        // 添加数据
        /*var set1 = new Set('222') //1 is not iterable   不可以直接添加number */

    var set1 = new Set('hell world') //{"h", "e", "l", " ", "w", …} 可以添加字符串

    var aLi = document.getElementsByTagName('li');
    var set2 = new Set(aLi)
    console.log(set2) //{li, li, li, li} 可以添加类数组对象 包括arguments

    var set3 = new Set([1, 2, 3])
    console.log(set3) //{1, 2, 3}

    var set4 = new Set([1, [1, 3]])
    console.log(set4) //{ 1,[1,3]}

    /* var set5 = new Set({
         name: '12'
     })
     console.log(set5) // //1 is not iterable   不可以直接添加obj */

    //使用.add方法添加数据
    var set66 = new Set()
    set66.add(1)
    console.log(set66) //{1}

    set66.add({})
    set66.add({}) //
    console.log(set66) //{1, {…}, {…}} 任意2个对象的地址值都不相同 所以set内可以有2个地址不同的对象
    set66.add(NaN)
    set66.add(NaN)
    console.log(set66) //{1, {…}, {…}, NaN} NaN在set中是相同的

    set66.add(+0)
    set66.add(-0)
    console.log(set66) //{1, {…}, {…}, NaN, 0} +0,-0在set中是相同的

    // 利用set实现数组去重
    Array.prototype.heavy = function() {
        var set = new Set(this)
        return [...set]

    }
    var aa = [1, 2, 3, 3, 3, 3]
    console.log(aa.heavy()) //[1,2,3]

    // set实例对象的属性和方法
    console.log(Set.prototype) //set数据也有原型;
    console.log(Set.prototype.constructor) //set的构造函数就是Set函数

    // set 函数的方法
    //.size 获取set成员的个数
    var set12 = new Set([1, 2, 3])
    console.log(set12.size) //3 

    // 删除数据 .delete(成员)
    console.log(set12.delete(1)) //删除成功返回boolea true 不成功返回false
    console.log(set12)  //{2, 3}  
        // .has() 查找是否存在成员
    console.log(set12.has(1)) // false  不存在返回false 存在返回ture
        // .clear() 清除set所用成员
    console.log(set12.clear()) // 返回值undefined
    console.log(set12) //{} 清除了set12 身上所有成员

    // set数据 转数组
    Set.prototype.toArray = function() {
        return [...this]
    }
    var set13 = new Set([1, 2, 3, 4])

    console.log(set13.toArray() instanceof Array) //ture 

    var set14 = Array.from(set13)
    console.log(set14 instanceof Array) //ture


    //Set 数据的遍历方法 keys() values() entries() forEach

    var sets = new Set(['apple', 'blue', 'pink'])
    console.log(sets.keys()) //SetIterator {"apple", "blue", "pink"}

    console.log(sets.keys() instanceof Array) //false
    console.log(sets.keys() instanceof Set) //false
    console.log(sets.keys() instanceof Object) //ture
        // sets.keys()的返回值是一个对象 具有length 可以直接用 for。。。 of 遍历
    for (var attr of sets.keys()) {
        console.log(attr) //apple blue pink

    }
    //也可以用forEach 遍历  forEach(function(key,value,原函数)) 系统自动传3个参数
    sets.forEach(function(key, value, obj) {
        console.log(key) //apple blue pink 
        console.log(value) //apple blue pink
        console.log(obj) //原数据 sets
    })

    //keys() 方法 返回键名
    //values()方法 返回键值
    //entries()方法 返回键值对 键名+键值
    //由于Set数据没有键名只有键值  所以 keys() values() entries() 获得的返回值一样
    // 任选其中一个进行遍历就可以了
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值