美文网首页
Symbol的入门勘察

Symbol的入门勘察

作者: Mokingc | 来源:发表于2020-02-22 23:59 被阅读0次

概念

Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"

每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。

运用

从上述定义中我们可以看出,Symbol的作用就是声明一个唯一的变量,纵使传入的参数一样,也不会使它们相等.

let s1 = Symbol('foo')
let s2 = Symbol('foo')

s1 // Symbol(foo)
s2 // Symbol(foo)

s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(foo)"

s1 == s2    // false

Symbol的参数只是一个描述,就好像俩个双胞胎,你无论如何相同的描述他们,他们也是俩个不同的人.世界上每个人都是独一无二的,而Symbol的作用正是声明一个独一无二的变量.

那么为何ES6要出这么一个新类型呢,它的主要作用是什么呢?

由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖

举个例子,一个学校有俩个人,他们很像,如果使用字符串作为他们的描述传入.

var Student = function(describe){
    this.describe = describe
}

var a = new Student("好学,认真,努力")
var b = new Student("好学,认真,努力")

a.describe == b.describe // true

使用Symbol生成

var Student = function(describe){
    this.describe = describe
}

var a = new Student(Symbol("好学,认真,努力"))
var b = new Student(Symbol("好学,认真,努力"))

a.describe == b.describe // false

这里我举的这个例子可能不太恰当,因为 a 的描述确实和 b 的描述确实相同.只是想告诉大家,这里的Symbol起的是一个"ID"的作用,就像每个人的身份证一样,输入查询便能看到你的个人信息.

下述借鉴阮一峰老师的例子:

const COLOR_RED1    = Symbol("我是红色");
const COLOR_RED2    = Symbol("我是红色");

function getComplement(color) {
  switch (color) {
    case COLOR_RED1:
      return "中国红";
    case COLOR_RED2:
      return "玫瑰红";
    default:
      throw new Error('Undefined color');
    }
}

总结

Symbol 的主要作用就是作为一个可替换字符串或者整型使用的唯一值.

如果想更进一步了解,可以查看下面的参考链接:

相关文章

  • Symbol的入门勘察

    概念 Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成...

  • Symbol

    注:内容来自阮一峰老师的书 ECMAScript 6 入门 1.Symbol 值通过Symbol函数生成。 这就是...

  • ES6学习笔记(12)之 Symbol

    参考:ECMAScript 6 入门 Symbol 为什么要引入Symbol: ES5 的对象属性名都是字符串,这...

  • TypeScript基础入门之Symbols

    转发 # TypeScript基础入门之Symbols 介绍 自ECMAScript 2015起,symbol成为...

  • TypeScript基础入门之迭代器和生成器

    转发 # TypeScript基础入门之迭代器和生成器 迭代性 如果对象具有Symbol.iterator属性的实...

  • 合同真题整理合集

    1、 根据《标准勘察招标文件》,属于“勘察服务”的内容是() 解析:“勘察服务”包括:制定勘察纲要、勘探、取样和试...

  • Symbol

    Symbol 每个Symbol都是独一无二的Symbol() !== Symbol() Symbol 不能进行运算...

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

  • ES6入门 ___ Symbol

    一、概述 ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。Symbol值通过 Symbol 函...

网友评论

      本文标题:Symbol的入门勘察

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