================================================================================
在ES6中,Symbol表示独一无二的值,也是ES6推出的第七种数据类型。Symbol和字符串不同!
1. 直接Symbol() 来创建Symbol对象。这是通过调用函数来创建Symbol对象。
这里的两个张三是不同的!
2. 使用Symbol.for方法来创建Symbol对象。和上面不同这是通过函数对象来创建Symbol。
而使用Symbol.for创建的相同值,是一样的!!
注意:
Symbol定义的变量不能与其他数据进行运算。
7个数据类型:
记忆小技巧:
USONB (you are so niubility)
**u : undefined
s : String Symbol
o : Object
n : null number
b : boolean**
方式一:
向对象中添加另一个对象的属性值为Symbol的方法。
方式二:
直接使用[]添加Symbol的对象属性。
============================================================================
instanceof的用途是判断一个对象是否在某个对象原型链上。或者说判断一个对象是某个对象的实例。
当其他对象使用instanceof运算符,判断是否为对象的实例时,会调用这个方法。
例如:
4.2 isConcatSpreadable 与 concat
对象的Symbol.isConcatSpreadable属性等于的是一个布尔值,表示该对象用于concat(Array.prototype.concat())时,是否展开。
这些属性都是Symbol的内置属性,而他们的整体来作为对象的属性去设置,来改变对象在特定场景下面的表现。
====================================================================
迭代器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。 任何数据结构只要部署了Iterator接口,就可以完成遍历操作。
在ES6中,一个新的遍历命令for … of循环,iterator接口主要供for … of 来使用。
以下的数据都可以使用for … of :
注意:
**for in 遍历的是键名。
for of 遍历的是键值。**
可以自己打印一下,查看Iterator的接口:
Iterator (迭代器)的工作原理:
关键是看next指针,我们可以打印第一个next指针看看。
===========================================================================
通过使用迭代器自定义遍历数据,自定义就是按照自己的想法来遍历对象或者对象内的数据。
例如:
==============================================================================
生成器其实就是一个特殊的函数,主要作用就是异步编程。
生成器,加上“ * ” 号。
调用next()方法来打印下面案例:
yield可以算作是函数代码的分隔符。
也可以打印i.next()方法,来查看对象value和done的值。如下:
生成器的参数大体分为两种,正常的携带参数 和 next方法传入实参。