新的JavaScript“ Symbol”数据类型的可能使用场景是什么?

米哈尔·莱斯奇奇克(Michal Leszczyk)

我只是偶然发现JavaScript中新的数据类型的文档(针对ES6提出,但已在Firefox,Chrome和Opera中实现)Symbol

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol http://people.mozilla.org/~jorendorff/es6-draft.html#sec-symbol-objects

我正在阅读有关它的信息,但我只是想不到可能的使用情况。

该文件说:

符号是唯一且不可变的数据类型,可以用作对象属性的标识符。

好的,可以说我按照文档中的说明进行操作:

obj[Symbol("a")] = "a";

但是,由于Symbol('a')始终返回唯一值(对象),并且:

符号在for ...迭代中不可见。

如何从中检索我的财产obj

var obj = { normalProperty: 'just a string' };
obj[Symbol('a')] = 'a';

document.getElementById('retrieve').addEventListener('click', function() {
  document.write('Stringified object:' + JSON.stringify(obj) + '<br/><br/>');
  document.write('Trying to get Symbol-property value, aaaand...: <br/>');
  document.write(obj[Symbol('a')]); // undefined
}, false);
<button id="retrieve">Retrieve obj's property</button>

编辑

当然,您可以像这样检索它:

var x = Symbol('a');
obj[x] = 'a';
obj[x]; // "a"

但是这样做目的是什么?

提前致谢 :)

较小的

阅读文档和玩这一点后Symbol输入chrome,则显得Symbol是一种方法来定义一个名字-不是价值- ,而事实上,用符号定义的属性使用是不可见的for..inObject.getOwnPropertyNames()JSON.stringify()使符号对于元数据属性很有用:

// define metadata symbols
var Metadata = {
        Date: Symbol('Message date')
};

var email = function(recipient, message) {
    this.Recipient = recipient;
    this.Message = message;
    this[Metadata.Date] = new Date();
};

var email1 = new email('@Me', 'test');
JSON.stringify(email1);
// {
//    Recipient: '@Me',
//    Message: 'test'
// }

// Date is still accessible using
email1[Metadata.Date];
// Thu Nov 27 2014 16:50:00 GMT+0000

// Debugging in Console:
// {
//    Recipient: '@Me',
//    Message: 'test'
//    Symbol(Message date): Thu Nov 27 2014 16:50:00 GMT+0000
// }

可以使用Symbol.for函数将符号设置为全局符号,因此元数据名称可以创建一次,并在所有项目文件中使用。

使用符号访问值需要在创建符号时引用该符号。Symbol()即使使用相同的描述,每次调用都会创建一个新的调用

var a = Symbol('a');
var b = Symbol('a');
a != b
// and
a != Symbol('a')

但是,使用创建符号Symbol.for,它将被注册到全局注册表中,并且描述成为键,意味着在全局注册表中将只存在一个具有相同键的符号:

var a = Symbol.for('a');
var b = Symbol.for('a');
a == b
// and
a == Symbol.for('a')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript:这是什么数据类型?

来自分类Dev

Javascript:这是什么数据类型?

来自分类Dev

canvas的toDataURL()函数可能使用的数据类型是什么?

来自分类Dev

Javascript 如何使用新函数

来自分类Dev

不可能使JavaScript功能和新行

来自分类Dev

Excel新数据类型

来自分类Dev

JavaScript数据类型

来自分类Dev

Javascript + JsDoc:如何记录新的ES6数据类型(如map)?

来自分类Dev

Javascript + JsDoc:如何记录新的ES6数据类型(如map)?

来自分类Dev

JavaScript中Var类型的新实例

来自分类Dev

Haskell:使用函数范围定义新的数据类型

来自分类Dev

什么时候应该在JavaScript中使用数据类型类

来自分类Dev

为什么我们不在JavaScript中使用数据类型作为函数参数?

来自分类Dev

为什么不使用正则表达式模式作为javascript数据类型?

来自分类Dev

为什么我们不在JavaScript中使用数据类型作为函数参数?

来自分类Dev

如何从JavaScript中的对象计算新数据

来自分类Dev

JavaScript避免使用新关键字

来自分类Dev

使用Javascript在页面末尾附加新内容

来自分类Dev

使用javascript插入新表格行

来自分类Dev

使用JavaScript追加新的表格行

来自分类Dev

使用可变参数创建新的Javascript对象

来自分类Dev

新行无法在Javascript中使用

来自分类Dev

javascript json : 使用键值创建新的 json

来自分类Dev

使用 jquery 和 javascript 添加新的 div

来自分类Dev

为什么不将“函数”视为javascript中的数据类型?

来自分类Dev

什么是函数的数据类型:函数或对象?在JavaScript中

来自分类Dev

访问新的数据类型元素

来自分类Dev

BigQuery新数据类型DATE

来自分类Dev

BigQuery新数据类型DATE

Related 相关文章

热门标签

归档