banner
banner
banner
NEWS LETTER

TS-symbols和迭代器和生成器

Scroll down

symbols

基础

  • 创建symbol类型

1
let sym1 = Symbol() // 只能通过Symbol构造函数创建的
  • Symbols是不可改变且唯一的

1
2
3
let sym2 = Symbol("key")
let sym3 = Symbol("key")
sym2 === sym3 // false
  • symbols也可以被用做对象属性的键

1
let obj = { [sym]: "value" }
  • 可以与计算出的属性名声明相结合来声明对象的属性和类成员

1
2
3
4
5
6
7
8
9
const getClassNameSymbol = Symbol();
class C {
[getClassNameSymbol](){
return "C"
}
}

let c = new C()
let className = c[getClassNameSymbol]() // "C"

众所周知的Symbols

  • Symbol.hasInstance: 识别一个对象是否是其实例
  • Symbol.isConcatSpreadable: 布尔值,表示当在一个对象上调用Array.prototype.concat时,这个对象的数组元素是否可展开
  • Symbol.iterator: for-of语句,返回默认迭代器
  • Symbol.match: 正则表达式用来匹配字符串
  • Symbol.replace: 正则表达式用来替换字符串中匹配的子串
  • Symbol.search: 正则表达式返回被匹配部分在字符串中的索引
  • Symbol.split: 正则表达式来用分割字符串
  • Symbol.species: 函数值,为一个构造函数。用来创建派生对象。
  • Symbol.toPrimitive: 把对象转换为相应的原始值。
  • Symbol.toStringTag: 返回创建对象时默认的字符串描述。
  • Symbol.unscopables: 对象,它自己拥有的属性会被with作用域排除在外。

迭代器和生成器

for…of: 迭代对象的键对应的值

1
2
let x=['a','d']
for(let i of x){} // 遍历的结果是a,d

for…in: 迭代对象的键的列表

1
for(let i in x){} //遍历的结果是值的下标0,1

mixins: 结合,可提前给混合进来的属性方法占位

1
2
3
class a{}
class b{}
class ad implements a,b{}

三斜线指令: /// 单行注释,注释内容会作为编译器指令使用

  1. /// 指令 : 用于声明文件间的依赖。
    • 当使用–out或–outFile时,可调整输出内容的顺序。文件在输出文件内容中的位置与经过预处理后的输入顺序一致。
  2. 如果指定了–noResolve编译选项,三斜线引用会被忽略;它们不会增加新文件,也不会改变给定文件的顺序。
  3. ///<reference types="..." />指令 : 声明了对某个包的依赖。(d.ts文件)
  4. ///<reference no-default-lib="true"/>把一个文件标记成默认库
  5. ///<amd-module />默认情况下生成的AMD模块都是匿名的。允许给编译器传入一个可选的模块名
其他文章
cover
TS-枚举
  • 24/11/01
  • 11:40
  • TypeScript
cover
TS-变量声明
  • 24/11/01
  • 11:40
  • TypeScript
目录导航 置顶
  1. 1. symbols
    1. 1.1. 基础
    2. 1.2. 创建symbol类型
    3. 1.3. Symbols是不可改变且唯一的
    4. 1.4. symbols也可以被用做对象属性的键
    5. 1.5. 可以与计算出的属性名声明相结合来声明对象的属性和类成员
    6. 1.6. 众所周知的Symbols
  2. 2. 迭代器和生成器
    1. 2.1. for…of: 迭代对象的键对应的值
    2. 2.2. for…in: 迭代对象的键的列表
  3. 3. mixins: 结合,可提前给混合进来的属性方法占位
  4. 4. 三斜线指令: /// 单行注释,注释内容会作为编译器指令使用
请输入关键词进行搜索