介绍
本文是在学习ES6时做的一些学习笔记,所有的笔记请查看:ES6 学习笔记
Symbol
Symbol 是一种基本数据类型 (primitive data type)。
每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。
Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:“new
Symbol()”。
Symbol()定义的属性是不能遍历的,可以用来构造私有属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Symbol</title>
</head>
<body>
<script>
// 如下所示,当对象中有两个相同的属性名时,属性会被合并
const classRoom ={
'Lily': { grade: 60,gender: 'female'},
'Nina': { grade: 80,gender: 'female'}
'Nina': { grade: 90,gender: 'female'}
}
// 如下,使用Symbol()标志,此时'Nina' 就不会被合并
const classRoom ={
[Symbol('Lily')]: { grade: 60,gender: 'female'},
[Symbol('Nina')]: { grade: 80,gender: 'female'}
[Symbol('Nina')]: { grade: 90,gender: 'female'}
}
// 当对象属性是Symbol时,是不能进行遍历的
// 如下,就不能进行遍历
for(let key in classRoom){
console.log(key)
}
// 使用如下方法遍历对象的属性
const syms= Object.getOwnPropertySymbols(classRoom);
// 输出各个属性名,Symbol('Lily')、Symbol('Nina')、Symbol('Nina')
console.log(syms)
syms.map(sym=>classRoom[sym]) // 获取属性值
</script>
</body>
</html>