JavaScript 数据类型之唯一值Symbol

一、什么是Symbol

  ES6中,为了解决对象中属性名冲突的问题,出现了新的基本数据类型—Symbol。它用于创建唯一且不可变的标识符,通常用作对象属性的名称。下文将对Symbol类型进行基础的讲解。

二、Symbol的特点

1.Symbol是基本数据类型

	var sy1=Symbol();		//这是声明symbol变量的方式。括号内参数为key值
	console.log(sy1);
	console.log(typeof sy1);

在这里插入图片描述
  可以看到,Symbol类型的变量sy1的数据类型是symbol,它虽然通过方法声明,但的确是基本数据类型中的一种。引用类型的typeof返回值一般为object。(函数除外,为function)

2.Symbol所声明的变量是独一无二的

 在其他基本数据类型中,属性值相同时,可以判断两个变量是相等的,但是Symbol数据类型并非如此。这是因为Symbol所声明的变量是独一无二的。

	var a=10;
	var b=10;
	console.log(a==b);
	var sy1=Symbol('a');
	var sy2=Symbol('a');
	console.log(sy1==sy2);

在这里插入图片描述

三、对象中的Symbol

 开头提到。Symbol的初衷是为了解决对象中属性名冲突的问题,下面举例来说声是如何实现的。

	let obj={
		a:1,
		b:2,
		c:3,
		a:2
	}
	console.log(obj);	//{a: 2, b: 2, c: 3}

  一般情况下,对象中属性名冲突时,会发生覆盖。那么属性名为唯一值时,可避免这个问题。需要先在对象外部定义唯一值变量,否则会报错未定义。

	var a=Symbol();
	let obj={
		a:1,
		b:2,
		c:3,
		[a]:2
	}
	console.log(obj);	//{a: 1, b: 2, c: 3, Symbol(): 2}

四、Symbol类型常用的方法

1.Object.getOwnPropertySymbols()

 常用的for in,Object.keys等方法是无法遍历到对象中唯一值属性的。Object.getOwnPropertySymbols()方法用来获取对象中唯一值属性,但仅能获取唯一值属性,其他的属性也是获取不到的。

	 var a = Symbol('a')
    var b = Symbol('b')
    let obj = {
        a: 1,
        b: 2,
        c: 3,
        [a]: 2,
        [b]: 3
    }
    for (x in obj) {
        console.log(`${x}:${obj[x]}`)
    }
    console.log(Object.keys(obj));
    console.log(Object.getOwnPropertySymbols(obj))

在这里插入图片描述

2.Reflect.ownKeys()

 Reflect.ownKeys()是很重要的一个方法,它可以获取对象中的所有属性。

 	var a = Symbol('a')
    var b = Symbol('b')
    let obj = {
        a: 1,
        b: 2,
        c: 3,
        [a]: 2,
        [b]: 3
    }
    console.log(Reflect.ownKeys(obj));

在这里插入图片描述

3.Symbol.for()

 根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值。

	console.log(a1);			//undefined
    var a1 = Symbol.for('a');
    console.log(a1);		//Symbol(a)

在这里插入图片描述

4.Symbol.Keyfor()

  返回一个以被登记在全局环境中的symbol.for()值的key,没有就返回undefined。

 	let a_1 = Symbol.for('b');
    let a = Symbol('a');
    console.log(Symbol.keyFor(a_1));	//b
    console.log(Symbol.keyFor(a));	//undefined

在这里插入图片描述

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值