资讯专栏INFORMATION COLUMN

ES6: Symbol

iliyaku / 3386人阅读

摘要:的出现是因为没有可以用来表示唯一的标识符,所以从根本上防止属性名的冲突,所以引入了。所以对象的属性名可以有两种类型,一种是通常的字符串,另一种是新增的类型。而且值不能与其他类型的值进行运算。

Symbol的出现是因为没有可以用来表示唯一的标识符,所以从根本上防止属性名的冲突,所以引入了Symbol。所以对象的属性名可以有两种类型,一种是通常的字符串,另一种是新增的Symbol类型。
Symbol是一种新的原始数据类型,用Symbol函数生成,用typeof运算符的结果是"symbol"。它是一种原始数据类型,不是对象,所以Symbol函数前不能用new命令。而且Symbol值不能与其他类型的值进行运算。

// 没有参数的情况
var s1 = Symbol();
var s2 = Symbol();

s1 === s2 // false

// 有参数的情况
var s1 = Symbol("foo");
var s2 = Symbol("foo");

s1 === s2 // false

当Symbol值作为对象属性名时,不能用点运算符

var mySymbol = Symbol();
var a = {};

a.mySymbol = "Hello!";
a[mySymbol] // undefined
a["mySymbol"] // "Hello!"

Symbol作为属性名,是不会被for...in,for..of,Object.keys(), Object.getOwnPropertyNames,JSON.stringify()解析的,但是它有一个私有属性: Object.getOwnPropertySymbols,这个可以获取Symbol的属性名。另外Reflect.ownKeys 这个方法可以获取所有类型的属性名。

Symbol的方法

Symbol.for():可以使用同一个symbol值,它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。

var s1 = Symbol.for("foo");
var s2 = Symbol.for("foo");

s1 === s2 // true

Symbol.for("bar") === Symbol.for("bar")
// true

Symbol("bar") === Symbol("bar")
// false

Symbol.keyFor(): 返回一个已经登记的Symbol类型的key值

hasInstance
isConcatSpreadable
species
match
replace
search
split
iterator
toPrimitive
unscopables

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82009.html

相关文章

  • 通俗易懂理解ES6 - ES6的变量类型及Iterator

    摘要:迭代器在原有的数据结构类型上新增了两种类型,我们在使用的时候还可以通过自由组合的形式使用这些结构类型达到自己想要的数据结构,这就需要一种统一的接口机制供我们调用处理不同的数据结构。 引言 万丈高楼平地起,欲练此功,必先打好基本功: ) 在了解 ES6 新增的变量类型前,我们必须先知道 JavaScript 在ES6之前,有如下六种基本数据类型:Null、Undefined、Number...

    Keven 评论0 收藏0
  • ES6学习笔记之Symbol

    摘要:前端技术日新月异,不断有新技术出现,我们就需要不断地学习新知识,虽然已经提出很久了,但是最近我才有时间静下心来好好学习一下里面提出的新规则。 前端技术日新月异,不断有新技术出现,我们就需要不断地学习新知识,虽然ES6已经提出很久了,但是最近我才有时间静下心来好好学习一下里面提出的新规则。今天总结下ES6提出的这个新的原始数据类型--Symbol。 为啥需要Symbol 一个新规则的提出...

    leo108 评论0 收藏0
  • ES6 Symbol - 基本使用方法

    摘要:但是,前来提到的个方法都不支持属性,为了保持原有的功能,新增了一个方法来检索类型的属性接下来看一下式例以上,就是关于的基本使用方法。 ES6新增了一个基本数据类型:Symbol,至此ECMAScript的基本数据类型就有了6种:字符串,数字,布尔,null,undefined,Symbol。关于Symbol,我打算写2篇文章来提取一下比较重要的知识点,这篇是第一篇,主要讲Symbol的...

    paney129 评论0 收藏0
  • ES6Symbol竟然那么强大,面试中的加分点啊

    摘要:中的获取针对这个,添加了方法。这个和其他的一些属性不同,他是默认不存在一些标准对象上。进行类型转换的时候,会被强制的调用一个参数,在规范中这个参数被称之为这个参数是三个值其中的一个。来上面的类型,你可以试试。 symbol是es6出的一种类型,他也是属于原始类型的范畴(string, number, boolean, null, undefined, symbol) basic le...

    LeexMuller 评论0 收藏0
  • ES6语法之Symbol

    摘要:概述的对象属性名都是字符串,这容易造成属性名的冲突。这就是引入的原因。它是语言的第七种数据类型,前六种是布尔值字符串数值对象。它将创建唯一的标识符,并将其存储在中。同理,在对象的内部,使用值定义属性时,值必须放在方括号之中。 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有...

    baishancloud 评论0 收藏0
  • 深入理解ES6笔记(六)SymbolSymbol属性

    摘要:先搜索全局符号注册表,如果已有,则返回这个已存在的符号值否则,会创建一个新的符号值,并使用该键值将其记录到全局符号注册表中,然后返回这个新的符号值。 主要知识点:创建符号值、使用符号值、共享符号值、符号值转换。检索符号值属性以及知名符号 showImg(https://segmentfault.com/img/bVbfWhK?w=1203&h=633); 《深入理解ES6》笔记 目录 ...

    crossea 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<