理解Symbol类型

82 阅读1分钟
  1. 首先举个例子当我们让别人拿一个东西,你会说把电脑拿过来
  2. 然后如果那里有10种电脑,他就不知道拿哪个了
  3. 这时你就会加修饰词,把15.6寸开机的苹果电脑拿过来

下面来说symbol,symbol不是js中的构造函数,所以建立时不用像array去new

let ab = Symbol();
let edu = Symbol();
conslose.log(hd == edu) //永远为false
let ab = Symbol();
let edu = Symbol();
conslose.log(ad == edu) //永远为false

// 这时没有用的 ad.name = undegind , ad = false
ad.name = '张三' 

symbol的()内可以添加描述,就像开始举例子对电脑的描述

let ab = Symbol('symbol');

conslose.log(ab) //输出Symbol('symbol')

可以利用tostring()打印为字符串

let ab = Symbol('symbol');

conslose.log(ab.tostring()) //输出'Symbol('symbol')'

系统也内置了字符串属性decription(由系统提供,不支持自己定义)

let ab = Symbol('symbol');

conslose.log(ab.decription) //输出'symbol'

这样就获取到了描述

另一种定义方法,这种方法系统会全局创建你的symbol,如果描述相同,他俩会完全相同

let ab = Symbol.for('symbol');
let bc = Symbol.for('symbol');

conslose.log(ab===bc) //输出true

let ab = Symbol.for('symbol');
let bc = Symbol.for('sym');

conslose.log(ab===bc) //输出false

这种方法声明的需要用keyfor属性取得描述值

let ab = Symbol.for('symbol');
let ac = Symbol.('symbol');

conslose.log(Symbol.keyFor(ab)) //输出'symbol'
conslose.log(Symbol.keyFor(ac)) //输出'undegin'

使用实例

image.png

再看这个例子,Symbol用for in和for of是读取不到的,他会变成私有属性([]是为了是symbol成为变量)

image.png

这里因为symbol会变成私有属性,要想遍历需要使用这个方法,但是他只会遍历除sybol属性

image.png

还有一个方法是遍历所有属性

image.png