您的位置:首页 > 其它

ES6 symbol

2016-04-19 11:49 246 查看
在map中键可以用对象了。

但在其他地方还不行,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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: