基本概念
Symbol,表示独一无二的值。它是 JS 中的第七种数据类型。
基本的数据类型: Null Undefined Number Boolean String Symbol
引用数据类型:Object
1.Symbol数据的声明:
let s1 = Symbol();
let s2 = Symbol();
console.log(typeof s1); // 'symbol'
console.log(s1 === s2); //false
Symbol 函数前不能使用 new 否则会报错,原因在于 Symbol 是一个原始类型的值,不是对象。
let s3 = Symbol('yy');
let s4 = Symbol('ll');
console.log(s3, s4); //Symbol(yy) Symbol(ll)
console.log(Symbol('momo') === Symbol('momo'));//false
Symbol 函数接收一个字符串作为参数,表示对Symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分
2.Symbol 数据类型的转换
console.log(String(Symbol('yy'))); // Symbol(yy)
console.log(Symbol('ll').toString()); // Symbol(ll)
console.log(!!Symbol()); // true
console.log(Number(Symbol())); //报错
console.log(Symbol('momo') + 'fff'); // 报错
console.log(Symbol('momo') * 100); //报错
Symbol数据类型不能做任何运算。转为布尔值的时候是true,可以转化为String类型。不能转换为Number。
3.作为对象的属性名
写法一:
let yyy = Symbol('yyy');
const obj = {};
obj[yyy] = 'hello';
console.log(obj); // {Symbol(yyy): "hello"}
console.log(obj[yyy]); //hello
写法二:
let ss = Symbol('ss');
const data = {
[ss]: 'world'
};
console.log(data);// {Symbol(ss): "world"}
console.log(data[ss]);//world
上面两种方法都可以通过key来获取到值。
const data = {
[Symbol()]: 123,
a: 1,
b: 2
};
console.log(data); //{a: 1, b: 2, Symbol(): 123}
console.log(data['Symbol()']); //undefind 无法获取
这样声明后我们怎么来获取到值呢?
我们可以通过Object.getOwnPropertySymbols方法获得一个对象的所有的Symbol属性。
console.log(Object.getOwnPropertySymbols(data)); // [Symbol()]
该方法返回的是一个数组,我们用数组的取值方法就可以拿到值
console.log(data[Object.getOwnPropertySymbols(data)[0]]); //123
值得注意的是:Symbol数据作为key时是不能被for。。in循环的。
for(let i in data){
console.log(i);
}
// a
//b
以上都是个人理解如有不对之处还望指正交流!
网友评论