set、map&symbol

7、set数据集合:类似于数组

/*set:是一个集合,类似于数组,与数组的主要区别是没有重复的元素。主要的作用可以进行去重。
 * 重点:一个属性,四个方法
 1、size属性:返回set数组的长度,类似于lenght
 2、四个方法:add,delete,clear,has*/

    let set =new Set([1,2,3,4,1]);
    console.log(set.size); //4
    //添加元素
    set.add(7);  
    console.log(set); // {1, 2, 3, 4, 7}
    //删除数组中的某个元素
    set.delete(3);
    console.log(set); // {1, 2, 4, 7}
    //检测数组中是否含有某个元素,返回值为布尔
    console.log(set.has(2)); //true
    //清空数组
    set.clear();
    console.log(set) //{}

8、map数据集合:类似于对象

    let obj={a:1};
    const map = new Map([
        ['name','java'],
        ['feel','今天天气贼好'],
        ['jieguo','适合看帅哥'],
        [obj,'是!']
    ]);
    //{"name" => "java", "feel" => "今天天气贼好", "jieguo" => "适合看帅哥", {…} => "是!"}
    console.log(map);  

    /*Map与Object的区别
     1、Map的size属性可以直接获取键值对个数
     2、两者都是对应的keys-value键值对,
        但是Object的keys只能是字符串或者 Symbols,
        Map的key可以是任意值,比如数组、对象等*/


    /*map方法:
         1、size:返回键值对长度
         2、set:设置键值对
         3、get:获取对应的value值
         4、delete:删除对应的键值对
         5、clear:清空map
         6、has:查看是否有对应的键值对,返回值为布尔*/

    对应代码:
            console.log(map.size);   //4    
            map.set('shia','怎么了');   //设置键值对
            console.log(map.get('shia')); //返回对应的value值
            console.log(map.delete('shia'));
            console.log(map.has('shia'));
            console.log(map.has(obj));
            map.clear()
            console.log(map);

9、Symbol()方法

    1、Symbol()相当于第七种数据类型,ES6中为了防止冲突,引入了Symbol()。
      凡是用Symbol()引用的属性名都是独一无二的
    总结:独一无二,防止冲突

        let s1 = Symbol();
        let s2 = Symbol();
        console.log(s1); //Symbol()
        console.log(s2); //Symbol()
        console.log(s1===s2);  //false,验证独一无二

        let s3 = Symbol('name');
        let s4 = Symbol('name');
        console.log(s1===s2);  //false,验证独一无二
        //数据类型
        console.log(typeof s)  //symbol


    2、可以用来添加对象的属性值,但是是唯一的,验证独一无二*/

        //一般的对象添加的属性名对应的属性值只能是一个,重复添加会覆盖
        let obj1={};
        obj1.name='ni';
        obj1.name='wo';
        console.log(obj1);  //{name: "wo"}

        //利用Symbol()添加的会全部显示出来,因为每一个name属性都是独一无二的,解决了命名冲突的问题
        let obj2={};
        obj2[Symbol('name')]='ni';
        obj2[Symbol('name')]='wo';
        console.log(obj2);   //{Symbol(name): "ni", Symbol(name): "wo"}


    3、不能使用new关键字,否则会报错。
        这是因为Symbol()是一个原始类型的值,
        不是对象不能添加任何属性

        let snew = new Symbol();
        console.log(snew);  //报错

    4、Symbol()可以将字符串作为参数,
         * 表示对实例对象的描述,主要作用可以针对不同变量进行区分 
         * 注意:由于其参数的值是对其的描述,所以可能每次返回的值是不同的

        let a = Symbol('a');
        console.log(a.toString()); //Symbol(a)
        let b = Symbol('B');
        console.log(b);  //Symbol(B) 
        console.log(a===b); //false

    5、Symbol()不能与其他类型的值进行运算,但是可以返回一个Boolean值

        let c = Symbol();
        console.log(s+'nihao'); //Cannot convert a Symbol value to a string
        console.log(s+'2');  //Cannot convert a Symbol value to a string
        console.log(Boolean(c));  //true

    6、不能被for in循环遍历

        var obj3 = {};
        var str1 = Symbol('str1');
        var str2 = Symbol('str1');

        obj3[a] = '我是刘昊然的女朋友';
        obj3[b] = '我承认了';
        obj3.c  = '妈的,瞒不住了';
        obj3.d  = '我爱刘昊然';
        for( let key in obj3 ){
           console.log(key)         // c d
        }

    7、可以通过Object.getOwnPropertySymbols()方法,获取Symbol()属性名

         console.log(Object.getOwnPropertySymbols(obj3));  //[Symbol(a), Symbol(B)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值