赞
踩
ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。
- <script>
- // 创建Symbol
- let s1 = Symbol();
- console.log(s1, typeof s1);
-
- // 添加标识的Symbol
- let s2 = Symbol('张三');
- let s2_2 = Symbol('张三');
- console.log(s2 === s2_2)
-
- // 使用Symbol for定义
- let s3 = Symbol.for('张三')
- let s3_2 = Symbol.for('张三')
- console.log(s3 === s3_2); //true,使用symbol.for()来实现
-
- </script>
注:遇到唯一性的场景是要想到Symbol
符号代表唯一的值,但是我就想用一个符号呢?
通过Symbol.for()创建一个全局符号
- const a = Symbol('a');
- const b = Symbol.for('b');
- const b2 = Symbol.for('c');
- const obj = {
- [a]: 1,
- [b]: 2,
- [b2]: 3
- };
- console.log(b === b2); //true
- console.log(obj);
通过Symbol.keyFor()查看全局符号参数是全局符号返回符号的描述
如果传的不是全局符号返回undefined
如果传的不是符号报错
- let c = Symbol.for("Hello")
- console.log(Symbol.keyFor(c));
- const a = Symbol('a');
- const obj = {
- [a]:1
- };
- console.log(obj) //{Symbol(a):1}
- let obj = {
- [Symbol("name")]: "一斤代码",
- age: 18,
- title: "Engineer",
- }
- console.log(Object.keys(obj)); //['age','title']
-
- for (let p in obj) {
- console.log(p); //age title
- }
-
- console.log(Object.getOwnPropertyNames(obj)); //['age','title']
输出结果如下:
由上可知,Symbol类型的Key不能通过Object.keys()或者for..in来枚举,它未被包含在对象自身的属性名集合中,所以,利用该特性,可以把不对外开放的属性用Symbol定义
- let obj2 = JSON.stringify(obj2)
- console.log(obj2);
(1)object的APl:Object.getOwnPropertySymbols(obj)
(2)新增的反射API
- console.log(Object.getOwnPropertySymbols(obj)); //[Symbol(name)]
- // 利用了反射API
- console.log(Reflect.ownKeys(obj)); //['age','title',Symbol(name)]
我们经常使用常量来代表一种业务逻辑的几种不同的类型,我们希望这些常量是唯一的关系,经常需要为常量赋一个值,常量少的时候还算好,但是常量一多,你可能还得花点脑子好好为他们取个好点的名字。
除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。可以称这些方法为靡术方法.因为它们会在特定的场景下白动执行.
迭代器也称遍历器(lterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署lterator接口,就可以完成遍历操作。
Array
Arguments
Set
Map
String
TypedArray
NodeList
对象的成员可以遍历,是因为该对象实现了Iterator接口。比如数组对象:
- for (let i of [1,2]) {
- console.log(i);
- }
任何数据结构只要部署Iterator接口,就可以完成遍历操作,即一次处理改数据结构的所有成员
注:需要自定义遍历数据的时候,要想到迭代器。
生成器函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同
- function* gen() {
- yield "一只兔子";
- yield "一只猫";
- yield "一只狗"
- }
- let result = gen()
- console.log(result.next());
- console.log(result.next());
- console.log(result.next());
- console.log(result.next());
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。