介绍:
ES6版本后 Symbol 出现了。symbol成为了一种新的原生类型,就像number和string一样
Symbol 符号: 表示独一无二的值
symbol类型的值是通过Symbol构造函数创建的
let sym1 = Symbol();
console.log((typeof sym1)) // symbol
let sym2 = Sybmol('key'); // 可选的字符串key
console.log(sym2) // Symbol(key)
let s1 = Symbol('key');
let s2 = Symbol('key');
console.log(s1 === s2) // false, symbols是唯一的
像字符串一样,symbols也可以被用做对象属性的键
let sym = Symbol();
let obj = {
[sym]: "value" // 注意这里的sym必须用[]括起来,它是es6新的规范,表示对象的key可以是任意类型
};
console.log(obj[sym]); // "value"
Symbol.iterator
只要实现了Symbole.iterator的接口的方法,都可以被for-of语句调用。返回对象的默认迭代器。
let iterable = {
data: ['apple', 'cherry', 'mango'],
[Symbol.iterator]() {
const _this = this
let i = 0
return {
next() {
if (i < _this.data.length) {
return {
value: _this.data[i++],
done: false
}
} else {
return { value: undefined, done: true }
}
}
}
}
}
// 这样对象iterable实现了Symbol.iterator接口,则可以被for-of遍历
for(let item of iterable) {
console.log(`${item}`)
}