JavaScript学习笔记(七)

news2024/9/21 12:38:37

45.9 JavaScript 可迭代对象

  • 可迭代对象(Iterables)是可以使用 for..of 进行迭代的对象。

  • 从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。

45.9.1 遍历字符串

  <body>
    <p id="demo"></p>
    <script>
      const world = "China";
      var text = "";
      for (const x of world) {
        text += x + "<br>";
      }
      document.getElementById("demo").innerHTML = text;
    </script>
  </body>

输出:
C
h
i
n
a

45.9.2 遍历数组

<body>
    <p id="demo"></p>
    <script>
      const nums = [1, 2, 3, 4, 5];
      var text = "";
      for (const x of nums) {
        text += x + "<br>";
      }
      document.getElementById("demo").innerHTML = text;
    </script>
  </body>

输出:1
2
3
4
5

45.9.3 JavaScript 迭代器

JavaScript 迭代器

46、JavaScript Set

  • JavaScript 的 Set(集合)是一组唯一值的集合。

  • 每个值只能在 Set 中出现一次。

  • Set 可以容纳任何数据类型的值。

  • 对于 Settypeof 返回 object

  • 对于 Setinstanceof Set 返回 true

  • Set 方法:

在这里插入图片描述

46.1 如何创建 Set

您可以通过以下方式创建 JavaScript Set:

  • 将数组传递给 new Set()
  • 创建一个新的 Set,然后使用 add() 方法添加值
  • 创建一个新的 Set,然后使用 add() 方法添加变量、
<body>
    <p id="demo"></p>
    <script>
      var text = "";
      var e = "e";
      const worlds = new Set(["a", "b", "c", "d"]);
      //添加新元素
      worlds.add(e);
      worlds.add("f");
      //重复添加同一个元素只会显示一个
      worlds.add("f");

      for (const x of worlds) {
        text += x + "<br>";
      }
      document.getElementById("demo").innerHTML =
        "worlds长度为:" + worlds.size + "<br>" + "遍历所有元素为:<br>" + text;
    </script>
  </body>

46.2 查询Set的值

46.2.1 forEach() 方法

 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      var e = "e";
      const worlds = new Set(["a", "b", "c", "d"]);
      //添加新元素
      worlds.add(e);
      worlds.add("f");
      //重复添加同一个元素只会显示一个
      worlds.add("f");

      //遍历Set元素  forEach() 方法
      worlds.forEach(function (value) {
        text += value + "<br>";
      });

      document.getElementById("demo").innerHTML =
        "worlds长度为:" + worlds.size + "<br>" + "遍历所有元素为:<br>" + text;
    </script>
  </body>

输出:
worlds长度为:6
遍历所有元素为:
a
b
c
d
e
f

46.2.2 for…of方法

 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      var e = "e";
      const worlds = new Set(["a", "b", "c", "d"]);
      //添加新元素
      worlds.add(e);
      worlds.add("f");
      //重复添加同一个元素只会显示一个
      worlds.add("f");

      //遍历Set元素   for...of方法
      for (const x of worlds) {
        text += x + "<br>";
      }
      document.getElementById("demo").innerHTML =
        "worlds长度为:" + worlds.size + "<br>" + "遍历所有元素为:<br>" + text;
    </script>
  </body>

输出:
worlds长度为:6
遍历所有元素为:
a
b
c
d
e
f

46.2.3 values() 方法

  <body>
    <p id="demo"></p>
    <script>
      var text = "";
      var e = "e";
      const worlds = new Set(["a", "b", "c", "d"]);
      var values = worlds.values(); //返回 [object Set Iterator]

      for (const x of values) {
        text += x + "<br>";
      }

      document.getElementById("demo").innerHTML =
        "worlds长度为:" + worlds.size + "<br>" + "遍历所有元素为:<br>" + text;
    </script>
  </body>

输出:worlds长度为:4
遍历所有元素为:
a
b
c
d

46.2.4 keys() 方法

  • Set 没有键。

  • keys() 返回与 values() 相同的结果。

  • 这使得 Set 与 Map 相兼容。

 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      var e = "e";
      const worlds = new Set(["a", "b", "c", "d"]);
      var values = worlds.keys(); //返回 [object Set Iterator]

      for (const x of values) {
        text += x + "<br>";
      }

      document.getElementById("demo").innerHTML =
        "worlds长度为:" + worlds.size + "<br>" + "遍历所有元素为:<br>" + text;
    </script>
  </body>

输出:worlds长度为:4
遍历所有元素为:
a
b
c
d

46.2.5 entries() 方法

  • Set 没有键(key)。

  • entries() 方法返回的是 [value,value] 值值对,而不是 [key,value] 键值对。

  • 这使得 Set 与 Map 兼容:

 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      var e = "e";
      const worlds = new Set(["a", "b", "c", "d"]);
      var values = worlds.entries(); //返回 [object Set Iterator]

      for (const x of values) {
        text += x + "<br>";
      }

      document.getElementById("demo").innerHTML =
        "worlds长度为:" + worlds.size + "<br>" + "遍历所有元素为:<br>" + text;
    </script>
  </body>

输出:
worlds长度为:4
遍历所有元素为:
a,a
b,b
c,c
d,d

47、JavaScript Map

  • Map 保存键值对,其中键可以是任何数据类型。

  • Map 会记住键的原始插入顺序。

  • Map 提供表示映射大小的属性。

  • Map 方法:

在这里插入图片描述

47.1 如何创建 Map

您可以通过以下方式创建 JavaScript 映射:

  • Map 是对象typeof 返回 objectinstanceof Map 返回 true
  • 将数组传递给 new Map()
  • 创建映射并使用 Map.set()
  • 获取 Map 中键的值Map.get()
  • 返回 Map 中元素的数量Map.size
  <body>
    <p id="demo"></p>
    <script>
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      //set() 方法将元素添加到Map中
      fruits.set("grapes", 600);

      //set() 方法还可用于更改现有的 Map 值:
      fruits.set("apple", 555);

      document.getElementById("demo").innerHTML =
        "fruits长度为:" +
        fruits.size +
        "<br>" +
        "apple对应的value值为:<br>" +
        fruits.get("apple");
    </script>
  </body>

输出:fruits长度为:4
apple对应的value值为:
555

  • 删除 Map 元素Map.delete()
<body>
    <p id="demo"></p>
    <script>
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      //删除Map元素:
      fruits.delete("apple");

      document.getElementById("demo").innerHTML =
        "fruits长度为:" +
        fruits.size +
        "<br>" +
        "apple对应的value值为:<br>" +
        fruits.get("apple");
    </script>
  </body>

输出:
fruits长度为:2
apple对应的value值为:
undefined

  • Map 中删除所有元素:
  <body>
    <p id="demo"></p>
    <script>
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      //删除Map所有元素:
      fruits.clear();

      document.getElementById("demo").innerHTML =
        "fruits长度为:" +
        fruits.size +
        "<br>" +
        "apple对应的value值为:<br>" +
        fruits.get("apple");
    </script>
  </body>

输出:
fruits长度为:0
apple对应的value值为:
undefined

  • 如果 Map 中存在键,则 has() 方法返回 true
<body>
    <p id="demo"></p>
    <script>
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      //如果 Map 中存在键,则 has() 方法返回 true:
      var isHas = fruits.has("apple");

      document.getElementById("demo").innerHTML =
        "fruits长度为:" +
        fruits.size +
        "<br>" +
        'Map中是否包含"apple":' +
        isHas;
    </script>
  </body>

输出:

fruits长度为:3
Map中是否包含"apple":true

  • Map 中的每个键/值对调用回调:Map.forEach()
 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      fruits.forEach(function (value, key) {
        text += key + "=" + value + "<br>";
      });

      document.getElementById("demo").innerHTML = text;
    </script>
  </body>

输出:

apple=500
orange=200
bananas=100

  • entries() 方法返回一个带有 Map[key,values] 的迭代器对象:
 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      for (const x of fruits.entries()) {
        text += x + "<br>";
      }

      document.getElementById("demo").innerHTML = text;
    </script>
  </body>

输出:apple,500
orange,200
bananas,100

  • keys() 方法返回一个迭代器对象,其中包含 Map 中的键:
<body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      for (const x of fruits.keys()) {
        text += x + "<br>";
      }

      document.getElementById("demo").innerHTML = text;
    </script>
  </body>

输出:
apple
orange
bananas

  • values() 方法返回一个迭代器对象,其中包含 Map 中的值:
 <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = new Map([
        ["apple", 500],
        ["orange", 200],
        ["bananas", 100],
      ]);

      for (const x of fruits.values()) {
        text += x + "<br>";
      }

      document.getElementById("demo").innerHTML = text;
    </script>
  </body>

输出:
500
200
100

48、JavaScript ES5 对象方法

ECMAScript 5 (2009) 向 JavaScript 添加了许多新的对象方法。

  • 管理对象:
// 以现有对象为原型创建对象
Object.create()

// 添加或更改对象属性
Object.defineProperty(object, property, descriptor)

// 添加或更改对象属性
Object.defineProperties(object, descriptors)

// 访问属性
Object.getOwnPropertyDescriptor(object, property)

// 以数组返回所有属性
Object.getOwnPropertyNames(object)

// 访问原型
Object.getPrototypeOf(object)

// 以数组返回可枚举属性
Object.keys(object)
  • 保护对象:
// 防止向对象添加属性
Object.preventExtensions(object)

// 如果属性可以添加到对象,则返回 true
Object.isExtensible(object)

// 防止更改对象属性(不是值)
Object.seal(object)

// 如果对象被密封,则返回 true
Object.isSealed(object)

// 防止对对象进行任何更改
Object.freeze(object)

// 如果对象被冻结,则返回 true
Object.isFrozen(object)

48.1 更改属性值


  <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = {
        firstName: "文",
        lastNast: "阿花",
        years: 24,
      };

      //更改属性值
      Object.defineProperty(fruits, "years", { value: 30 });

      document.getElementById("demo").innerHTML = fruits.years;
    </script>
  </body>

输出:30

48.2 更改元数据

ES5 允许更改以下属性元数据:

writable : true      // 属性值可更改
enumerable : true    // 属性可枚举
configurable : true  // 属性可重新配置
writable : false     // 属性值不可更改
enumerable : false   // 属性不可枚举
configurable : false // 属性不可重新配置

ES5 允许更改 getter 和 setter:

// 定义 getter
get: function() { return language }
// 定义 setter
set: function(value) { language = value }

此例设置 language 为只读:

Object.defineProperty(person, "language", {writable:false});

这个例子使 language 不可枚举:

Object.defineProperty(person, "language", {enumerable:false});

48.3 列出所有属性

<body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = {
        firstName: "文",
        lastNast: "阿花",
        years: 24,
      };

      //设置属性可枚举
      Object.defineProperty(fruits, "years", { enumerable: true });
      //列出所有属性
      document.getElementById("demo").innerHTML =
        Object.getOwnPropertyNames(fruits);
    </script>
  </body>

输出:firstName,lastNast,years

48.4 列出可枚举的属性


  <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = {
        firstName: "文",
        lastNast: "阿花",
        years: 24,
      };
      //更改属性为不可枚举
      Object.defineProperty(fruits, "years", { enumerable: false });

      //列出所有属性
      document.getElementById("demo").innerHTML = Object.keys(fruits);
    </script>
  </body>

输出:firstName,lastNast

48.5 添加属性

  • Object.defineProperty()

  <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = {
        firstName: "文",
        lastNast: "阿花",
        years: 24,
      };

      //添加属性
      Object.defineProperty(fruits, "language", {
        value: "Chinese",
        enumerable: true,
      });

      //列出所有属性
      document.getElementById("demo").innerHTML = Object.keys(fruits);
    </script>
  </body>

输出:firstName,lastNast,years,language

48.6 添加 Getter 和 Setter

  • Object.defineProperty() 方法也可以用来添加 GetterSetter
  <body>
    <p id="demo"></p>
    <script>
      var text = "";
      const fruits = {
        firstName: "文",
        lastNast: "阿花",
        years: 24,
      };

      //定义getter
      Object.defineProperty(fruits, "fullName", {
        get: function () {
          return this.firstName + this.lastNast;
        },
      });

      document.getElementById("demo").innerHTML = fruits.fullName;
    </script>
  </body>

输出:文阿花

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

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

相关文章

关于centos7自带的nginx1.20.1开启https后,XP系统的IE6和IE8无法显示网页的问题

CentOS7自带的nginx-1.20.1是支持HTTP/2和TLS1.3的。 软件包名称&#xff1a;nginx-1.20.1-10.el7.x86_64 CentOS7默认开启了HTTP/2&#xff0c;但没有开启TLS1.3&#xff0c;以及IE6和IE8的https访问。 开启方法&#xff1a; ssl_ciphers HIGH:!aNULL:!MD5;改为ssl_ciphers…

1-3分钟爆款视频素材在哪找啊?这9个热门爆款素材网站分享给你

在如今快节奏的时代&#xff0c;短视频已成为吸引观众注意力的黄金手段。然而&#xff0c;要制作出1-3分钟的爆款视频&#xff0c;除了创意和剪辑技巧外&#xff0c;选择合适的素材至关重要。那么&#xff0c;哪里可以找到那些能让你的视频脱颖而出的爆款素材呢&#xff1f;不用…

【UE5.1】Chaos物理系统基础——05 蓝图绑定Chaos破裂或碰撞事件

步骤 1. 新建一个父类为Actor的蓝图&#xff0c;这里命名为“BP_ChaosExplosionEvent” 打开“BP_ChaosExplosionEvent”&#xff0c;添加一个变量&#xff0c;这里命名为“GC”&#xff0c;变量类型为“几何体集actor”&#xff0c;设置为可编辑实例 在事件图表中添加如下节点…

ELK+Filebeat+Kafka+Zookeeper

本实验基于ELFK已经搭好的情况下 ELK日志分析 架构解析 第一层、数据采集层 数据采集层位于最左边的业务服务器集群上&#xff0c;在每个业务服务器上面安装了filebeat做日志收集&#xff0c;然后把采集到的原始日志发送到Kafkazookeeper集群上。第二层、消息队列层 原始日志发…

通过端口转发实现docker容器运行时端口更改

通过端口转发实现docker容器运行时端口更改 前言启动容器查看容器ip地址端口转发 前言 关于修改docker正在运行中容器端口&#xff0c;网上大部分分为3类: 1. 删除原有容器重新创建;2. 改配置文件;3. 在现有容器上新提交镜像&#xff0c;用新镜像起新的容器。 1和3属于同一种流…

Matlab手搓线性回归-非正规方程法

原理&#xff1a;wxb&#xff0c;x是输入&#xff0c;求得的结果与真实值y求均方误差。 采用链式法则求导 参数更新&#xff0c;梯度下降法&#xff08;批量梯度下降&#xff09; 随机生成数据&#xff1a; m100&#xff1b;生成100个数据&#xff0c;并添加随机噪声 clear; …

9、Python之文本解析:字符串格式化的逆操作?

引言 前面的文章中&#xff0c;提到了关于Python中字符串中的相关操作&#xff0c;更多地涉及到了字符串的格式化&#xff0c;有些地方也称为字符串插值操作&#xff0c;本质上&#xff0c;就是把多个字符串拼接在一起&#xff0c;以固定的格式呈现。 关于字符串的操作&#…

2021版本的idea热部署的详细步骤

背景&#xff1a;我是自己用的是2021版本的idea,然后发现跟2023版本的热部署不太一样&#xff0c;所以&#xff0c;今天自己出一期这样的文章吧&#xff01;&#xff01;&#xff01;其他人配置的时候根据自己的情况&#xff0c;来阅读吧&#xff01; 第一步&#xff1a;方式一…

光伏项目开发合作模式

光伏项目开发合作模式多种多样&#xff0c;根据应用场景的不同&#xff0c;主要分为户用光伏项目合作模式和工商业光伏项目合作模式。本文将分别介绍这两种模式的特点和常见形式&#xff0c;帮助大家更好地了解光伏项目开发的市场运作。 一、户用光伏项目合作模式 1.用户全款购…

科研训练课程——2024/7/8

科研训练课程——2024/7/8 文章目录 前言课程任务&#xff08;可跳过&#xff09;了解1. LetPub2. Web of Science 总结 前言 本系列笔记为记录大二暑期学校课程—— 科研训练与写作&#xff0c;记录一下每天了解了什么吧&#xff08;苦逼又无聊的学习生涯又开始了。才刚结束啊…

matlab仿真 信道(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第四章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; 1.加性高斯白噪声信道&#xff08;AWGN &#xff09; clear all t0:0.001:10; xsin(2*pi*t);%原始信号 snr20;%设定加性白噪…

基于flask的猫狗图像预测案例

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

遥感分类产品精度验证之TIF验证TIF

KKB_2020.tif KKB_2020_JRC.tif kkb.geojson 所用到的包&#xff1a;&#xff08;我嫌geopandas安装太麻烦colab做的。。 import rasterio import geopandas as gpd import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.metrics import c…

【Threejs进阶教程-着色器篇】3. Uniform的基本用法2与基本地球昼夜效果

Uniform的基本用法2 关于本Shader教程前两篇地址&#xff0c;请按顺序学习本篇使用到的资源用uniform传递纹理代码分析texture类型的uniform在shader中接收uniformtexture2D()处理图片压缩修改wrapS和wrapT 切换成夜景效果切换Mix() 昼夜切换升级改动代码效果分析解决球体分界线…

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具&#xff0c;通过此命令&#xff0c;你可以实现域名查询和域名问题的定位&#xff0c;对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说&#xff0c;它是一个非…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解&#xff1f; Attention机制是一种在处理时序相关问题的时候常用的技术&#xff0c;主要用于处理序列数据。 核心思想是在处理序列数据时&#xff0c;网络应该更关注输入中的重要部分&#xff0c;而忽略不重要的部分&…

YOLOv8改进 | 注意力机制| 引入多尺度分支来增强特征表征的注意力机制 【CVPR2021】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-5.其他话题分享

4.1 可用性威胁与解决方案 挑战1&#xff1a;BlockServer故障影响众多VD 问题描述&#xff1a;单个BlockServer的故障可能会影响到多个虚拟磁盘&#xff08;VDs&#xff09;的正常运作&#xff0c;这是由于传统架构中BlockServer承担了过多的职责&#xff0c;其稳定性直接关系…

Eyes Wide Shut Exploring the Visual Shortcomings of Multimodal LLMs

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs 近两年多模态大模型&#xff08;Multimodal LLM&#xff0c;MLLM&#xff09;取得了巨大的进展&#xff0c;能够基于图片与人类对话&#xff0c;展现出强大的识别甚至推理能力。然而&#xff0c;在某些…

字符串操作(CC++)

字符串操作 1. C语言基本使用字符串操作函数 2. C3. 对比 C语言和C在字符串操作上有很大的不同&#xff0c;这主要是因为C标准库提供了更强大、更易于使用的字符串类&#xff08;std::string&#xff09;&#xff0c;而C语言主要依赖字符数组和一系列标准库函数&#xff08;如s…