<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值
var a = Symbol('me');
var b = Symbol('me');
//Symbol 数据类型的特点是唯一性,即使是用同一个变量生成的值也不相等。
console.log(a === b); //false
//Symbol 数据类型的另一特点是隐藏性,for···in,object.keys() 不能访问
var obj = {
[a]: 'symbol'
}
for(var option in obj){
console.log(obj[option]); //空
}
//但是也有能够访问的方法:Object.getOwnPropertySymbols
//Object.getOwnPropertySymbols 方法会返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。
var arr = Object.getOwnPropertySymbols(obj);
console.log(arr);//Symbol(me)
console.log(obj[arr[0]]); //symbol
//虽然这样保证了Symbol的唯一性,但我们不排除希望能够多次使用同一个symbol值的情况。
//为此,官方提供了全局注册并登记的方法:Symbol.for()
var name1 = Symbol.for('name');//检测到未创建后新建
var name2 = Symbol.for('name');//检测到已创建后返回
console.log(name1===name2); //true
//最后,在创建symbol类型数据 时的参数只是作为标识使用,所以 Symbol() 也是可以的。
console.log(Symbol('ss'));//Symbol(ss)
console.log(typeof a);//symbol
</script>
</body>
</html>
es6新增数据类Symbol讲解
最新推荐文章于 2023-12-19 09:30:00 发布