Javascript(笔记35) - ES6特性 - Symbol数据类型
Symbol
ES6引入了一种新的原始数据类型 Symbol ,表示独一无二的值。它是 Javascript 语言的第七种数据类型:
特点:
Symbol 的值是唯一的,用来解决命名冲突的问题;
Symbol 值不能与其他数据进行运算;
Symbol 定义的对象属性不能使用 for ... in 循环遍历,但可以使用 Reflect.ownKeys 来获取对象的所有键名;
创建Symbol
let s1 = Symbol();
let s2 = Symbol();
console.log(s1,s2,typeof(s1)); // Symbol() Symbol() 'symbol'
console.log(s1 === s2); // false
console.log(s1 == s2); // false
Symbol 的唯一性是内部实现的,表面上看都是 Symbol() ,长的一样,但不相等;
也可以带参数:仅做为说明;
let s1 = Symbol("Jack"); // 简单说明这个 Symbol 是干嘛的;
let s2 = Symbol("Jack");
console.log(s1 === s2); // false
即使有参数说明,也是不相等的,就像都是叫“小明”的人,是两个人;
通过 Symbol.for() 对象方式创建的,就可以相等了;
let s1 = Symbol.for("Jack");
let s2 = Symbol.for("Jack");
console.log(s1,s2,typeof(s1)); // Symbol(Jack) Symbol(Jack) 'symbol'
console.log(s1 === s2); // true
这么些数据类型怎么记呢: USONB: you are so niubility.
U:undefined
S:string、symbol
O:object
N:number、null
B:boolean
特性1:不能运算
let s = Symbol();
let res = s + 100;
let res = s > 100; // 报错:Cannot convert a Symbol value to a number
let res = s + "100"; // 报错:Cannot convert a Symbol value to a string
向对象中添加方法和属性: