<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var arr = [1, 1, 2, 2, 3, 3, 3]
        // console.log(arr)

        let set = new Set(arr)
        // console.log(set)
        set[3] = 2
        // console.log(set)
        // set 作为数据结构,里面的成员都是唯一的

        let strarr = new Set(["s", "l", "S", "L"])
        // console.log(strarr)  //[s,l,S,L] 
        strarr.delete("s")
        // console.log(strarr, "new")
        // console.log(strarr.has("L"))

        for (let i of strarr.keys()) {
            // console.log(i)
        }   //for in 会失败

        for (let i of strarr.values()) {
            // console.log(i)
        }
        //set实例的键和值都是一样的 所以用keys()/values()的时候  遍历得到的结果是一样的
        //    entries() 返回键+值

        for (let i of strarr.entries()) {
            // console.log(i)
        }

        //Array [ "l", "l" ]
        // Array["S", "S"]
        // Array["L", "L"]



        // 向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。相同字母的大小写也是不同的值

        //set  属性
        // set.prototype.constructor 构造函数  
        //  set.prototype.size 返回set实例的值的个数


        // set 方法
        // set.prototype.add(要添加的值)  向set实例中添加一个元素
        // set.prototype.delete(删除的值)  删除set实例中的一个元素
        // set.prototype.clear()   清空
        // set.prototype.has(要判断的值)  判断是否在set实例中 返回的是布尔值



        // Array.from(set的实例)  将set实例转成数组


        // 数组去重
        // function dedupe(array) {
        //     return Array.from(new Set(array));
        // }

        // dedupe([1, 1, 2, 3]) // [1, 2, 3]




        // map
        const map = new Map([
            ['name', '张三'],
            ['title', 'Author']
        ]);
        console.log(map)

        const m = new Map();
        const o = { p: 'Hello World' };
        m.set(o,'content')   // m.set(key,value)   map实例中能用对象来当键

        //json 方法:
        //  json.stringfy()  对象转成json
        //  json.parse() json转对象
        
        console.log(m.get(o))
    </script>
</head>

<body>

</body>

</html>