TypeScript Symbol类型

Symbol 是 JavaScript 中的一种基本数据类型,是在 ECMAScript 2015(ES6)中引入的。它是一种原始值,表示独一无二的标识符每个从 Symbol() 调用返回的值都是唯一的

创建Symbol

const symbol1 = Symbol();
const symbol2 = Symbol();

console.log(symbol1 === symbol2);  // false,每个 Symbol 值都是唯一的

Symbol具体使用场景

使用 Symbol 作为对象属性键

防止对象属性键被覆盖

Symbol 主要用于创建对象的属性键,这些键是独一无二的,不会与其他属性键冲突。这有助于防止命名冲突和属性覆盖。

const mySymbol = Symbol('mySymbol');

const obj = {
  name: 'John',
  age: 30,
  [mySymbol]: 'This is a symbol property'
};

console.log(obj[mySymbol]);  

预定义的Symbol

Symbol.iterator: 用于定义对象的默认迭代器。
Symbol.toStringTag: 用于定制对象的 toString() 方法返回的字符串标签。
Symbol.hasInstance: 用于定制对象的 instanceof 操作符的行为。

Symbol.iterator 迭代器

当对象拥有一个名为 Symbol.iterator 的方法时,它就被认为是“可迭代”的。

迭代器的关键是for...of循环内部会调用对象的 Symbol.iterator 方法,获取迭代器,然后通过迭代器的 next 方法逐个访问数组的元素。
迭代器示例:

const iterable = {
    data: [1, 2, 3],
    index: 0,
    next() {
        return this.index < this.data.length
            ? { value: this.data[this.index++], done: false }
            : { done: true };
    }
};

const iterator = iterable.next();
console.log(iterator.value);  // 1
console.log(iterator.done);   // false
const iterator1 = iterable.next();
console.log(iterator1.value); // 2
const iterator2 = iterable.next();
console.log(iterator2.value); // 3
const iterator3 = iterable.next();
console.log(iterator3.value);  // undefined


迭代器语法糖for of

for of不能用于对象,因为对象没有返回迭代器的**Symbol.iterator**方法。

for( let value of map){
	console.log(value)
}

解构原理

解构其实也是调用iterator,在解构数组或对象时,JavaScript 引擎会使用迭代器协议来访问和提取相应的值。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值