ES6-11学习笔记--Symbol
let s1 = Symbol()
let s2 = Symbol()
console.log(s1); // Symbol()
console.log(s2); // Symbol()
console.log(s1 === s2); // false let s3 = Symbol('foo');
let s4 = Symbol('bar');
console.log(s3); // Symbol(foo)
console.log(s4); // Symbol(bar)
console.log(s3 === s4); // false
const obj = {
name: '张三'
}
let s5 = Symbol(obj)
console.log(s5); // Symbol([object Object])
let s6 = Symbol.for('foo')
let s7 = Symbol.for('foo') function foo() {
return Symbol.for('foo')
}
s8 = foo()
console.log(s6 === s7); // true
console.log(s6 === s8); // true
const s9 = Symbol('foo')
const s10 = Symbol.for('foo')
console.log(Symbol.keyFor(s9)); // undefined
console.log(Symbol.keyFor(s10)); // foo
const stu1 = Symbol('张三')
const stu2 = Symbol('张三')
const grade = {
[stu1]: {
address: 'aaa',
tel: '111'
},
[stu2]: {
address: 'bbb',
tel: '222'
},
}
console.log(grade);
console.log(grade[stu1]);
console.log(grade[stu2]);
2、使用Symbol可以相对隐藏类的实例属性
const sym = Symbol('age')
class User {
constructor(name) {
this.name = name
this[sym] = 18
}
getName() {
console.log('getName:' + this.name + ' age:' + this[sym])
}
} const user = new User('张三')
user.getName()
// for in是读取不到sym属性
for (let key in user) {
console.log(key);
}
// keys读取不到sym属性
for (let key of Object.keys(user)) {
console.log(key);
}
// getOwnPropertySymbols只能读取Symbol属性
for (let key of Object.getOwnPropertySymbols(user)) {
console.log(key);
}
// Reflect.ownKeys既可以读取一般实例属性,也可以读取Symbol属性
for (let key of Reflect.ownKeys(user)) {
console.log(key);
}
3、消除魔术字符串
什么是魔术字符串?如下代码:
function getArea(str) {
let area = 0
switch (str) {
case 'aaa':
area = 1
break
case 'bbb':
area = 2
break
}
return area
}
console.log(getArea('aaa'))
/*
const strType = {
aaa: 'aaa',
bbb: 'bbb',
}
*/
// 由于上面value其实并不需要关心是什么字符串,所以可以用Symbol来代替
const strType = {
aaa: Symbol(),
bbb: Symbol(),
} function getArea2(str) {
let area = 0
switch (str) {
case strType.aaa:
area = 1
break
case strType.bbb:
area = 2
break
}
return area
}
console.log(getArea2(strType.aaa))
ES6-11学习笔记--Symbol的更多相关文章
- C++11 学习笔记 std::function和bind绑定器
C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...
- js-ES6学习笔记-Symbol
1.ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.它是JavaScript语言的第七种数据类型,前六种是:Undefined.Null.布尔值(Boolean).字符串(String ...
- 【转】js-ES6学习笔记-Symbol
原文:https://www.cnblogs.com/zczhangcui/p/6435652.html https://blog.mgechev.com/2017/09/16/developing- ...
- es6学习笔记-Symbol
概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种机制 ...
- es6.3学习笔记
es版本发布相当快,从1.x到2.x,再直接到5.x,6.x 索引这个词在es中有多重意思: 索引(名词):一个索引类似于传统数据库中的一个索引,用于存储关系型文档.索引的复数为indexes或ind ...
- es6小白学习笔记(一)
1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...
- C++11学习笔记
C++11 1.long long新类型 2.列表初始化 int t=0; int t={0}; int t(0); int t{0}; 注意:如果我们使用列表初始化有丢失信息的风险,则编译器报错 l ...
- linux0.11学习笔记(1)
公布软件包包括内容: bootimage.Z - 具有美国键盘代码的压缩启动映像文件: rootimage.Z - 以1200kB 压缩的根文件系统映像文件: linux-0.11.tar.Z- 内核 ...
- JavaScript(ES6)学习笔记-Set和Map数据结构(一)
一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...
- ES6 promise学习笔记 -- 基本用法
ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...
随机推荐
- (第一章第一部分)TensorFlow框架介绍
接下来会更新一系列博客,介绍TensorFlow的入门使用,尽可能详细. 本文概述: 说明TensorFlow的数据流图结构 1.数据流图介绍 TensorFlow是一个采用数据流图(data fl ...
- Python+requests接口自动化完整项目框架整理笔记
前言 通过学习"上海悠悠"博客,自己手动敲了一遍整体的自动化项目搭建,编写用例,打印log日志,生成测试报告,将报告发送至邮箱整体流程跑了一遍,勉强跑通了 一,项目结构 --cas ...
- php 23种设计模型 - 代理模式
代理模式(Proxy) 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 介 ...
- scoped样式
scoped样式 作用∶让样式在局部生效防止冲突 写法∶<style scoped> 比如School组件和Student组件的样式名一样,当组件汇总到一起时样式会冲突.所以加上scope ...
- 【一】工程配置与电机控制part1
前言 学校发的无刷电机: 我们准备的有刷电机: 带霍尔编码器! 电机参数: 名称:驰名电机(直流减速电机) 型号:JGA25-370 电压:12V 转数:1360r/min 做云台,核心是使用PID控 ...
- Ubuntu下使用C语言连接Mysql 8.0客户端教程
Ubuntu下如何C语言程序连接MYSQL 8.0(全教程) 1. 安装GCC(略) 2. 安装mysql(本人使用的是最新MySQL 8.0版本) sudo apt install mysql-cl ...
- count(*)这么慢,我该怎么办?
1)计算一个表有多少行数用什么命令? select count(*) from t 2)count(*)底层是怎样实现的? 在MYISAM中,是把这个总行数存到磁盘中去的,要的时候直接去读就行,特别快 ...
- OSPF的五种报文
OSPF的五种报文 Hello报文 DD(Database Description)数据库描述报文 LSR(LinkState Request)链路状态请求报文 LSU(LinkState Updat ...
- Linux下使用压力测试工具stress
一:stress的安装 首先解压安装包到/usr/local/src/下 mv stress-1.0.4.tar.gz /usr/local/srctar -zxf stress-1.0.4.tar ...
- 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件的主文件名相同. 包含多个类的Java源文件编译之后会生成多个.class文件.