引言
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主:晓舟报告。
如果对您能有一点点帮助的话,点个赞鼓励一下吧。