两分钟读懂ES6的Symbol

作者: mytac | 来源:发表于2017-11-14 16:39 被阅读23次

介绍

ES6新增加的原始数据类型Symbol,它不能用new创建实例,因为他和undefinednull一样都是原始数据类型。

Symbol 表示独一无二的值,即使传入相同参数的两个Symbol,他们也不是等价的:

Symbol(1)==Symbol(1) //false
Symbol(1)===Symbol(1) //false

转换

Symbol 不会被隐式转换为数字或字符串

1+Symbol('1') //Uncaught TypeError: Cannot convert a Symbol value to a number
'1'+Symbol('1') // Uncaught TypeError: Cannot convert a Symbol value to a string

但是可以通过调用方法进行显式转换

Symbol('1').toString() // -> "Symbol(1)"  转字符串
!Symbol('1') // -> false 转布尔值

/*但是不能转为数值*/
Number(Symbol('1')) // -> VM1652:1 Uncaught TypeError: Cannot convert a Symbol value to a number

基本使用

作为对象的键名

在我们为对象扩充属性时,经常会不小心覆盖之前的属性,由于Symbol的唯一性,我们可以用Symbol作为键名使用:

const name=Symbol()
const people={}
/*务必这样创建属性,如果写为people.name则会吧name解析为字符串,相当于people['name']*/
people[name]='tom' 
console.log(people.name) // => undefined 这里其实是在访问people['name']
console.log(people[name]) // 'tom'

用Symbol创建的属性不会被遍历到,有一个Object.getOwnPropertySymbols方法,可以获得指定对象的所有Symbol属性名。

const obj = {};
let a = Symbol('a');
let b = Symbol('b');

obj[a] = 'Hello';
obj[b] = 'World';

const objectSymbols = Object.getOwnPropertySymbols(obj);
console.log(objectSymbols) // => [Symbol(a), Symbol(b)]

重用

使用Symbol.for()可以重用同一个Symbol值,并注册到全局环境以便搜索。

// 搜索标记为foo的Symbol,没有则创建
const s1 = Symbol.for('foo');
const s2 = Symbol.for('foo');

s1 === s2 // true

查询登记名称

使用Symbol.keyFor查询Symbol注册名称。

let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined

总结

想详细了解的去读阮一峰的原文,不过symbol这个东西的用处确实不大,简单了解基础部分就够了。

相关文章

  • 两分钟读懂ES6的Symbol

    介绍 ES6新增加的原始数据类型Symbol,它不能用new创建实例,因为他和undefined、null一样都是...

  • ES6补充以及Node事件轮询

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

  • 深入理解ES6六

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

  • es6中的数据类型之symbol

    1. symbol es6中的数据类型有:number, boolean, string, symbol, nul...

  • 2018-08-06 第一天课 ES6前奏

    1.Symbol ES6新增的 数据类型 -基本类型 值是由Symbol 函数 调用产生的 相同的Symbol 函...

  • Symbol

    es6新增数据类型 -- 基本类型 值是由symbol函数调用产生的 Symbol的基本用法 Symbol的使用属...

  • JavaSctipt基础归纳,以及隐式转换的规则

    原始类型: "symbol" 是ES6,新扩展的原始类型;Symbol,表示独一无二的值。Symbol 值通过Sy...

  • ES6 中的 Symbol

    JavaScript 之 Symbol Symbol是什么 Symbol是ES6中新引入的一种基本数据类型。Sym...

  • Symbol

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

  • Symbol And Iterator

    Symbol Symbol是es6新引入的一种数据类型,表示一个独一无二的值,Symbol 值通过Symbol函数...

网友评论

本文标题:两分钟读懂ES6的Symbol

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