ES6 symbol

来源:互联网 发布:ping ip地址的一个端口 编辑:程序博客网 时间:2024/06/05 04:22

在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);
}

0 0
原创粉丝点击