前言
余为前端菜鸟,感姿势水平匮乏,难观前端之大局。遂决定循前端知识之脉络,以兴趣为引,辅以几分坚持,望于己能解惑致知、于同道能助力一二,岂不美哉。
本系列代码及文档均在 此处
依然很忙,继续啃老本。。。
lesson1 Symbol
概述
javaScript第七种原始数据类型Symbol
let s = Symbol('foo')
通过Symbol函数生成,每个Symbol类型的变量值都独一无二,作为一种类似于字符串的数据结构,可以避免变量名冲突
Symbol函数接收一个参数用于描述该Symbol实例,不影响生成的Symbol实例的值
Symbol值不能与其他类型进行运算(模板字符串中也不可以),可以显示转为字符串和布尔值(String(), Boolean())
Symbol作为属性名
不能用.,因为.是去取字符串对应属性名
在对象中使用作为属性名时,需使用否则也会被当做字符串
Symbol.for, Symbol.keyFor
let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"
let s2 = Symbol("foo"); // 先搜索全局,已存在该key则返回已存在的
Symbol.keyFor(s2) // undefined
复制代码
内置Symbol值
Symbol.hasInstance
对象的Symbol.hasInstance属性指向一个内部方法,其他对象使用instanceOf判断实例时,会调用这个内部方法
class Even {
static [Symbol.hasInstance](obj) {
return Number(obj) % 2 === 0;
}
}
1 instanceOf Even
复制代码