ES6入门之Symbol数据类型

基本概念

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

以上都是个人理解如有不对之处还望指正交流!

你可能感兴趣的:(ES6入门之Symbol数据类型)