JavaScript数据类型Symbol小计

ES6中引入的第7种全新的数据类型Symbol,表示独一无二的值。

  • Symbol值是通过Symbol函数生成。也就是说,对象的属性名可以有两种类型

    • 一种是原来的字符串类型String
    • 一种是新增的Symbol数据类型
  • 只要属性名属于Symbol类型,就是独一无二的,可以保证不会与其他的属性名字产生冲突。个人感觉还是非常有用的。

    •   var zwSymbol = Symbol();
        
        // 写法一 :
        var a = {};
        a[zwSymbol] = 'ziwen'
        
        // 写法二 :
        var a = {
        	[zwSymbol]: 'ziwen'
        }
        
        // 写法三 :
        var a = {};
        Object.defineProperty(a, zwSymbol, {value: 'ziwen'})
        
        // 这三种方法都可以得到相同的结果
        a[zwSymbol] // 'ziwen'
      
    
    - **注意:`Symbol`值作为对象属性名时不能使用点运算符。**
    
       ```
       var z = Symbol();
       var obj = {
       	[z]: function(args){
       			console.log(args)
       		}
       }
       或者写成:
       var obj = {
       	[z](args){
       		console.log(args)
       	}
       }
       
       obj[z]('测试') // 测试
       ```
    - 如果 z 不不放在方括号中的话,该属性的键名就是字符串z,而不是z所代表的`Symbol`值
    
    
  • Symbol不能使用new命令,因为Symbol不是对象,是一种原始数据类型。

  • 如果Symbol的参数是一个对象,就会调用该对象的toString方法,将其转换成字符串,然后才生成一个Symbol值。

  • Symbol函数的参数只表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不同的。

    •   var t1 = Symbol('test');
        
        var t2 = Symbol('test');
        
        var t3 = Symbol();
        
        var t4 = Symbol();
        
        t1 === t2 // false
        
        t3 === t4 // false
        
      
  • Symbol作为属性名时,该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()返回。但她不是私有属性,有一个Object.getOwnPropertySymbols()方法可以获取指定对象的所有Symbol属性名。Object.getOwnPropertySymbols()方法返回一个数组,成员是当前对象的所有用作属性名的Symbol值。

  • Symbol.for()与Symbol.keyFor()

    • Symbol.for()接收一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。

    • Symbol.for()Symbol值登记的名字是全局环境的,可以在不同的iframeservice worker中得到同一个值。

    • Symbol.keyFor()方法返回一个已登记的Symbol类型值的key

      var z = Symbol.for("zw");
      Symbol.keyFor(z) // "zw"
      
      var w = Symbol("zw");
      Symbol.keyFor(w); // undefined
      变量 w 属于未登记的Symbol值,所以返回undefined 
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值