Symbol 基本使用
ES6 引入了一种新的原始数据类型
Symbol, 表示独一无二的值。它是 JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。Symbol 特点- Symbol 的值是唯一的,用来解决命名冲突问题
- Symbol 值不能与其他数据进行运算
- Symbol 定义的对象属性不能使用 for…in 循环遍历,但是可以使用 Reflect.ownKeys 来获取对象的所有键名
// 创建 Symbol --> 内部实现了唯一性let s = Symbol();// console.log(s, typeof s)let s2 = Symbol('陈朝鸿')let s3 = Symbol('陈朝鸿')console.log(s2)console.log(s3)console.log(s2 == s3) // false// Symbol.for 创建于 Symbol 创建的区别在于 Symbol.for() 不会重复创建具有相同键的值,在创建之前会先搜索是否已有具有指定键的 Symbol 类型值,有则返回这个 Symbol 值,没有则创建一个let s4 = Symbol.for('陈朝鸿')let s5 = Symbol.for('陈朝鸿')console.log(s4)console.log(s5)console.log(s4 === s5) // true// 不能与其他数据进行运算和对比let result = s > 100// USONB// u --> undefined// s --> string symbol// o --> object// n --> null number// b --> boolean
Symbol 内置对象
// 自己去控制类型检测class Person{static [Symbol.hasInstance](param) {console.log(param)console.log('我被用来检测类型了')}}let o = {}// console.log(typeof Person)console.log(o instanceof Person)// 控制合并的数组是否要展开const arr = [1,2,3]const arr2 = [4,5,6]arr2[Symbol.isConcatSpreadable] = falseconsole.log(arr.concat(arr2))
