这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
Symbol
ES2015的标准增加了:Symbol即一种数据类型,这篇文章我们就来了解一下什么是Symbol。
symbol 是一种基本数据类型 (私有数据类型)。Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。
如何使用
判断
每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。为了更好的理解这句话,让我们看看下面的例子:
const sym = Symbol(12)
console.log(typeof sym, sym == 12, sym === 12); // symbol false false
console.log(Symbol('也笑')==Symbol('也笑')); // false
因为返回值是唯一的,所有哪怕是定义的参数相同,返回结果看着相同,但是返回结果也是不相同的。
for...in
Symbols 在 for...in 迭代中不可枚举,也就是说遍历的时候不能遍历到,如下:
var obj = {};
obj[Symbol("a")] = "a";
obj["c"] = "c";
for (var i in obj) {
console.log(i); // c
}
上述obj虽然有两个属性,Symbol类型的属性是不能枚举的,所以只会输出:c。
JSON.stringify()
当使用 JSON.stringify() 时,以 symbol 值作为键的属性会被完全忽略,使用如下:
JSON.stringify({[Symbol("foo")]: "foo"}); // {}
返回结果会把含有Symbol类型的属性忽略掉。
注意事项
我们需要注意的是:每个从Symbol()返回的symbol值都是唯一的,Symbol类型的数据作为键的属性的时候, for...in 与 JSON.stringify() 都会把这些属性忽略掉。
总结
因为Symbol的值是唯一的,所以我们在项目中可以定义一个私有的变量或者说不可更改的常量,以方便我们在项目中特定的使用。比如我们可以定义一些协商好的固定请求参数、标题名等
如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。