了解ES6中的Symbol

ES6中的Symbol

ES5 的对象属性名都是字符串,容易造成重名,污染环境,为防止属性名的冲突。ES6 引入Symbol。

  • 概念:ES6中添加了一种原始数据类型symbol。(在ES6之前已有的原始数据类型:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object))

  • 特点:

    1. Symbol属性值对应的值是唯一的,解决命名冲突问题
    2. Symbol值不能与其他数据进行计算,包括同字符串拼串
    3. for in,for of 遍历时不会遍历symbol属性
  • 使用

  1. 调用Symbol函数得到symbol值

    
    //调用Symbol函数
    let symbol=Symbol();
    
    //ES6中添加了一种原始数据类型symbol
    console.log(typeof symbol);  //symbol  数据类型为
    console.log(symbol)			 //Symbol()
    
    let obj={name:'lily','age':18};
    obj[symbol]="abc";
    console.log(obj);     		 //{name: "lily", age: 18, Symbol(11): "abc"}
    
    
  2. 传参标识(给Symbol传入参数,就能够分清到底是哪一个值,等于是为它们加上了描述)

    	let symbol1=Symbol();  
    	let symbol2=Symbol();  
    	
    	//输出都为Symbol(),不利于区分。
    	console.log(symbol1);				//Symbol();
    	console.log(symbol2);				//Symbol();
    	console.log(symbol1==symbol2);	    //false;
    	
    	//可以给Symbol传入参数,就能够分清到底是哪一个值,等于是为它们加上了描述
    	let sym1=Symbol("one");  
    	let sym2=Symbol("two");
    	
    	//注意,Symbol函数的参数只是表示对当前 Symbol 值的描述
    	console.log(sym1);					//Symbol("one")
    	console.log(sym2);					//Symbol("two")
    	console.log(sym1==sym2);  			//false
    	
    	
    	//注意,Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
    	
    	let s1=Symbol("a");
    	let s2=Symbol("a");
    	console.log(s1===s2);			   //false
    	//symbol提供了一个实例属性description,可以直接返回Symbol的描述
    	console.log(s1.description);  	   //a
    

    symbol提供了一个实例属性description

    	console.log(s1.description);  	   //a
    
  3. 内置Symbol值
    除了定义自已使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法Symbol.iterator
    对象的Symbol.iterator属性,指向该对象的默认遍历器方法

  • 其他
  1. Symbol值可以转换为字符串,不能同字符串拼串

    
    	let sym=Symbol("test");
    	console.log(sym.toString());  	   //Symbol(test)
    	console.log(typeof sym);      	   //Symbol
    	console.log(typeof sym.toString());//string
    	
    	//Symbol值不能与其他数据进行计算,包括同字符串拼串
    	
    	//Uncaught TypeError:  Cannot convert a Symbol value to a string (报错无法将符号值转换为字符串)
    	console.log("this is"+sym);
    	console.log(`this is ${sym}`);
    	
    
  2. Symbol值可以转换为布尔值,不能转换为数字

    
    	console.log(Boolean(sym));  //true
    	//报错不能转换为数字 
    	console.log(Number.parseInt(sym));
    
    	//for in,for of 遍历时不会遍历symbol属性
    	for (let i in obj) {
    		console.log(i);
    		
    		/* 
    		* 输出内容 
    		* name
    		* age
    		*/
    		
    	}
    	
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值