JS ES6 Symbol详解

什么是 Symbol ?

Symbol,表示独一无二的值,是 js 中第七种数据类型

基本数据类型

Null Undefined Number Boolean String Symbol

引用数据类型

Object

let s1 = Symbol();
let s2 = Symbol();
console.log(typeof s1); // symbol
console.log(s1 === s2); // false

注意:Symbol 函数前不能使用 new 否则会报错,原因在于 Symbol 是一个原始类型的值,不是对象。

let s3 = new Symbol(); // Symbol is not a constructor

Symbol 函数接收一个字符串作为参数,表示对 Symbol 的描述,主要是为了在控制台显示,或者转为字符串的时候便于区分。

let s3 = Symbol('hello');
let s4 = Symbol('world');
console.log(s3, s4); // hello world
console.log(Symbol('hello') === Symbol('hello')); // false 
                                              // 'hello'仅仅是对 Symbol 的一个描述没有具体意义

Symbol 数据类型转换

console.log(String(Symbol('hello'))); // Symbol(hello)
console.log(Symbol('hello').toString()); // Symbol(hello)
console.log(!!Symbol()); // true
console.log(Number(Symbol())); // Cannot convert a Symbol value to a number 不能转为数字
console.log(Symbol('hello') + 'world'); // Cannot convert a Symbol value to String 不能拼接字符串
console.log(Symbol('hello') * 100); // 不能做任何运算

作为对象属性名

let aaa = Symbol('aaa');
const obj = {
    
    };
obj[aaa] = 'hello';
console.log(obj); 
console.log(obj[aaa]); // hello

let bbb = Symbol('bbb');
const data = {
    
    
	[bbb]:'hello'
};
consloe.log(data); 
console.log(data[bbb]); // hello

不能被 for in 循环遍历,但是也不是私有属性,可以通过 Object.getOwnPropertySymbol 方法获得一个对象的所有的 Symbol 属性

const data = {
    
    
	[Symbol()]: 123,
	a:1,
	b:2
};

for (let i in data){
    
    
	console.log(i);
}
console.log(Object.getOwnPropertySymbol(data)); // [Symbol()]
console.log(data[Object.getOwnPropertySymbol(data)[0]]); // 123

猜你喜欢

转载自blog.csdn.net/weixin_43176019/article/details/109175917