JavaScript 进阶 (二)

news2025/1/11 14:51:50

目录

深入对象

创建对象三种方式

构造函数

实例成员&静态成员

内置构造函数

Object

Array

String

Number


深入对象

创建对象三种方式

1. 利用对象字面量创建对象
const obj = { name : 'abc'}
2. 利用 new Object 创建对象
const obj = new Object({ uname: '123' })
3. 利用构造函数创建对象

构造函数

是一种特殊的函数,主要用来初始化对象

1. 它们的命名以大写字母开头。
2. 它们只能由 "new" 操作符来执行。
 // 创建一个猪 构造函数 
    function Pig(uname, age) {
      this.uname = uname
      this.age = age
    }

 const p = new Pig('张三', 6)
    console.log(p)

总结:

  1. 使用 new 关键字调用函数的行为被称为实例化
  2. 实例化构造函数时没有参数时可以省略 ()
  3. 构造函数的返回值即为新创建的对象
  4. 构造函数内部的 return 返回的值无效!
实例化执行过程
  1.  创建新空对象
  2.  构造函数this指向新对象
  3. 执行构造函数代码,修改this,添加新的属性
  4.  返回新对象

实例成员&静态成员

实例成员:
通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员。

总结:

  1. 构造函数内部 this 实际上就是实例对象,为其动态添加的属性和方法即为实例成员
  2. 为构造函数传入参数,动态创建结构相同但值不同的对象

注:构造函数创建的实例对象彼此独立互不影响。

静态成员:
在 JavaScript 中底层函数本质上也是对象类型,因此允许直接为函数动态添加属性或方法,构造函数的属性和方法被称为静态成员

总结:

  1. 静态成员指的是添加到构造函数本身的属性和方法
  2. 一般公共特征的属性或方法静态成员设置为静态成员
  3. 静态成员方法中的 this 指向构造函数本身

内置构造函数

在 JavaScript 中 最主要 的数据类型有 6 种:
基本数据类型:    字符串、数值、布尔、undefined、null
引用类型:       对象
其实字符串、数值、布尔、等基本类型也都有专门的构造函数,这些我们称为包装类型。
引用类型
  Object,Array,RegExp,Date 等
包装类型
  String,Number,Boolean 等

Object

Object 是内置的构造函数,用于创建普通对象。

推荐使用字面量方式声明对象,而不是 Object 构造函数
学习三个常用静态方法(静态方法就是只有构造函数Object可以调用的)
作用:
           Object.keys 静态方法获取对象中所有属性(键) 返回的是一个数组
           Object.values 静态方法获取对象中所有属性值    返回的是一个数组
     
           Object. assign 静态方法常用于对象拷贝   经常使用的场景给对象添加属性
语法:
const o = { uname: '张三', age: 18 }
    // 1.获得所有的属性名
    console.log(Object.keys(o))  //返回数组['uname', 'age']
    // 2. 获得所有的属性值
    console.log(Object.values(o)) 
    // 3. 对象的拷贝
    // const oo = {}
    // Object.assign(oo, o)
    Object.assign(o, { gender: '女' })
    console.log(o)

总结:

  1. 推荐使用字面量方式声明对象,而不是 Object 构造函数
  2. Object.assign 静态方法创建新的对象
  3. Object.keys 静态方法获取对象中所有属性
  4. Object.values 表态方法获取对象中所有属性值

Array

Array 是内置的构造函数,用于创建数组

 作用:reduce 返回函数累计处理的结果,经常用于求和等

arr.reduce(function(累计值, 当前元素){}, 起始值)

起始值可以省略,如果写就作为第一次累计的起始值

const re = arr.reduce((prev, item) => prev + item)

1. 如果有起始值,则以起始值为准开始累计, 累计值 = 起始值
2. 如果没有起始值, 则累计值以数组的第一个数组元素作为起始值开始累计
3. 后面每次遍历就会用后面的数组元素 累计到 累计值 里面 (类似求和里面的 sum )
2、数组常见方法- 伪数组转换为真数组
静态方法 Array.from()
//  Array.from(lis) 把伪数组转换为真数组
    const lis = document.querySelectorAll('ul li')
    // console.log(lis)
    // lis.pop() 报错
    const liss = Array.from(lis)
    liss.pop()
    console.log(liss)

总结:

  1. 推荐使用字面量方式声明数组,而不是 Array 构造函数

  2. 实例方法 forEach 用于遍历数组,替代 for 循环 (重点)

  3. 实例方法 filter 过滤数组单元值,生成新数组(重点)

  4. 实例方法 map 迭代原数组,生成新数组(重点)

  5. 实例方法 join 数组元素拼接为字符串,返回字符串(重点)

  6. 实例方法 find 查找元素, 返回符合测试条件的第一个数组元素值,如果没有符合条件的则返回 undefined(重点)  与filter的区别是一个返回 是数组 一个是对象         

  7. 实例方法every 检测数组所有元素是否都符合指定条件,如果所有元素都通过检测返回 true,否则返回 false(重点)

  8. 实例方法some 检测数组中的元素是否满足指定条件 如果数组中有元素满足条件返回 true,否则返回 false

  9. 实例方法 concat 合并两个数组,返回生成新数组

  10. 实例方法 sort 对原数组单元值排序

  11. 实例方法 splice 删除或替换原数组单元

  12. 实例方法 reverse 反转数组

  13. 实例方法 findIndex 查找元素的索引值

String

String 是内置的构造函数,用于创建字符串。

//1. split 把字符串 转换为 数组  和 join() 相反
    // const str = 'pink,red'
    // const arr = str.split(',')
    // console.log(arr)


// 2. 字符串的截取   substring(开始的索引号[, 结束的索引号])
    // 2.1 如果省略 结束的索引号,默认取到最后
    // 2.2 结束的索引号不包含想要截取的部分


// 3. startsWith(检测字符串[, 检测位置索引号]) 检测是否以某字符开头(重点)



 // 4. 实例方法 includes(搜索的字符串[, 检测位置索引号]) 判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false(重点)

总结:

  1. 实例属性 length 用来获取字符串的度长(重点)
  2. 实例方法 split('分隔符') 用来将字符串拆分成数组(重点)   、join() 相反
  3. 实例方法 substring(需要截取的第一个字符的索引[,结束的索引号]) 用于字符串截取(重点)
  4. 实例方法 startsWith(检测字符串[, 检测位置索引号]) 检测是否以某字符开头(重点)
  5. 实例方法 includes(搜索的字符串[, 检测位置索引号]) 判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false(重点)
  6. 实例方法 toUpperCase 用于将字母转换成大写
  7. 实例方法 toLowerCase 用于将就转换成小写
  8. 实例方法 indexOf 检测是否包含某字符
  9. 实例方法 endsWith 检测是否以某字符结尾
  10. 实例方法 replace 用于替换字符串,支持正则匹配
  11. 实例方法 match 用于查找字符串,支持正则匹配

注:String 也可以当做普通函数使用,这时它的作用是强制转换成字符串数据类型。

Number

Number 是内置的构造函数,用于创建数值
常用方法:
toFixed() 设置保留小数位的长度
<script>
    // toFixed 方法可以让数字指定保留的小数位数
    const num = 10.923
    // console.log(num.toFixed())
    console.log(num.toFixed(1))
    const num1 = 10
    console.log(num1.toFixed(2))
  </script>

购物车渲染综合案例

document.querySelector('.list').innerHTML = goodsList.map(item =>{
      const {picture,name,count,price,spec,gift} = item
      const text = Object.values(spec).join('/')

      const subTotal = ((price * 100 * count) / 100).toFixed(2)

      //判断是是否有
      const str = gift ? gift.split(',').map(item => `<span class="tag">【赠品】${item}</span>`).join('') : ''


      return `<div class="item">
      <img src="${picture}" alt="">
      <p class="name">${name}  ${str}</p>
      <p class="spec">${text}</p>
      <p class="price">${price.toFixed(2)}</p>
      <p class="count">x${count}</p>
      <p class="sub-total">${subTotal}</p>
    </div>`
    }).join('')

    const total = goodsList.reduce((prev,item) => prev + (item.price * 100 * item.count) / 100 ,0)
    
    document.querySelector('.amount').innerHTML = total.toFixed(2)

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

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

相关文章

如何评估一个好的物业系统开发方案?

在当前不断变化的物业管理市场中&#xff0c;物业系统已成为物业管理公司提高管理效率和降低成本的必然选择。因此&#xff0c;如何评估一个好的物业系统开发方案成为了每个物业管理决策者必须面对的重要问题。在本文中&#xff0c;我们将介绍如何从以下几个方面来评估一个好的…

文心一言 VS 讯飞星火 VS chatgpt (24)-- 算法导论4.2 6题

六、用Strassen 算法作为子进程来进行一个 knn 矩阵和一个nkn 矩阵相乘&#xff0c;最快需要花费多长时间?对两个输入矩阵规模互换的情况&#xff0c;回答相同的问题。 文心一言&#xff1a; Strassen 算法是一种用于矩阵乘法的分治算法&#xff0c;它将原始的矩阵分解为较小…

腾讯云产品首单特惠是什么意思?包括新用户老用户的解答

腾讯云最近推出的活动限制条件为产品首单特惠&#xff0c;但是有的用户购买不了&#xff0c;右上角提示“产品首单特惠”&#xff0c;那么什么是产品首单特惠&#xff1f;什么是新用户&#xff1f;什么是老用户&#xff1f;新手站长给大家&#xff1a; 腾讯云产品首单特惠是什…

【Linux】Pinctrl子系统简介

前言&#xff1a; 我们工作开发中非常常用的就是GPIO&#xff0c;在Linux开发中&#xff0c;是有必要去熟悉并理解的。在Linux内核中也有提供相应的子系统pinctrl子系统&#xff0c;本文从大的面上去了解它。 参考学习&#xff1a;Linux笔记老师课程&#xff08;Pinctrl子系统&…

CentOS 7.6 (Linux)环境上离线安装 MySQL 8

1 下载安装包 访问https://dev.mysql.com将网页划到最下面&#xff0c;点击下载MySQL社区安装包 按照如下图片框选的进行下载 2 解压上传 下载完了之后使用WinRAR软件在Windows电脑上解压&#xff0c;选择如下包使用ftp工具上传至Linux机器最大目录下。 3 安装前检查 …

DCGAN-MNIST——使用TensorFlow 2 / Keras实现深度卷积DCGAN来生成时尚MNIST的灰度图像

DCGAN-MNIST——使用TensorFlow 2 / Keras实现深度卷积DCGAN来生成时尚MNIST的灰度图像 1. 效果图2. 原理2.1 结构指南2.2 模型结构及训练过程 3. 源码参考 这篇博客将介绍如何使用TensorFlow 2 / Keras中实现深度卷积GAN&#xff08;DCGAN&#xff09;来生成类似时尚MNIST的灰…

魔法反射--java反射进阶(实战篇)

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 魔法反射–java反射进阶(实战篇) 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649;&#x1f649;…

openpose原理及安装教程(姿态识别)

OpenPose是一个基于深度学习的人体姿态估计框架,可以实时地估计人体的关键点,包括身体和手部姿势。它是由卡内基梅隆大学的研究团队开发的,已经成为了人体姿态估计领域的一个重要项目。 OpenPose的原理是基于卷积神经网络(CNN),通过对图像进行深度学习处理,可以检测出…

如何在华为OD机试中获得满分?Java实现【寻找峰值】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

Aerial Vision-and-Dialog Navigation阅读报告

Aerial Vision-and-Dialog Navigation 本次报告&#xff0c;包含以下部分&#xff1a;1摘要&#xff0c;2数据集/模拟器&#xff0c;3AVDN任务&#xff0c;4模型&#xff0c;5实验结果。重点介绍第2/3部分相关主页&#xff1a;Aerial Vision-and-Dialog Navigation (google.com…

【章节2】husky + 自动检测是否有未解决的冲突 + 预检查debugger + 自动检查是否符合commit规范

在章节1中我们学习到了commit的规范、husky的安装和使用、lint-staged怎么安装以及怎么用来格式化代码。那么这篇文章我们来看看commit预处理中我们还能做哪些处理呢&#xff1f; 自然&#xff0c;我们还是要用到husky这个东西的&#xff0c;大致过程其实和章节1异曲同工&#…

不要再来问我小学、初中毕业想出去学习编程找到工作的问题了,你要做就去做,结果自己扛着就行了!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

探索Java面向对象编程的奇妙世界(五)

⭐ Object 类⭐ toString 方法⭐ 和 equals 方法⭐ super 关键字⭐ 继承树追溯⭐ 封装(encapsulation) ⭐ Object 类 Object 类基本特性 &#x1f41f; Object 类是所有类的父类&#xff0c;所有的 Java 对象都拥有 Object 类的属性和方法。 &#x1f41f; 如果在类的声明中未…

docker-compose方式安装运行Jenkins

docker-compose方式安装运行Jenkins 服务器系统&#xff1a;centos 7.6 以docker-compose 编排容器方式安装&#xff0c;当然需提前安装docker-compose环境&#xff08;见百度->docker-compose环境安装&#xff09; docker-compose.yml version: 3.1 services:jenkins:i…

WF攻击(网站指纹攻击)

网站指纹&#xff08;WF&#xff09;攻击是被动的本地攻击者通过比较用户发送和接收的数据包序列与先前记录的数据集来确定加密互联网流量的目的地。可以通过网络流量中的模式来识别Tor用户访问过的页面。因此&#xff0c;WF攻击是Tor等隐私增强技术特别关注的题。 攻击过程 该…

分布式网络通信框架(九)——RpcChannel调用过程

介绍 客户端使用RpcChannel对象来构造UserServiceRpc_Stub对象&#xff0c;并利用该对象中RpcChannel::CallMethod来进行rpc调用请求,RpcChannel完成的工作是如下rpc调用流程图的红圈部分&#xff1a; 客户端使用mprpc框架的业务代码 // calluserservice.cc #include <ios…

【算法题解】31. 翻转二叉树的递归解法

这是一道 简单 题 https://leetcode.cn/problems/invert-binary-tree/ 题目 给你一棵二叉树的根节点 r o o t root root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6…

Vivado综合属性系列之十二 BLACK_BOX

目录 一、前言 二、BLACK_BOX ​2.1 属性说明 ​2.2 工程代码 ​2.3 结果 一、前言 ​在调试中&#xff0c;有时不需要知道一个模块或实例的具体实现&#xff0c;或者需要使其对外属于不可见&#xff0c;只知道它的输入输出&#xff0c;即像一个黑盒&#xff0c;此时可以对模…

Linux内核源码分析 1:Linux内核体系架构和学习路线

好久没有动笔写文章了&#xff0c;这段时间经历了蛮多事情的。这段时间自己写了一两个基于不同指令集的Linux内核&#xff0c;x86和RISC-V。期间也去做了一些嵌入式相关的工作&#xff0c;研究了一下ARM指令集架构。 虽然今年九月份我就要申请了&#xff0c;具体申请AI方向还是…

【使用ChatGPT制作视频】

内容目录 一、利用ChatGPT生成视频文案1. 打开ChatGPT&#xff1a;2. 输入需求&#xff1a;3. 复制&#xff1a; 二、制作生成思维导图1. 打开视频制作网站&#xff1a;2. 网页版下侧 - 一键成片 -粘贴Markdown内容&#xff0c;就会自动生成视频&#xff0c;这里放了其中一段&a…