es6学习笔记Symbol

1、概述

Symbol是为了防止出现属性名相同而出现的。

2、作为属性名的Symbol

在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中

3、消除魔术字符串

魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,改由含义清晰的变量代替。

4、属性名的遍历

Symbol 作为属性名,该属性不会出现在for...infor...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)时,如果该属性存在,会调用它,返回该方法的返回值

……

 

posted @ 2018-07-20 16:51  tutu_python  阅读(114)  评论(0)    收藏  举报