美文网首页
[ES6] 符号

[ES6] 符号

作者: Darkdreams | 来源:发表于2019-12-23 18:09 被阅读0次

普通符号

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

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

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

符号具有以下特点:

  • 没有字面量
  • 使用typeof得到的类型是Symbol
  • 每次调用Symbol函数得到的符号永远不相等,无论符号名是否相同
  • 符号可以作为对象的属性名存在,这种属性称之为符号属性
    • 开发者可以通过精心的设计,让这些属性无法通过常规方式被外界访问
    • 符号属性是不能枚举的,因此在for-in循环中无法读取到符号的属性,Object.keys方法也无法读取到符号属性
    • ```Object.getOwnPropertyNames``尽管可以得到所有无法枚举的属性,但是仍然无法读取到符号属性
    • ES6新增Object.getOwnPropertySymbols方法,可以读取符号
  • 符号无法被隐式转换,因此不能被用于数学运算、字符串拼接或其他隐式转换场景,但符号可以以显示转换为字符串,通过String构造函数进行转换即可,console.log之所以可以输出符号,是它在内部进行了显示转换

共享符号

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

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. 其他知名符号

相关文章

  • Promise

    es6 Promise resolve 成功 reject失败 体验箭头符号写法,都是箭头符号可让代码变得简洁...

  • ES6 符号

    普通符号 es6 规定,现在属性名除了是字符串之外,还有了一个属性名 symbol 符号是 ES6 新增的一个数据...

  • 六: ES6 符号 Symbol

    前言 该部分为书籍 深入理解ES6 第六章(符号与符号属性)笔记 创建符号值 符号没有字面量形式, 这在 JS 的...

  • [ES6] 符号

    普通符号 符号是ES6新增的一个数据类型,它通过函数Symbol(符号名)来创建 符号设计的初衷,是为了给对象设置...

  • ES6 符号,迭代器,生成器,异步,类

    符号 符号:概念:ES6中的添加了一种原始数据类型符号(已有的原始数据类型:String,Number,boole...

  • ES6 中的定型数组(二)

    《深入理解ES6》阅读随笔 数值数据类型 无符号八位整形有符号八位整形无符号十六位整形有符号十六位整形无符号三十二...

  • 符号-普通符号

    概述 符号是ES6新增的一个数据类型,它通过使用函数 Symbol(符号描述) 来创建。 符号设计的初衷,是为了给...

  • JavaScript 基本(二)symbol类型

    symbol是ES6新增的类型。符号是原始值,且符号实例是唯一的、不可变的。符号的用途是确保对象属性使用唯一标识符...

  • ES6之符号与符号属性

    引 在 JS 已有的基本类型(字符串、数值、布尔类型、 null 与 undefined )之外, ES6 引入了...

  • Vue中常用的ES6 知识

    Vue中import引入模块路径时的@符号 ES6 的export 和 import:export: 用户对外输出...

网友评论

      本文标题:[ES6] 符号

      本文链接:https://www.haomeiwen.com/subject/vckwbctx.html