Symbol

let s1 = Symbol('foo');
let s2 = Symbol('bar'); s1 // Symbol(foo)
s2 // Symbol(bar) s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。

// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol(); s1 === s2 // false // 有参数的情况
let s3 = Symbol('foo');
let s4 = Symbol('foo'); s3 === s4 // false

应用案例

const log = {};

log.levels = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn')
};
console.log(log.levels.DEBUG, 'debug message');
console.log(log.levels.INFO, 'info message');
const obj = {};
let a = Symbol('a');
let b = Symbol('b'); obj[a] = 'Hello';
obj[b] = 'World'; const objectSymbols = Object.getOwnPropertySymbols(obj); objectSymbols
// [Symbol(a), Symbol(b)]

属性名的遍历。

有时,我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点。

let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo'); s1 === s2 // true
Symbol.for("bar") === Symbol.for("bar")
// true Symbol("bar") === Symbol("bar")
// false

最新文章

  1. EF7 Code First Only-所引发的一些“臆想”
  2. Dapper学习笔记(2)-链接引用
  3. 【转】Airbnb React编码规范
  4. 基于FSIOT_A 实验平台SAM3S4B cortex-M3的温湿度采集
  5. Linux进程关系
  6. ubuntu 更新 rtl8192cu 驱动
  7. win7共享wifi
  8. Android webView 中loadData方法加载 带中文时出现乱码
  9. mssql sql高效关联子查询的update 批量更新
  10. 详解Java反射各种应用
  11. mysql自定义循环函数
  12. [LeetCode328]Odd Even Linked List
  13. java配置文件的读写
  14. gzip: File too large错误
  15. [BZOJ3207] 花神的嘲讽计划Ⅰ (主席树)
  16. ****微信小程序架构解析
  17. MyBatis源码解析(十)——Type类型模块之类型处理器TypeHandler
  18. swagger如何测试List类型参数
  19. ValueError: output parameter for reduction operation logical_and has too many dimensions ?
  20. 常用代码之二:使用BackgroundWorker或Task让代码异步执行。

热门文章

  1. mysql function
  2. Java-线程池总结
  3. Linux 嵌入式启动以及优化
  4. nodeJS一些事儿
  5. Unity -- Collider(碰撞器与触发器)
  6. nopCommerce从无到有01-初探nopCommerce
  7. 【西祠日志】【07】努力努力,找资料,思考,怎么做asp图片上传
  8. android相关文件夹的存取方式与函数解析---全
  9. mysql: 关于MySQL InnoDB锁行还是锁表?
  10. Unsupported major.minor version (jdk版本错误)解决方案 办法