JavaScript symbol数据类型

引言

ES5是javascript的数据类型有6种:数值,字符串,布尔,对象,null,undefined。
Symbol数据类型是在ES6中新增的。

const sym = Symbol()
const sym2 = Symbol("abc")
console.log(typeof sym);//symbol
console.log(sym2)//Symbol(abc)

Symbol 的作用:可以当做对象的属性名

const level = Symbol("level")
const student = {
    
    
	name:"小铭",
	age:12,
	[level]:"优秀"
}
console.log(student);

//遍历student 对象的所有属性
for(let pro in student){
    
    
   console.log(pro)
}

在这里插入图片描述
从以上代码可以看出,Symbol属性不能通过 for… in 获取。

Symbol的获取和使用

console.log(student[level]);//优秀

其次Symbol是不会重复的,还是拿上面的代码举例。设置两个Symbol变量来描述一个学生,第一个Symbol变量代表学习程度,第二个Symbol变量代表家庭财富状况。

	const level1 = Symbol("level");
	const level2 = Symbol("level");
	console.log(level1 === level2);
	const student = {
    
    
		name:"小明",
		age:12,
		[level1]:"优秀",
		[level2]:"有钱",
	}
	console.log(student);

在这里插入图片描述
可见,只要定义了一个symbol属性,即使定义了两个相同的描述,这两个symbol类型也是不同的。因此,上面的代码可以简化。

	const student = {
    
    
		name:"小明",
		age:12,
		[Symbol("level")]:"优秀",
		[Symbol("level"):"有钱",
	}
	console.log(student);

之前我们是通过变量的方式拿到Symbol属性的值,那现在经过简写如何在获取Symbol属性的值呢?
首先,可以通过Objetc.getOwnPropertySymbols()获取到某一个对象的所有symbol属性,之后通过for…of 遍历便可逐一取到Symbol属性的值。
代码如下:

const student = {
    
    
	name:"小明",
	age:12,
	[Symbol("level")]:"优秀",
	[Symbol("level")]:"有钱",
}

let symList = Object.getOwnPropertySymbols(student);
for(let pro of symList){
    
    
	console.log(student[pro])
}

在这里插入图片描述

Symbol的作用(面试爱问)

那Symbol这种数据类型的作用是什么呢?
Symbol.iterator 是一个Symbol数据类型的一个内置的值,如果对象有Symbol.iterator 这个属性的话,这个对象就可以被 for… of 遍历。(面试爱问)
看个例子更容易理解。

	const student = {
    
    
		name:"小明",
		age:12,
		[Symbol("level")]:"优秀",
		[Symbol("level")]:"有钱",
	}
	const list = [1,2,3,4,5,6];
	//之前我们提到Symbol的作用之一是做属性名用的,因此我们探究一下,
	//是否student对象有没有这个属性
	console.log(student[Symbol.iterator]);//undfined
	console.log(list[Symbol.iterator)];

在这里插入图片描述
由上面的代码可以得出如下结论:student 对象没有Symbol.iterator 属性,因此student对象 不能通过 for… of 遍历。list 对象具有Symbol.iterator 属性,因此可以通过 for… of 遍历。

以下代码来验证:
首先用 for… of 来遍历 student 对象

		const student = {
    
    
		name:"小明",
		age:12,
		[Symbol("level")]:"优秀",
		[Symbol("level")]:"有钱",
	}
    
    for (let item of student){
    
    
        console.log(item)
    }

在这里插入图片描述
之后通过 for… of 遍历 list

	const list = [1,2,3,4,5,6];
    
    for (let item of list){
    
    
        console.log(item)
    }

在这里插入图片描述

以上就是我对JavaScript中Symbol 数据类型的学习。来源于哔哩哔哩Up主:晓舟报告。
如果对您能有一点点帮助的话,点个赞鼓励一下吧。

猜你喜欢

转载自blog.csdn.net/qq_43316970/article/details/124135736
今日推荐