JS 内置的 Symbol 值

发布于 2025-01-10 09:37:50 字数 2598 浏览 10 评论 0

Symbol.hasInstance

对象的 Symbol.hasInstance 属性,指向一个内部方法。当其他对象使用 instanceof 运算符,判断是否为该对象的实例时,会调用这个方法。比如,foo instanceof Foo 在语言内部,实际调用的是 Foo Symbol.hasInstance。

class MyClass {
  [Symbol.hasInstance](foo) {
    return foo instanceof Array
  }
}
[1, 2, 3] instanceof new MyClass() // true

上面代码中,MyClass 是一个类,new MyClass() 会返回一个实例。该实例的 Symbol.hasInstance 方法,会在进行 instanceof 运算时自动调用,判断左侧的运算子是否为 Array 的实例。

Symbol.isConcatSpreadable

对象的 Symbol.isConcatSpreadable 属性等于一个布尔值,表示该对象用于 Array.prototype.concat() 时,是否可以展开。

let arr1 = ['c', 'd']
['a', 'b'].concat(arr1, 'e') // ['a', 'b', 'c', 'd', 'e']
arr1[Symbol.isConcatSpreadable] // undefined(或者 true) 可以展开

let arr2 = ['c', 'd']
arr2[Symbol.isConcatSpreadable] = false //false 不可展开
['a', 'b'].concat(arr2, 'e') // ['a', 'b', ['c','d'], 'e']

类似数组的对象默认不展开

let obj = {length: 2, 0: 'c', 1: 'd'}
['a', 'b'].concat(obj, 'e') // ['a', 'b', obj, 'e']

obj[Symbol.isConcatSpreadable] = true
['a', 'b'].concat(obj, 'e') // ['a', 'b', 'c', 'd', 'e']

Symbol.species(略)

Symbol.match

String.prototype.match(regexp)
// 等同于
regexp[Symbol.match](this)

Symbol.replace

String.prototype.replace(searchValue, replaceValue)
// 等同于
searchValue[Symbol.replace](this, replaceValue)

Symbol.search

String.prototype.search(regexp)
// 等同于
regexp[Symbol.search](this)

Symbol.split

String.prototype.split(separator, limit)
// 等同于
separator[Symbol.split](this, limit)

Symbol.iterator

指向该对象的默认遍历器方法

Symbol.toPrimitive

指向一个方法。该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值

Symbol.unscopables

指向一个对象。该对象指定了使用 with 关键字时,哪些属性会被 with 环境排除。

Symbol.toStringTag

可以用来表示对象的自定义类型标签

const a = {}
Object.prototype.toString.call(a) // '[object Object]'

Object.defineProperty(a, Symbol.toStringTag, { value: 'Module' })
Object.prototype.toString.call(a) // '[object Module]'

toStringTag:segmentfault

toStringTag:mozilla

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文