ES6 symbol
2016-04-19 11:49
246 查看
在map中键可以用对象了。
但在其他地方还不行,es6添加了Symbol第七种数据类型。
它可以用来配置为对象的属性
它表示独一无二的值。
凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
上面代码中,变量
它不需要用new 来创建,还可以接受一个字符串作为参数。
表示对实例的描述,
//以前js中没办法把一个对象当作对象的属性名
//symbol 实现了 它是一个新的数据类型,es6中就有七个了
//它不是类创建时不需要new 直接Symbol()
//每个symbol 都是独一无二的,即使没有指定描述
var s=Symbol();
var s2=Symbol();
//不相等
console.log(s===s2);
//symbol 可以转换为布尔值,不能当作数值
if(s3){
console.log('true')
}
//作为属性名 ,不能用Xx.symobl来定义
var obj={}
//需要用[symbol]
obj[s]='cc'
obj[s2]='bb'
obj[s3]='cc'
//[XX]:
var obj2={
[s]:function(){
console.log('aa')
}
}
//使用时obj[XX]
console.log(obj[s])
obj2[s]()
//增强对象写法
var obj3={
[s](){
console.log('aa')
}
}
//这是以前对象的写法。
var obj4={
[s]:function(){
console.log('aa')
}
}
obj3[s]()
//for('aa') 可以返回同一个值.
var a=Symbol.for('aa');
var b=Symbol.for('aa');
console.log(a===b);
内置symbol值
除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。
//类中的generator 方法
//Symbol.iterator方法返回一个Foo类的默认遍历器,for...of循环会自动调用这个遍历器。
class Fo{
constructor(...args){
this.args=args;
}
//*表示是一个generator
//类内的方法定义不需要function 直接函数名就可以了,
//所有*前的function就省略了
//[Symbol] 这是定义方法名称
//inerator 表示这个对象在of语句中调用这个方法
*[Symbol.iterator](){
for(var arg of this.args){
yield arg;
}
}
}
for(var a of new Fo(1,2,3,4)){
console.log(a);
}
但在其他地方还不行,es6添加了Symbol第七种数据类型。
它可以用来配置为对象的属性
它表示独一无二的值。
凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
let s = Symbol(); typeof s // "symbol"
上面代码中,变量
s就是一个独一无二的值。
typeof运算符的结果,表明变量
s是Symbol数据类型,而不是字符串之类的其他类型。
它不需要用new 来创建,还可以接受一个字符串作为参数。
表示对实例的描述,
var s1 = Symbol('foo');
s1 // Symbol(foo)
//以前js中没办法把一个对象当作对象的属性名
//symbol 实现了 它是一个新的数据类型,es6中就有七个了
//它不是类创建时不需要new 直接Symbol()
//每个symbol 都是独一无二的,即使没有指定描述
var s=Symbol();
var s2=Symbol();
//不相等
console.log(s===s2);
//symbol 可以转换为布尔值,不能当作数值
if(s3){
console.log('true')
}
//作为属性名 ,不能用Xx.symobl来定义
var obj={}
//需要用[symbol]
obj[s]='cc'
obj[s2]='bb'
obj[s3]='cc'
//[XX]:
var obj2={
[s]:function(){
console.log('aa')
}
}
//使用时obj[XX]
console.log(obj[s])
obj2[s]()
//增强对象写法
var obj3={
[s](){
console.log('aa')
}
}
//这是以前对象的写法。
var obj4={
[s]:function(){
console.log('aa')
}
}
obj3[s]()
//for('aa') 可以返回同一个值.
var a=Symbol.for('aa');
var b=Symbol.for('aa');
console.log(a===b);
内置symbol值
除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。
//类中的generator 方法
//Symbol.iterator方法返回一个Foo类的默认遍历器,for...of循环会自动调用这个遍历器。
class Fo{
constructor(...args){
this.args=args;
}
//*表示是一个generator
//类内的方法定义不需要function 直接函数名就可以了,
//所有*前的function就省略了
//[Symbol] 这是定义方法名称
//inerator 表示这个对象在of语句中调用这个方法
*[Symbol.iterator](){
for(var arg of this.args){
yield arg;
}
}
}
for(var a of new Fo(1,2,3,4)){
console.log(a);
}
相关文章推荐
- mysql 管理
- AllJoyn+Android+C++开发案例-android和windows跨设备跨平台调用方法
- SurfaceView取景
- 给定一组数,要求从中找出第k小的元素
- Flask 多文件基本结构
- 使用Asp.Net MVC开发兼职文章系统
- Altium Designer
- Java中<T>泛型意思
- iOS开发——界面跳转方法总结
- 使用cxf编写webservice遇到问题
- 移动屏幕旋转解决方法
- 调试web service的问题:“无法自动进入并单步执行服务器。无法确定停止位置。请验证是否已加载符号。未找到符号:……”
- 汇编基本模版
- 基于 Facebook Redex 实现 Android APK 的压缩和优化
- Angularjs练手篇——Server编写
- Linux 更改目录及子目录权限
- 禅与 Objective-C 编程艺术
- @PathVariable
- 前后端数据对接防止接口被恶意调用
- 8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)