JS的symbol数据类型

JS的symbol数据类型

1.什么是symbol

Symbol是ES6中新增的一种数据类型, 被划分到了基本数据类型中

2.Symbol的作用

用来表示一个独一无二的值

let xxx=Symbol(‘标识字符串’);

3.为什么需要Symbol?

为了避免第三方框架的同名属性被覆盖

在企业开发中如果需要对一些第三方的插件、框架进行自定义的时候
可能会因为添加了同名的属性或者方法, 将框架中原有的属性或者方法覆盖掉
为了避免这种情况的发生, 框架的作者或者我们就可以使用Symbol作为属性或者方法的名称

4.如何区分Symbol?

在通过Symbol生成独一无二的值时可以设置一个标记
这个标记仅仅用于区分, 没有其它任何含义

//后面的括号可以给symbol做上标记便于识别
let name=Symbol('name'); 
let obj = {
    name: 'jack',
    age: 18,
    [name]: 'symbolname'
}
console.log(obj.name) //jack
console.log(obj[name]) //symbolname
console.log(obj)
{
	age: 18,
	name:'jack',
	Symbol(name):'symbolname'
}

5.注意点

Symbol是基本数据类型!!!!不要加new哦

后面括号可以传入一个字符串,只是一个标记,方便我们阅读,没有任何意义

类型转化的时候不可转化为数值

不能做任何运算,但是可以调用toString方法、可以隐式转换

let name=Symbol('name');
console.log(name+111)
console.log(name+'ccc')
//全部报错

for-in循环遍历对象的时候是无法遍历出symbol的属性和方法的

let name=Symbol('name');
let obj={
  [name]:'lnj',
    age:12,
    teacher:'wyx'
}
for(let key in obj){
    console.log(key)   //只能打印出age和teacher
}
//这个方法可以单独取出Symbol(name) 返回一个数组
console.log(Object.getOwnPropertySymbols(obj))

静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。
Reflect.ownKeys(obj)//返回由obj的普通属性、symbol属性键组成的数组

还可以作为常量使用 使用symbol

//作为常量
const VIDEO = Symbol()
const AUDIO = Symbol()
const IMAGE = Symbol()
function play(type){
	switch(type){
		case VIDEO:
			console.log('VIDEO')
			break;
		case AUDIO:
			console.log('AUDIO')
			break;
		case IMAGE:
			console.log('IMAGE')
			break;
	}
}
play(VIDEO)//播放视频

不使用symbol

//作为常量
const VIDEO = 1
const AUDIO = 2
const IMAGE = 2
function play(type){
	switch(type){
		case 1:
			console.log('VIDEO')
			break;
		case 2:
			console.log('AUDIO')
			break;
		case 3:
			console.log('IMAGE')
			break;
	}
}
play(VIDEO) 或者play(1) //都可以播放视频,为了规范代码可以使用上述方法

Symbol.for(key) 方法会根据给定的键 key,来从运行时的 symbol 注册表中找到对应的 symbol,如果找到了,则返回它,否则,新建一个与该键关联的 symbol,并放入全局 symbol 注册表中。

let name1 = Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中,键为 "foo"
let name2 = Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbol
console.log(name1 === name2)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值