web学习笔记(四十)

目录

1.Symbol

1.1Symbol的特点

1.2 Symbol创建对象属性

1.3 .Symbol 内置值

2.迭代器 


1.Symbol

1.1Symbol的特点

   Symbol是ES6新增的一种数据类型,表示独一无二的值,是一种类似于字符串的数据类型。

        1.Symbol 的值是唯一的,用来解决命名冲突的问题

        let s1 = Symbol();
        s1 = Symbol('aaa');
        console.log(s1, typeof s1); //Symbol(aaa) 'symbol';
        let s2 = Symbol('aaa');
        console.log(s2, typeof s2);//Symbol(aaa) 'symbol'
        console.log(s1 == s2); //false
          //虽然s2和s1包含的内容一样,但Symbol()具有唯一性,所以两者是不相等的。

        2. Symbol的值不能与其他数据进行运算

const sym = Symbol("symbol");

// 以下操作会导致错误
const result = sym + 10;
console.log(result);

        3.Symbol定义的对象属性不能用for in循环遍历,但是可以使用Reflect.ownKeys 来获取对象的所有键名

       4.可以通过 for  关键字来实现两个Symbol类型的数据相等。

        let s1 = Symbol.for('aaa');
        let s2 = Symbol.for('aaa');
        console.log(s1 == s2); //true

        注意:遇到唯一性的场景时要想到Symbol

1.2 Symbol创建对象属性

给对象添加属性和方法,向对象中添加up 和down方法

不知道里面有没有这两个方法(不用去查,直接做就可以,很安全,快速)

let game={
    name:'',
    up:function(){console.log('上升')},
    down:function(){console.log('下降')}
    //2.添加方法的另一种
    [Symbol.for('say')]:function(){
        console.log('我可以说话')    
    }
}

//声明一个对象
let methods={
     up:Symbol(),
     down:Symbol()
};
  //1.添加方法的一种
game[methods.up]=function(){ console.log('up')}
game[methods.down]=function(){ console.log('down')}
console.log(game);
//调用方法
game[methods.down]();
 game[Symbol.for('say')]();

1.3 .Symbol 内置值

除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,

指向语言内部使用的方法。可以称这些方法为魔术方法,因为它们会在特定的场景下自动执行。

Symbol.hasInstance

当其他对象使用 instanceof 运算符,判断是否为该对

象的实例时,会调用这个方法

Symbol.isConcatSpreadable

对象的 Symbol.isConcatSpreadable 属性等于的是一个

布尔值,表示该对象用于 Array.prototype.concat()时,

是否可以展开。

Symbol.species

创建衍生对象时,会使用该属性

Symbol.match

当执行 str.match(myObject) 时,如果该属性存在,会

调用它,返回该方法的返回值

Symbol.replace

当该对象被 str.replace(myObject)方法调用时,会返回

该方法的返回值。

Symbol.search

当该对象被 str.search (myObject)方法调用时,会返回

该方法的返回值。

Symbol.split

当该对象被 str.split(myObject)方法调用时,会返回该

方法的返回值。

Symbol.iterator

对象进行 for...of 循环时,会调用 Symbol.iterator 方法,

返回该对象的默认遍历器

Symbol.toPrimitive

该对象被转为原始类型的值时,会调用这个方法,返

回该对象对应的原始类型值。

Symbol. toStringTag

在该对象上面调用 toString 方法时,返回该方法的返

回值

Symbol. unscopables

该对象指定了使用 with 关键字时,哪些属性会被 with

环境排除。

2.迭代器 

      迭代器(Iterator)就像是一把遍历工具,可以帮助我们逐个访问集合中的元素,而不需要知道集合内部是如何存储的。使用迭代器,我们可以轻松地对数组、集合、映射等数据结构进行遍历操作。需要自定义遍历数据的时候,要想到迭代器。

     在代码中,迭代器提供了一个类似的功能:通过调用迭代器对象的 next() 方法,我们可以逐个获取集合中的元素,直到遍历结束。这样,我们就能够以一种简单、统一的方式来处理各种不同类型的数据集合。任何数据结构只要部署 Iterator 接口就是对象的一个属性,叫Symbol.interator,就可以通过for...of完成遍历操作。

原生具备 iterator 接口的数据(可用 for of 遍历):

  1.  Array
  2.  Arguments
  3.  Set
  4.  Map
  5.  String
  6.  TypedArray 指定元素类型的数组,而不是实际的数组类型
  7.  NodeList
// 使用 Generator 函数定义一个简单的迭代器
function* myGenerator() {
  yield 1;
  yield 2;
  yield 3;
  yield 4;
  yield 5;
}

// 创建一个迭代器实例
const iterator = myGenerator();

// 使用 for...of 循环遍历迭代器
for (let value of iterator) {
  console.log(value);
}

上一篇:Vue2 引入使用ElementUI详解


下一篇:Aztec的客户端证明