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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系列】计算机系统中的架构与发行版:理解与区分

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

一文读懂MES和ERP的区别

MES(Manufacturing Execution System)系统是制造执行系统,位于上层的计划管理系统与生产过程的直接工业控制系统之间,是面向车间层的管理信息系统,能够对整个车间制造过程进行优化,实时收集生产过程中的数据…

关于安卓文件复制的杂谈(一)文件复制,文件夹复制

背景 一些很基础的东西,往往用起来,找起来,乱七八糟,所以特此记录 环境 win10,jdk8,as4 备注 不考虑安卓沙箱机制,这里讲解的是思路,示例中,是以应用内部目录进行测试 开发 把一个文件&a…

LeetCode-60题:排列序列解法二(原创)

【题目描述】 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下:"123" 、"132" 、"213" 、"231"、"312"、…

数字化转型:传统行业的新出路?

近年来,数字化转型已成为各行各业的热议话题。许多传统行业正面临着巨大的挑战,例如市场竞争加剧、成本上升、利润率下降等。数字化转型被视为传统行业破局的关键。那么,数字化转型究竟是不是传统行业的新出路呢? 传统行业面临的挑…

Qt 坐标位置转换

Qt 坐标位置转换 文章目录 Qt 坐标位置转换常见的位置坐标转换Qt窗体中常用坐标的区别与获取途径当前光标相对于屏幕的绝对位置当前光标相对于当前窗口的位置鼠标事件发生的位置窗体的位置判断鼠标光标是否悬浮在某个子控件上 从事Qt快一年了 ,在做坐标转换的时候容…

OpenCV4.9.0在Android 开发简介

查看:OpenCV系列文章目录(持续更新中......) 上一篇:使用 Clojure 进行 OpenCV 开发简介 下一篇:暂无 引言: OpenCV是一个跨平台计算机视觉库,广泛用于图像处理、计算机视觉和机器学习等领域…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、…

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志 前言拓扑图设备选型组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的…

群发短信后的实际效果统计分析

群发短信后的实际效果统计分析是评估短信营销效果的关键环节,有助于企业了解短信发送的效果,并据此优化营销策略。以下是对群发短信实际效果统计分析的详细探讨: 首先,企业需要关注短信的发送成功率。这包括短信是否成功发送至目标…

TinTin Web3 Bounty 挑战杯开启,Sui 向你发出挑战邀请!

2024 年开年最火的是什么? 对 Web3 来说,Bounty 任务应该是普通人获得行业“一杯羹”的重要捷径! 通过深入学习各类 Web3 技术,凭借实战锻炼开发创新项目,就有机会获得各大生态项目方的 Bounty 奖励。 TinTinLand 社…

TSINGSEE青犀数字化、智能化视频技术推动森林防火智慧监管

一、背景分析 中央网络安全和信息化委员会印发《“十四五”国家信息化规划》,明确指出“提升林草生态网络感知能力,完善生态系统保护成效数字化监测评估体系”。这为数字化系统建设引领了方向,中国林业信息化建设迈入了新的阶段,全…

HTML5语法总结

文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展:相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展:表格结构标签合并…

[C/C++] -- 链表

C/C 中链表是一种常见的数据结构,用于存储和组织数据。链表由节点(Node)组成,每个节点包含数据和指向下一个节点的指针。链表相对于数组的优势在于可以动态地分配内存,插入和删除操作效率高,但访问元素的随…

MacOS 电脑如何通过自带terminal终端连接PostgreSQL

1、安装Postgre SQL客户端工具 brew install postgresql 2、连接到PostgreSQL (1)创建远程连接 psql -h hostname -U username -d database 其中,hostname 是 PostgreSQL 服务器的主机名或 IP 地址,username 是您的 PostgreS…

机器学习 - 预测训练模型

接着上篇博客机器学习-训练模型做进一步说明。 There are three things to make predictions (also called performing inference) with a PyTorch model: Set the model in evaluation mode (model.eval())Make the predictions using the inference mode context manager (…

学点Java_Day6_基于Copyright和Actions On Save的IDEA自动更新文件最后编辑时间的方法研究(IDEA2021.2及以上)

0 版本要求 IDEA2021.2及以上,我用的IntelliJ IDEA 2023.2.4 1 操作 1.1 Copyright设置 ① CtrlAltS打开设置(Settings)→ Editor → Copyright   ② Copyright → Copyright Profiles → → 取名 → OK   ③ 复制下面内容到框里&am…

java多线程使用与踩坑

SpringBoot使用多线程简单方法:地址 线程安全查阅资料参考:地址 背景: 经过上述资料查看,我想写个方法(依靠notify()唤醒,依靠wait()等待)实现两个线程轮流打印。 实现: 1.线程池配…

[Qt学习笔记]Qt使用MFC编译生成dll库在无编程环境电脑出现无法加载dll的问题

目录 1、 问题介绍2、 问题分析3、 问题总结和思考 1、 问题介绍 在项目实践中,使用Qt调用了一个vs创建的dll库,在本机上编译和release后的exe可以加载对应的dll文件,将exe拷贝到有vs编程环境的电脑上也可以加载对应的dll文件,但…

Java基础面试题(三)

1. 和 equals 的区别? 操作符: 是一个比较操作符,用于比较两个对象的引用是否相等。也就是说,它检查两个对象引用是否指向内存中的同一位置。对于基本数据类型(如 int, char, boolean 等), 用…