symbols
基础
创建symbol类型
1 | let sym1 = Symbol() // 只能通过Symbol构造函数创建的 |
Symbols是不可改变且唯一的
1 | let sym2 = Symbol("key") |
symbols也可以被用做对象属性的键
1 | let obj = { [sym]: "value" } |
可以与计算出的属性名声明相结合来声明对象的属性和类成员
1 | const getClassNameSymbol = Symbol(); |
众所周知的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作用域排除在外。
- 返回:一个对象
Symbol.prototype.description
- 含义:返回Symbol对象的可选描述的字符串。
- 语法:
- Symbol(‘myDescription’).description;
- Symbol.iterator.description;
- Symbol.for(‘foo’).description;
- 示例:
1
2
3Symbol('foo').description; // 'foo'
Symbol().description; // undefined
Symbol.for('foo').description; // 'foo'
迭代器和生成器
for…of: 迭代对象的键对应的值
1 | let x=['a','d'] |
for…in: 迭代对象的键的列表
1 | for(let i in x){} //遍历的结果是值的下标0,1 |
mixins: 结合,可提前给混合进来的属性方法占位
1 | class a{} |
三斜线指令: /// 单行注释,注释内容会作为编译器指令使用
- ///
指令 : 用于声明文件间的依赖。 - 当使用–out或–outFile时,可调整输出内容的顺序。文件在输出文件内容中的位置与经过预处理后的输入顺序一致。
- 如果指定了–noResolve编译选项,三斜线引用会被忽略;它们不会增加新文件,也不会改变给定文件的顺序。
///<reference types="..." />
指令 : 声明了对某个包的依赖。(d.ts文件)///<reference no-default-lib="true"/>
把一个文件标记成默认库///<amd-module />
默认情况下生成的AMD模块都是匿名的。允许给编译器传入一个可选的模块名