当前位置: 首页 > news >正文

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);
}

相关文章:

  • 录视频的软件推荐,助力视频内容创作
  • [Django 0-1] Core.Email 模块
  • MacOS安装Homebrew教程
  • 力扣---完全平方数
  • iOS常见崩溃简介
  • VR历史建筑漫游介绍|虚拟现实体验店|VR设备购买
  • #Linux(帮助手册)
  • Oracle锁表解决方案
  • 计算机网络——物理层(信道复用技术)
  • Python Web开发记录 Day13:Django part7 Ajax入门与案例(任务管理)
  • 两台电脑简单的通信过程详解(局域网,同网段)
  • 【爬虫】web自动化和接口自动化
  • 【全栈老魏】Vue3引入echarts
  • gin | gin环境搭建与示例工程
  • spring-boot-devtools debug SilentExitException
  • 【5+】跨webview多页面 触发事件(二)
  • ERLANG 网工修炼笔记 ---- UDP
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • js中的正则表达式入门
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Puppeteer:浏览器控制器
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 聚类分析——Kmeans
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 深入 Nginx 之配置篇
  • 正则学习笔记
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​如何在iOS手机上查看应用日志
  • ​香农与信息论三大定律
  • (11)MSP430F5529 定时器B
  • (31)对象的克隆
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Note)C++中的继承方式
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (循环依赖问题)学习spring的第九天
  • .NET/C# 使窗口永不获得焦点
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .php文件都打不开,打不开php文件怎么办
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @软考考生,这份软考高分攻略你须知道
  • [ IO.File ] FileSystemWatcher
  • [ 转载 ] SharePoint 资料
  • [100天算法】-不同路径 III(day 73)
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [HackMyVM]靶场 VivifyTech
  • [IE编程] IE中使网页元素进入编辑模式
  • [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]
  • [JDK工具-2] javap 类文件解析工具-帮助理解class文件,了解Java编译器机制
  • [Manacher]【学习笔记】
  • [NISACTF 2022]join-us
  • [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)