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

【JavaScript进阶】构造函数数据常用函数

目录

本章节用到的所有素材都可以找到:素材自取~~~~

1、深入对象

1.1创建对象三种方式

1.2 构造函数

练习    利用构造函数创建多个对象

实例化执行过程

1.3实例成员&静态成员

2. 内置构造函数

2.1 Object

2.2 Array

练习   员工涨薪计算成本

2.3 String

练习   请完成以下需求

2.4 Number

综合案例   购物车展示

总结一下~本章节对我有很大收获,希望对你也是!!!!


本章节用到的所有素材都可以找到:素材自取~~~~

1、深入对象

1.1创建对象三种方式

目标:了解创建对象有三种方式
1. 利用对象字面量创建对象
    const obj = {uname: 'lyh'}console.log(obj)
2. 利用 new Object 创建对象
    const obj = new Object({ uname: 'lyh' })console.log(obj)
3. 利用构造函数创建对象

1.2 构造函数

构造函数在技术上是常规函数。
不过有两个约定:
1. 它们的命名以大写字母开头。
2. 它们只能由 "new" 操作符来执行。

说明:
1. 使用 new 关键字调用函数的行为被称为 实例化
2. 实例化构造函数时没有参数时可以省略 ()
3. 构造函数内部无需写return,返回值即为新创建的对象
4. 构造函数内部的 return 返回的值无效,所以不要写return
5. new Object() new Date() 也是实例化构造函数
6.箭头函数不能用作构造函数 箭头函数没有自己的 this

练习    利用构造函数创建多个对象

需求:
①:写一个Goods构造函数
②:里面包含属性 name 商品名称 price 价格 count 库存数量
③:实例化多个商品对象,并打印到控制台,例如
小米 1999 20
华为 3999 59
vivo 1888 100
    function Goods(name, price, count) {this.name = namethis.price = pricethis.count = count}const xm = new Goods('小米', 1999, 20)const hw = new Goods('华为', 3999, 59)const vo = new Goods('vivo', 1888, 100)console.log(xm)console.log(hw)console.log(vo)

实例化执行过程

说明:
1. 创建新对象
2. 构造函数this指向新对象
3. 执行构造函数代码,修改this,添加新的属性
4. 返回新对象

1.3实例成员&静态成员

实例成员:
通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员。
说明:
1. 实例对象的属性和方法即为实例成员
2. 为构造函数传入参数,动态创建结构相同但值不同的对象
3. 构造函数创建的实例对象彼此独立互不影响。
静态成员:
构造函数的属性和方法被称为静态成员
说明:
1. 构造函数的属性和方法被称为静态成员
2. 一般公共特征的属性或方法静态成员设置为静态成员
3. 静态成员方法中的 this 指向构造函数本身

总结:

1. 什么是实例成员?
        实例对象的属性和方法即为实例成员
        实例对象相互独立,实例成员当前实例对象使用
2. 什么是静态成员?
        构造函数的属性和方法被称为静态成员
        静态成员只能构造函数访问

2. 内置构造函数

在 JavaScript 中 最主要 的数据类型有 6 种:
基本数据类型:
     字符串、数值、布尔、undefined、null
引用类型:
     对象
但是,我们会发现有些特殊情况:

其实字符串、数值、布尔、等基本类型也都有专门的构造函数,这些我们称为包装类型。
JS中几乎所有的数据都可以基于构成函数创建。

引用类型
        Object,Array,RegExp,Date 等
包装类型
        String,Number,Boolean 等

2.1 Object

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

推荐使用字面量方式声明对象,而不是 Object 构造函数

学习三个常用静态方法(静态方法就是只有构造函数Object可以调用的)

以前都是i通过for in 来进行遍历,现在有新方法啦~~~~

作用: Object.keys 静态方法获取对象中所有属性(键)

2.2 Array

1. 数组常见实例方法-核心方法  
通过图片能够很好的理解关于各个函数的功能作用

作用: reduce 返回函数累计处理的结果,经常用于求和等
    // 数组reduce方法// arr.reduce(function(上一次值,当前值){},初始值)const arr = [1, 5, 8]// 1.没有初始值const total = arr.reduce(function (prev, current) {return prev + current})console.log(total) //14// 2. 有初始值const total = arr.reduce(function (prev, current) {return prev + current}, 10)console.log(total) //24// 3.箭头函数const total = arr.reduce((prev, current) => prev + current, 10)console.log(total) //24
累计值参数:
1. 如果有起始值,则以起始值为准开始累计, 累计值 = 起始值
2. 如果没有起始值, 则累计值以数组的第一个数组元素作为起始值开始累计
3. 后面每次遍历就会用后面的数组元素 累计到 累计值 里面 (类似求和里面的 sum )

总结:

练习   员工涨薪计算成本

需求:
①:给员工每人涨薪 30%
②:然后计算需要支出的费用
数据:
    const arr = [{name: '张三',salary: 10000},{name: '李四',salary: 10000},{name: '王五',salary: 10000},]

    const arr = [{name: '张三',salary: 10000},{name: '李四',salary: 10000},{name: '王五',salary: 10000},]// 这里reduce,第二个参数必须加0 如果不加0 默认是数组的第一个元素,但是第一个元素是对象,不是我们要的值const total = arr.reduce((prev, currten) => prev + currten.salary, 0) * 1.3console.log(total)

2. 数组常见方法-其他方法

    // 1. find查找const arr = [{name: '小米',price: 1999},{name: '华为',price: 3999},]//找小米 这个对象 并且返回这个对象const ret = arr.find(function (item) {// console.log(item)// console.log(item.name)return item.name === '小米'})console.log(ret.price)// 2. every 每一个是否都符合条件 如果都符合返回true 否则返回falseconst arr1 = [10, 20, 30]const flag = arr1.every(item => item >= 20)console.log(flag)

 

练习    请完成以下需求
const spec = { size: '40cm*40cm' , color: '黑色'}
请将里面的值写到div标签里面,展示内容如下

    const spec = { size: '40cm*40cm', color: '黑色' }// 1. 所有的属性值回去过来// console.log(Object.values(spec))// 2. 转换为字符串 join('/')console.log(Object.values(spec).join('/'))document.querySelector('div').innerHTML = Object.values(spec).join('/') 
2. 数组常见方法 - 伪数组转换为真数组
静态方法 Array.from()
  <ul><li>1</li><li>2</li><li>3</li></ul><script>const lis = document.querySelectorAll('ul li')// console.log(lis)// lis.pop() // lis是个伪数组,不能对它进行pop()const liss = Array.from(lis)// liss.pop()console.log(liss)

2.3 String

1. 常见实例方法

    // 1. split 把字符串 转换为数组 和 join()相反const str = 'pink,red'const arr = str.split(',')console.log(arr)const str1 = '2022-4-8'const arr1 = str1.split('-')console.log(arr1)// 2. 字符串的截取 substring(开始的索引号,结束的索引号)// 2.1 如果省略 结束的索引号,就默认到最后的索引const str = '今天又要开始做核酸了'console.log(str.substring(2))// 3. startsWith 判断是不是以某个字符开头const str = 'pink老师上课中'console.log(str.startsWith('pink')) //true// 4.includes 判断某个字符是不是包含在一个字符串里面const str = '我是lyh哈哈哈'console.log(str.includes('lyh')) //true

练习   请完成以下需求

请将下面字符串渲染到准备好的 p标签内部,结构必须如左下图所示,展示效果如右图所示:
const gift = '50g茶叶,清洗球'

思路:
①:把字符串拆分为数组,这样两个赠品就拆分开了 用那个方法? split(',')
②:利用 map 遍历数组,同时把数组元素生成到span里面,并且返回
③:因为返回的是数组,所以需要 转换为字符串, 用那个方法? join('')
④:p的innerHTML 存放刚才的返回值
    const gift = '50g的茶叶,清洗球'// 1. 把字符串拆分成数组console.log(gift.split(','))// 2. 根据数组元素的个数,生成 对应span标签const str = gift.split(',').map(item => `<span>【赠品】${item}</span><br>`).join('')document.querySelector('div').innerHTML = str

2.4 Number

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

综合案例   购物车展示

需求:
根据后台提供的数据,渲染购物车页面

今天的综合案例真的还是比较简单,建议先手敲,就跟上面两个小案例一模一样,相信是完全可以自己写出来的!!!

分析业务模块:
①:把整体的结构直接生成然后渲染到大盒子.list 里面
②:那个方法可以遍历的同时还有返回值 map 方法
③:最后计算总价模块,那个方法可以求和? reduce 方法
①:先利用map来遍历,有多少条数据,渲染多少相同商品
②:里面更换各种数据,注意使用对象解构赋值
③:利用reduce计算总价
①:先利用map来遍历,有多少条数据,渲染多少相同商品
- 可以先写死的数据
- 注意map返回值是 数组,我们需要用 join 转换为字符串
- 把返回的字符串 赋值 给 list 大盒子的 innerHTML
②:更换数据
- 先更换不需要处理的数据,图片,商品名称,单价,数量
- 采取对象解构的方式
- 注意 单价要保留2位小数, 489.00 toFixed(2)

- 获取 每个对象里面的 spec , 上面对象解构添加 spec
- 获得所有属性值是: Object.values() 返回的是数组
- 拼接数组是 join(‘’) 这样就可以转换为字符串了
注意要判断是否有gif属性,没有的话不需要渲染
利用变成的字符串然后写到 p.name里面
更换数据 - 处理 小计 模块
- 小计 = 单价 * 数量
- 小计名可以为: subTotal = price * count
- 注意保留2位小数
关于小数的计算精度问题:
0.1 + 0.2 = ?
解决方案: 我们经常转换为整数
(0.1*100 + 0.2*100)/ 100 === 0.3
这里是给大家拓展思路和处理方案
③:计算 合计 模块
- 求和用到数组 reduce 方法 累计器
- 根据数据里面的数量和单价累加和即可
- 注意 reduce方法有2个参数,第一个是回调函数,第二个是 初始值,这里写 0
    let str = '', cou = 0goodsList.map(item => {// console.log(item)const { id, name, price, picture, count, spec, gift } = item// console.log(id)// console.log(spec)// 生成一个数组// const strSpec = Object.values(spec).join('/')// const arr = String(gift).split(',').map(item => `【赠品】${item}<br>`).join('')// console.log(arr)str += `<div class="item"><img src="${picture}" alt=""><p class="name">${name} <span class="tag">${gift ? String(gift).split(',').map(item => `【赠品】${item}<br>`).join('') : ''}</span></p><p class="spec">${Object.values(spec).join('/')}</p><p class="price">${price}</p><p class="count">${count}</p><p class="sub-total">${(count * price).toFixed(2)}</p></div>`cou += count * price// console.log(typeof cou)})// console.log(str)document.querySelector('.list').innerHTML = strdocument.querySelector('.amount').innerHTML = cou.toFixed(2)

就只是简单的获取goodsList内的数据 然后添加到str内直接渲染到list上,跟昨天的综合案例大差不差~~~~

总结一下~本章节对我有很大收获,希望对你也是!!!!

相关文章:

【JavaScript进阶】构造函数数据常用函数

目录 本章节用到的所有素材都可以找到&#xff1a;素材自取~~~~ 1、深入对象 1.1创建对象三种方式 1.2 构造函数 练习 利用构造函数创建多个对象 实例化执行过程 1.3实例成员&静态成员 2. 内置构造函数 2.1 Object 2.2 Array 练习 员工涨薪计算成本 2.3 St…...

在PiscTrace开发者版上直接处理图像色阶分布

在图像处理和计算机视觉中&#xff0c;色阶分布&#xff08;或称灰度分布&#xff09;是描述图像中像素强度分布的一个重要概念。它对于理解图像的亮度、对比度、纹理和细节等方面具有关键作用。通过色阶分布的分析&#xff0c;我们能够获得图像的整体信息&#xff0c;从而帮助…...

趣味数学300题1981版-十五个正方形

分析&#xff1a;移动两根变成11个正方形很简单&#xff1a; 移动4根变成15个正方形&#xff0c;分析&#xff1a; 一个田字格包含5个正方形&#xff0c;若要15个正方形需要3个田字格&#xff0c;如果3个田字格完全不重合&#xff0c;需要6*318根火柴。如果合并正方形的边&…...

Selenium实战案例1:论文pdf自动下载

在上一篇文章中&#xff0c;我们介绍了Selenium的基础用法和一些常见技巧。今天&#xff0c;我们将通过中国科学&#xff1a;信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学&#xff1a;信息科学当期目录论文下载 1.网页内…...

前端面试-JavaScript 数据类型检测全解

目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测&#xff08;兼容旧浏览器&#xff09; 五、常见面试陷阱 六、最佳实践指南 七、扩…...

nginx 反向代理 配置请求路由

nginx | 反向代理 | 配置请求路由 nginx简介 Nginx&#xff08;发音为“Engine-X”&#xff09;是一款高性能、开源的 Web 服务器和反向代理服务器&#xff0c;同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔西索夫&#xff08;Igor Sysoev&#xff09;于 2004…...

用户中心项目教程(十)---注册里面的重定向排查和相关的修改

文章目录 1.注册逻辑的设计和实现2.解决自带的这个重定向的问题3.增加属性的相关操作4.关于如何修改页面上面的绿色按钮 1.注册逻辑的设计和实现 上次说到了的是登录功能&#xff0c;我们使用数据库里面存在的这个存在的账户和密码进行登录&#xff0c;但是是无法进行跳转的&a…...

根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目

0.研究背景 在实际的开发中可能会遇到这样的问题&#xff0c;老板让你把音频中的每个讲话人的声音分离成不同的音频片段。你可以使用au等专业的音频处理软件手动分离。但是这样效率太慢了&#xff0c;现在ai这么发达&#xff0c;我们能否借助ai之力来分离一条音频中的不同的说…...

【单片机】【UDS】 (单帧与多帧) 数据传输

对于使用 CAN 的诊断通信系统&#xff0c;每个单帧 (SF)、 第一帧 (FF)、 连续帧 (CF) 或流控 制帧 (FC) 有 8 字节数据场&#xff1b;其中单帧的 CAN_DL≤8 且第一帧的 FF_DL≤4095&#xff1b;下表 中已定义 每个报文的类型。 CAN FD 帧的数据场支持最大 64 个字节&#xff0…...

WebXR教学 02 配置开发环境

默认操作系统为Windows 1.VS Code VS Code 是一款轻量级、功能强大的代码编辑器&#xff0c;适用于多种编程语言。 下载 步骤 1&#xff1a;访问 VS Code 官方网站 打开浏览器&#xff08;如 Chrome、Edge 等&#xff09;。 在地址栏输入以下网址&#xff1a; https://code.v…...

MySql数据库运维学习笔记

数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL&#xff08;结构化查询语言&#xff09;中的四个重要类别&#xff0c;它们分别用于不同类型的数据库操作&#xff0c;下面为你简单明了地解释这四类语句&#xff1a; 1. DQL&#xff08;数据查询语言&#xff0c;Data Query Langu…...

网络协议相关问题

1. HTTP 与 HTTPS 的区别 HTTP&#xff1a;明文传输&#xff0c;端口80&#xff0c;无加密&#xff0c;易被窃听或篡改。HTTPS&#xff1a;SSL/TLS加密传输&#xff0c;端口443&#xff0c;通过数字证书验证身份&#xff0c;防止中间人攻击。 混合加密&#xff1a;非对称加密交…...

宇树科技13家核心零部件供应商梳理!

2025年2月6日&#xff0c;摩根士丹利&#xff08;Morgan Stanley&#xff09;发布最新人形机器人研报&#xff1a;Humanoid 100: Mapping the Humanoid Robot Value Chain&#xff08;人形机器人100&#xff1a;全球人形机器人产业链梳理&#xff09;。 Humanoid 100清单清单中…...

Windows 启动 SSH 服务报错 1067

Windows 启动 SSH 服务报错 1067 一、原本安装的 Windows 自带的 SSH 服务 按 Windows 键 -> 设置 -> 系统 -> 可选功能 在 添加的功能 查看是否安装了 OpenSSH 服务 一开始 执行 net start sshd 是可以正常启动的 并且其他机器也可以通过 ssh 访问 这个电脑 但是有…...

kkFileView报错no office manager available

背景 部署环境:虚机Linux系统 发生问题的版本:4.1.0-SNAPSHOT 现象:有的docx文件可以预览,有的不可以。不可以的就怎么打开都不可以(不管你是躺着,站着,坐着,睡着,趴着都不行,哈哈) 报错内容 贴出主要的报错内容步骤: > no office manager available > tr…...

ARMS 助力假面科技研发运维提效,保障极致游戏体验

客户介绍与项目背景 假面科技成立于 2014 年&#xff0c;致力于打造创新的数字产品&#xff0c;火爆一时的“狼人杀”、“谁是卧底”、“足记相机”都是假面科技旗下产品&#xff0c;公司产品总数超过 40 款&#xff0c;覆盖用户数超过 2 亿人。 随着业务的持续发展&#xff…...

趣味数学300题1981版-八个等式、五个5等于24

八个等式 分析&#xff1a;此问题的求解思路是按照最后一步运算的运算符号进行分类。示例中最后一步的运算是除法&#xff0c;只要被除数与除数相等且不为0&#xff0c;就可以得到结果1.因此我们还可以对于结果等于1的情况列出其他的算式。如果保持最后一步运算为除法运算&…...

关闭超时订单和七天自动确认收货+RabbitMQ规范

关闭超时订单 创建订单之后的一段时间内未完成支付而关闭订单的操作&#xff0c;该功能一般要求每笔订单的超时时间是一致的 TTL&#xff08;Time To Live&#xff09;存活时间&#xff0c;只能被设置为某个固定的值&#xff0c;不能更改&#xff0c;否则抛出异常 死信&#…...

DDD领域驱动开发第2讲:领域驱动开发在货代订单业务的实践

领域驱动开发在货代订单业务的实践 本文是DDD领域驱动开发第2讲,先讲解当前业务存在哪些问题,什么是DDD,为啥需要使用DDD解决现有业务问题,DDD让技术主动理解业务,通过领域模型将可以描述各个业务领域之间的关系,最后讲解领域驱动开发在货代订单的实践。 文章目录 领域驱…...

【Qt学习】| 如何使用QVariant存储自定义类型

QVariant是Qt框架中的一个通用数据类型&#xff0c;可以存储多种类型的数据&#xff0c;主要作用是提供一种类型安全的方式来存储和传递不同类型的数据&#xff0c;而不需要显示地指定数据类型。 QVariant提供了诸多构造函数可以非常方便地对基础数据类型&#xff08;如&#x…...

分割 学习笔记cvpr2024

目录 LiteMedSam 模型37m LightM-Unet 500 str 依赖项: MLWnet 73 star memsam 340M 126 star LiteMedSam 模型37m https://github.com/bowang-lab/MedSAM/blob/LiteMedSAM/README.md LightM-Unet 500 str https://github.com/MrBlankness/LightM-UNet/blob model = Li…...

【多模态处理篇一】【 深度解析DeepSeek图文匹配:CLIP模型迁移实战——从原理到落地的保姆级教程】

引言:当CLIP遇到DeepSeek,会发生什么化学反应? 如果说CLIP是OpenAI为多模态领域投下的"原子弹",那DeepSeek的迁移实战方案就是给这颗原子弹装上了精确制导系统。这个组合能让你用一张猫咪表情包搜到全网同类梗图,还能让电商平台自动生成百万级商品描述,甚至帮…...

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后&#xff0c;用户可以回复评论, 回复的评论可以被再次回复, …...

1.vue使用vite构建初始化项目

npm create vuelatest❯ npm create vuelatest> npx > create-vueVue.js - The Progressive JavaScript Framework✔ Project name: … vue3_test ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router for Single Page Application dev…...

在PyCharm中运行Jupyter Notebook的.ipynb文件及其pycharm软件的基础使用

&#xff08;注意需使用PyCharm专业版&#xff0c;学生、教师可以申请免费使用&#xff1a;https://www.jetbrains.com/shop/eform/students&#xff09; 1. pycharm2024版汉化 https://blog.csdn.net/m0_74103046/article/details/144560999 2. pycharm中的python控制台和J…...

深度体验通义灵码2.0 AI 程序员

通义灵码2.0 作为一名开发者&#xff0c;我去年就使用过1.0&#xff0c;近期有幸体验了 2.0&#xff0c;这是一款集成了 Deepseek 大模型的智能编码助手。在这次体验中&#xff0c;我深入探索了新功能开发、跨语言编程、单元测试自动生成、图生代码等多个场景&#xff0c;深刻…...

Coroutine协程

cooperation 协作 routine 程序&#xff0c;常规 协程核心&#xff1a;函数能够被挂起suspend,当然也能被回复resume 内置函数&#xff1a;also 返回对象本身 扩展&#xff1a; 内置函数let、also、with、run、apply大大提高你的开发效率&#xff01; 协程的作用&#xff1a;…...

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库...

Windows安装MySQL指南

1.下载 下载地址&#xff1a;https://www.mysql.com/downloads/ 下载版本&#xff1a;MySQL Installer for Window 2.安装MySQL 以下只列出需要注意的一些界面&#xff0c;没出现的界面默认继续即可。 1.选择安装类型 提供了多种安装模式&#xff0c;包括默认开发版、仅…...

汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动

故障现象  一辆2013款奔驰S300L车&#xff0c;搭载272 946发动机&#xff0c;累计行驶里程约为15万km。车主反映&#xff0c;将挡位置于D挡&#xff0c;稍微释放一点制动踏板&#xff0c;车辆蠕动时车身明显抖动&#xff0c;类似气缸失火时的抖动&#xff0c;又类似手动变速器…...