es6学习笔记Symbol
1、概述
Symbol是为了防止出现属性名相同而出现的。
2、作为属性名的Symbol
在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中
3、消除魔术字符串
魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,改由含义清晰的变量代替。
4、属性名的遍历
Symbol 作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。但是,它也不是私有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名
5、Symbol.for
它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。
6、单例模式
7、内置的symbol值
Symbol.hasInstance
对象的Symbol.hasInstance属性,指向一个内部方法。当其他对象使用instanceof运算符,判断是否为该对象的实例时,会调用这个方法。比如,foo instanceof Foo在语言内部,实际调用的是Foo[Symbol.hasInstance](foo)。
Symbol.isConcatSpreadable:对象的Symbol.isConcatSpreadable属性等于一个布尔值,表示该对象用于Array.prototype.concat()时,是否可以展开
Symbol.species:指向一个构造函数。创建衍生对象时,会使用该属性
Symbol.match:指向一个函数。当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值
……
浙公网安备 33010602011771号