一、简介
ES6 引入了一种新的原始数据类型Symbol
,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined
、null
、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
Symbol 值通过Symbol
函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
二、特点
- Symbol类型的变量是独一无二的;
- Symbol()函数中可以添加参数,而参数的作用就是利于区分,相当于给变量加上了描述,输出的时候能区分到底是哪一个值;
- 即便Symbol()函数的参数相同,但它们是不相等的
//即使参数相同,但它们也是不相等的
let s3=Symbol('foo');
let s4=Symbol('foo');
console.log(s3 === s4); //false
- Symbol()不能使用new 操作,会报错;
- Symbol值不能与其他类型的值进行运算,会报错
//不能与其他类型的值进行运算
let sym=Symbol('My Symbol');
console.log(`your symbol is ${sym}`);
- 但是Symbol值可以显示转为字符串:
let sym=Symbol('My Symbol');
// console.log(`your symbol is ${sym}`);
console.log(String(sym)); // "Symbol(My Symbol)"
console.log(sym.toString()); // "Symbol(My Symbol)"
- Symbol值也可以转换为布尔值,但是不能转换为数值
//symbol值可以转换为布尔值,但是不能转换为数值
let sym2= Symbol();
console.log(Boolean(sym2));//true
console.log(!sym2); //false