[ES6] 符号

2019-12-23  本文已影响0人  Darkdreams

普通符号

符号是ES6新增的一个数据类型,它通过函数Symbol(符号名)来创建

符号设计的初衷,是为了给对象设置私有属性

私有属性,只能在对象内部使用,外面无法使用

符号具有以下特点:

共享符号

根据某个符号名称(符号描述)能够得到同一个符号

Symbol.for("符号描述/名称")  // 获取共享符号

const syb1 = Symbol.for("abc")
const syb2 = Symbol.for("abc")

console.log(syb1 === syb2)  // true

const obj1 = {
    a: 1,
    b: 2,
    [syb1]: 3
}
const obj2 = {
    a: 1,
    b: 2,
    [syb2]: 3
}

console.log(obj1, obj2)

知名符号

知名符号是一些具有特殊含义的共享符号,通过Symbol的静态属性得到ES6延续了ES5的思想:减少魔法,暴露内部实现

因此,ES6用知名符号暴露了某些场景的内部实现

  1. Symbol.hasInstance
    该符号用于定义构造函数的静态成员,它将影响instanceof的判定
obj instanceof A

//等用于

A[Symbol.hasInstance](obj)
  1. Symbol.inConcatSpreadable
    该知名符号会影响数组的concat方法

  2. Symbol.toPrimitive
    该知名符号会影响类型转换的结果

  3. Symbol.toStringTag
    该知名符号会影响 Object.prototype.toString的返回值

  4. 其他知名符号

上一篇下一篇

猜你喜欢

热点阅读