es6的新机制
1.Symbol:新的数据类型,表示一个不可重复的值,不是函数,不能通过new调用
作用:定义不会重名的变量;定义常量;内置Symbol的值(Symbol.iterator(返回容器的迭代器方法),需要使用reflect来遍历获取所有的属性)
2.for和keyFor的作用
3.Symbol的作用
注意:symbol的定义的属性不会被for in for of遍历
<script>
//定义Symbol
let s1 = Symbol();
let s2 = Symbol();
console.log(s1 === s2); //false
//2.
let s1 = Symbol("list");
let s2 = Symbol("sss");
console.log(s1,s2) //Symbol(list) Symbol(sss)
//重复的使用某哦个唯一的symbol
let s1 = Symbol("first");
//1.通过symbol.for()方法定义symbol的值,会在全局注册一个key=symbol的键值对
//后面可以通过key来获取前面生成的symbol
let s2 = Symbol.for("second");
let s3 = Symbol("first");
//先去全局中查找是否有对应key的symbol
let s4 = Symbol.for("second");
let s5 = Symbol.for("first");
console.log(s1===s3); //false
console.log(s2===s4); //true
console.log(s1===s5); //false
//2.symbol.keyfor通过某个symbol的值,获取对应的key值
console.log(Symbol.keyFor(s1));//undefined
console.log(Symbol.keyFor(s2)); //second
//3.symbol的使用:
//继承的时候使用
let username = Symbol();
let obj = {
username:"tom",
age:18,
sex:"man",
[username]:"kein" //新增symbol类型的username
}
console.log(obj) // {username: "tom", age: 18, sex: "man", Symbol(): "kein"}
for (let field in obj){
console.log(field) //username age sex
}
for(let [key,value] of Object.entries(obj)){
console.log(key,value) // username tom age 18 sex man
}
</script>
年轻人要戒骄戒躁,脚踏实地,同时也要仰望星空。