ES6--symbol
来源:互联网 发布:淘宝盗刷国外信用卡 编辑:程序博客网 时间:2024/05/29 19:35
1.symbol实例分析
'use strict'let getName =Symbol('name');//Symbole定义的不是一个字符串module.exports=class User{ [getName](){ return 'ggb' } print(){ console.log(this[getName]()) }}
下面写一个代码引用上面代码
const User =require('./005.symbole.js')let getName =Symbol('name');var user =new User();user.print();//ggbuser[getName]();//error 1111可以看到 1111处代码报错了,此处可以作为私有成员访问的一个很好的例子。
2.使用一般的遍历不能得到symbol类型的值
'use strict'let name =Symbol('name');var obj={ age:22, [name]:"ggb"}var keys=Object.keys(obj);console.log(keys)//['age']let keyfor(key in obj){ console.log(key) //age}let key2=Object.getOwnPropertySymbols(obj)[0]console.log(obj[key2]);// 'ggb'
3.symbol取值
'use strict'var name1=Symbol.for('name')var name2=Symbol.for('name')console.log(name1===name2);//trueconsole.log(Symbol.keyFor(name1));//'name'4. of用法
let arr=[1,2,3];for( let item of arr){ console.log(item) //分行打印出1,2,3}
5.symbole与iterator结合
let arr=[1,2,3];var iterater =arr[Symbol.iterator](); console.log(Symbol.iterator)//Symbol(Symbol.iterator)console.log(typeof arr[Symbol.iterator])//functionconsole.log( arr[Symbol.iterator])//[Function: values]console.log(iterater.next());//{ value: 1, done: false }console.log(iterater.next());//{ value: 2, done: false }console.log(iterater.next());//{ value: 3, done: false }console.log(iterater.next());//{ value: undefined, done: true }let getName =Symbol('name');console.log(typeof getName) //symbolconsole.log(getName)//Symbol(name)
6.symbole与for of 结合
/** * Created by Administrator on 2017/6/11. */'use strict'class UserGroup{ constructor(users){ this.users=users; } [Symbol.iterator](){ let i=0; const names=Object.keys(this.users) let length=names.length; let self=this; return { next:function(){ let name=names[i++]; let qq=self.users[name]; return {value:{name,qq},done:i>length} } } }}let group =new UserGroup({name:'ggb',age:'28'})for(let u of group){ console.log(u);}let iterator =group[Symbol.iterator]();console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());
打印结果为:
{ name: 'name', qq: 'ggb' }{ name: 'age', qq: '28' }{ value: { name: 'name', qq: 'ggb' }, done: false }{ value: { name: 'age', qq: '28' }, done: false }{ value: { name: undefined, qq: undefined }, done: true }
7.改良版
let obj={name:'ggb',age:'28'};let iteratorFunc=function(){ let i=0; const names=Object.keys(this) let length=names.length; let self=this; return { next:function(){ let name=names[i++]; let qq=self[name]; return {value:{name,qq},done:i>length} } }}obj[Symbol.iterator]=iteratorFunc;for(let item of obj){ console.log(item);}
打印结果
{ name: 'name', qq: 'ggb' }{ name: 'age', qq: '28' }
8.iterator
var obj={ length:2, '0':"aaa", '1':"bbb",}obj[Symbol.iterator]=[][Symbol.iterator];for(let i of obj){ console.log(i);}'ggb'[Symbol.iterator];for(let i of 'ggb'){ console.log(i);}
阅读全文
0 0
- ES6--Symbol
- ES6 symbol
- 【ES6】symbol
- es6-symbol
- ES6--symbol
- 【es6】symbol
- es6->Symbol
- ES6详解五:Symbol
- ES6-Symbol类型
- 自学-ES6篇-Symbol
- ES6里symbol
- es6 javascript Symbol数据类型
- ES6 Symbol 学习
- ES6之路--Symbol
- es6 中的symbol
- ES6(九)Symbol
- ES6新数据类型 Symbol
- es6 Symbol(八)
- 操作系统-进程间通信与线程间通信
- Linux编程学习之线程篇-线程的创建与终止
- Java中的this、super、static和final关键字的详解
- 软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题1-5题)
- (6/11)JSP开发业务应用
- ES6--symbol
- Mysql中空字符<''>和空值<null>的区别
- C++动态规划算法之最长上升子序列
- 1.2 Unity3D 的注册
- Java设计模式笔记之模板方法模式
- 我的学习之路_第七章_list集合,set集合
- STL----lower_bound和upper_bound算法
- 简述android activity的生命周期
- 如何取消程序的默认打开方式 windows亲测简单有效!