美文网首页
ES6-Symbol

ES6-Symbol

作者: 婆娘漂亮生活安逸 | 来源:发表于2019-06-13 21:17 被阅读0次

ES6 中引入了一种新的原始数据类型 Symbol,表示独一无二的值。
引入的原因:保证每个属性名都是独一无二的,从根本上防止属性名的冲突。

1.关于 Symbol


直接使用 Symbol() 就可以创建一个新的 symbol 变量,

let s = Symbol();

typeof s; // "symbol"

⚠️我们是使用 Symbol() 函数创建 symbol 变量,并非使用构造函数,因此不能使用 new 操作符。

可以接受一个字符串参数,表示对变量的描述,主要用于区分变量。

let s = Symbol('first');

也可以接受一个对象参数,将调用对象的toString()方法

let s = Symbol({name: 'xxx'});

⚠️参数只是表示对当前变量的描述,即使是相同参数,返回值都是不想等的,即独一无二的特性。

2.Symbol.for() 与 Symbol.keyFor()


如果我们想要创建两个相等的 symbol 变量,则可以使用 Symbol.for(key),该方法生成的变量会被登记在全局环境中,如果使用同一个 key 继续生成一个新的变量,其实两者值都相同。

var s1 = Symbol.for('xxx');
var s2 = Symbol.for('xxx');
s1 === s2 // true

如果想要知道某个变量是否在全局环境中登记过,则可以使用 Symbol.keyFor()

Symbol.keyFor(s1) // 'xxx'

3.使用Symbol作为属性名


let mySymbol = Symbol();

// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
let a = {
  [mySymbol]: 'Hello!'
};

// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });

// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

⚠️使用 Symbol 值作为对象属性名时,不能用点运算符。因为点运算符后面的属性名实际是一个字符串,而不是 Symbol 值

写在最后:
简单介绍了一下 Symbol 类型,它所提供的具体方法不再一一介绍,大家可以自己摸索使用哈~

相关文章

  • es6-Symbol

    title: es6-Symboldate: 2018-02-07 22:40:00tags: es6 前言 突然...

  • ES6-Symbol

    1.概括 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对...

  • ES6-Symbol

    ES6 中引入了一种新的原始数据类型 Symbol,表示独一无二的值。引入的原因:保证每个属性名都是独一无二的,从...

  • ES6-Symbol

    初识Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语...

  • ES6-Symbol

    创建Symbol实例let s1 = Symbol()let s2 = Symbol('another symbo...

  • ES6-Symbol

    1.概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对...

  • ES6-Symbol

    ES5中对象的属性名都是字符串,容易造成重名,污染环境Symbol: 概念:ES6中的添加了一种原始数据类型sym...

  • es6-symbol的用法

    Symbol数据类型 Synmbol 数据类型提供一个独一无二的值。 Symbol的声明 Symbol的使用 根据...

  • es6-Symbol数据类型

    Symbol Symbol 是一个符号对象,是es6新添加的数据类型,通过Symbol()可以得到一个唯一的值,所...

网友评论

      本文标题:ES6-Symbol

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