JavaScript 进阶--charater2

news2024/9/20 22:25:51

系列文章目录

提示: JavaScript进阶笔记 ,希望各位看官可以高抬小手一键三连


上一章测试题
答案在最后给出

文章目录

  • 系列文章目录
  • 前言
  • 一、深入对象
    • 1.1创建对象三种方式
      • 1. 利用对象字面量创建对象
      • 2.利用new Object 创建对象
      • 3. 利用构造函数创建对象
    • 1.2 构造函数
    • 1.3 实例成员&静态成员
  • 二、内置构造函数
    • 2.1 引用类型
      • 1. Object
      • Array总结:heart::
      • 2. Array
      • Array总结:heart::
    • 2.2 包装类型
      • 3. String
        • 3.1 split 分隔符
        • 3.2 substring() 字符串截取
        • 3.3 startsWith()判断字符串开头
        • 3.4 includes() 判断包含的字符串
        • 3.5 indexOf() 搜索
      • String总结:heart:
      • 4. Number
      • String总结:heart:
    • 5.综合案例:购物车展示:b:
  • 总结::heart:如果想要笔记和资料可以私信我喔~


前言

提示:本章大概内容:

构造函数&数据常用函数

  1. 掌握基于构造函数创建对象,理解实例化过程
  2. 掌握对象数组字符数字等类型的常见属性和方法,便捷完成功能

一、深入对象

• 创建对象三种方式
• 构造函数
• 实例成员&静态成员

1.1创建对象三种方式

1. 利用对象字面量创建对象

     const obj = new Object()
      obj.uname = 'pink老师'
      console.log(obj)

2.利用new Object 创建对象

 const obj = new Object({ uname: 'pink' })
 console.log(obj)

创建对象示例

3. 利用构造函数创建对象

构造函数 :是一种特殊的函数,主要用来初始化对象,来快速创建多个类似的对象。

   // 创建一个猪 构造函数 
    function Goods(name, price, count) {
      this.name = name
      this.price = price
      this.count = count
      this.sayhi = function () { }
    }
    
    const mi = new Goods('小米', 1999, 20)
    console.log(mi)
    const hw = new Goods('华为', 3999, 59)
    console.log(hw)

常规通过{…}语法创建一个对象,但是如果创建相同属性的对象,需要重新写一遍{…},可以通过构造函数来快速 new 创建多个类似的对象。
但是创建的对象地址是独立的,所有创建的对象不相等。
在这里插入图片描述

注意不过有两个约定

  1. 构造函数的命名以大写字母开头。
  2. 只能由 “new” 操作符来执行
  3. 构造函数内部不需要写return

1.2 构造函数

  1. 创建新对象
  2. 构造函数this指向新对象
  3. 执行构造函数代码,修改this,添加新的属性
  4. 返回新对象
 // 创建一个猪 构造函数 
    function Pig(uname, age) {
      this.uname = uname
      this.age = age
    }
  // new 关键字调用函数
  new Pig('佩奇')
  // 接受创建的对象
  const peppa = new Pig('佩奇')

1.3 实例成员&静态成员

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

// 构造函数
  function Goods(name, price, count) {
      //构造函数内部 的this 就是实例对象
      //实例对象中动态添加属性
      this.name = name
      this.price = price
      this.count = count
      // 实例对象动态添加方法
      this.sayhi = function () { }
    }
    // 实例化 mi 是实例对象
    //mi 实际上是构造函数内部的this 
    const mi = new Goods('小米', 1999, 20)
    console.log(mi)  
    console.log(mi.sayhi)// 调用实例方法
    console.log(mi,name)// 访问实例属性

静态成员构造函数的属性和方法被称为静态成员

    // 静态成员
    function Goods(){
	//省略实例成员
}
  //静态属性
    Goods.num = 10
    console.log(Goods.num)
  // 静态方法
    Goods.sayhi = function () {
	    console.log("静态方法")
 } 

二、内置构造函数

在 JavaScript 中最主要的数据类型有 6 种:
基本数据类型字符串、数值、布尔、undefined、null
其中字符串,数值,布尔等基本类型也有专门的构造函数。这些我们称作 包装类型
(String,Number,Boolean 等)
特殊基本数据类型内部包装为引用数据类型

  <script>
    const str = 'pink'
    console.log(str.length)
    const num = 12
    console.log(num.toFixed(2))
    // const str = 'pink'
    // js 底层完成, 把简单数据类型包装为了引用数据类型
    const str = new String('pink')

2.1 引用类型

1. Object

内置的构造函数,用于创建普通对象。
静态方法就是只有构造函数Object可以调用。

const user = new Object({name:'小米',age:15}) 
//推荐使用字面量声明对象,而不是Object构造函数
for(let kk in o){
	console.log(k)// 属性 name age
	console.kog(o[k])// 值 佩奇 16
}

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

const o = { name:'小米',age:15 }
//获得对象的所有键,并且返回一个数组
const arr =Object.keys(o);
console.log(arr) // ['name','age']

作用:Object.values 静态方法获取对象中所有属性值

 const o = { name:'小米',age:15 }
//获得对象的所有值,并且返回一个数组
const arr =Object.values(o);
console.log(arr) // ['小米',15]

作用:Object. assign 静态方法常用于对象拷贝

  const o = { name:'小米',age:15 }
  const obj={}
  Object.assign(obj,o)
  console.log(obj)//{name:'佩奇',age:6}

并且还可以添加属性,如果拷贝新的对象没有的属性会添加上去

 const o = { uname: 'pink', age: 18 } 
 const oo = {}
    Object.assign(oo, o)
    console.log(oo)
    Object.assign(o, { gender: '女' })
    console.log(o)

在这里插入图片描述

Array总结❤️:

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

2. Array

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

const arr =new Array(3,5)
console.log(arr) // [3,5]

在这里插入图片描述
更形象点就是,map,filter返回新的结果。
在这里插入图片描述起始值可以省略,如果写就作为第一次累计的起始值
作用:reduce 返回函数累计处理的结果,经常用于求和等
 语法

 arr.reduce(function(){},起始值)

在这里插入图片描述
Array() 可以调用或不调用 new。两者都会创建一个新的 Array 实例。
API 更多的语法可以查看官方文档

数组常见方法- 伪数组转换为真数组Array.from()


<body>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
  <script>
    //  Array.from(lis) 把伪数组转换为真数组
    const lis = document.querySelectorAll('ul li')
    console.log(lis)
    // lis.pop() //报错
    const liss = Array.from(lis)
    liss.pop()
    console.log(liss)
  </script>
</body>

Array总结❤️:

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

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

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

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

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

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

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

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

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

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

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

  12. 实例方法 reverse 反转数组

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

2.2 包装类型

3. String

在 JavaScript 中的字符串、数值、布尔具有对象的使用特征,如具有属性和方法。

之所以具有对象特征的原因是字符串、数值、布尔类型数据是 JavaScript 底层使用 Object 构造函数“包装”来的,被称为包装类型

<script>
  // 使用构造函数创建字符串
  let str = new String('hello world!');

  // 字面量创建字符串
  let str2 = '你好,世界!';

  // 检测是否属于同一个构造函数
  console.log(str.constructor === str2.constructor); // true
  console.log(str instanceof String); // false
</script>

以下是常用的内置函数。

3.1 split 分隔符

split 把字符串 转换为数组 join()相反 。

const str = 'The quick brown fox jumps over the lazy dog.';

const words = str.split(' ');
console.log(words[3]);
// Expected output: "fox"

const chars = str.split('');
console.log(chars[8]);
// Expected output: "k"

const strCopy = str.split();
console.log(strCopy);
// Expected output: Array ["The quick brown fox jumps over the lazy dog."]

3.2 substring() 字符串截取

substring() 方法返回一个字符串在开始索引到结束索引之间的一个子集,或从开始索引直到字符串的末尾的一个子集。
描述: substring 提取从 indexStart 到 indexEnd(不包括)之间的字符。

1️⃣. 如果 indexStart 等于 indexEnd,substring 返回一个空字符串。
2️⃣. 如果省略 indexEnd,substring 提取字符一直到字符串末尾。
3️⃣. 如果任一参数小于 0 或为 NaN,则被当作 0
4️⃣. 如果任一参数大于 stringName.length,则被当作 stringName.length
5️⃣ . 如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样

var anyString = "Mozilla";
//5th. 输出 "Moz"
console.log(anyString.substring(0,3));
console.log(anyString.substring(3,0));
console.log(anyString.substring(3,-3));
console.log(anyString.substring(3,NaN));
console.log(anyString.substring(-2,3));
console.log(anyString.substring(NaN,3));

// 5th. 输出 "lla"
console.log(anyString.substring(4,7));
console.log(anyString.substring(7,4));
// 1th. 输出 ""
console.log(anyString.substring(4,4)); 

// 4th. 输出 "Mozilla"
console.log(anyString.substring(0,7));
console.log(anyString.substring(0,10));

3.3 startsWith()判断字符串开头

方法用来判断当前字符串是否以另外一个给定的子字符串开头,并根据判断结果返回 true 或 false。

const str1 = 'Saturday night plans'; 
console.log(str1.startsWith('Sat'));
// Expected output: true
 
console.log(str1.startsWith('Sat', 3));
// 从第三个字母开始
// Expected output: false

3.4 includes() 判断包含的字符串

方法执行区分大小写的搜索,以确定是否可以在另一个字符串中找到一个字符串,判断某个字符是不是包含在一个字符串里面,并根据情况返回 true 或 false。

const sentence = 'The quick brown fox jumps over the lazy dog.'; 
const word = 'fox';
console.log(sentence.includes(word) ? 'is' : 'is not');// is

3.5 indexOf() 搜索

indexOf() 方法,给定一个参数:要搜索的子字符串,搜索整个调用字符串,并返回指定子字符串第一次出现的索引。
给定第二个参数:一个数字,该方法将返回指定子字符串在大于或等于指定数字的索引处的第一次出现。

indexOf(searchString)
indexOf(searchString, position)

⭕️ 如果没有第二个实参,或者有第二个实参的值小于调用字符串的长度,返回值与第二个实参的值相同:

'hello world'.indexOf('') // 返回 0
'hello world'.indexOf('', 0) // 返回 0
'hello world'.indexOf('', 3) // 返回 3
'hello world'.indexOf('', 8) // 返回 8

⭕️然而,如果有第二个参数,其值大于或等于字符串的长度,则返回值为字符串的长度:

'hello world'.indexOf('', 11) // 返回 11
'hello world'.indexOf('', 13) // 返回 11
'hello world'.indexOf('', 22) // 返回 11

String总结❤️

  1. 实例属性 length 用来获取字符串的度长(重点)
  2. 实例方法 split('分隔符') 用来将字符串拆分成数组(重点)
  3. 实例方法 substring(需要截取的第一个字符的索引[,结束的索引号]) 用于字符串截取(重点)
  4. 实例方法 startsWith(检测字符串[, 检测位置索引号]) 检测是否以某字符开头(重点)
  5. 实例方法 includes(搜索的字符串[, 检测位置索引号]) 判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false(重点)
  6. 实例方法 toUpperCase 用于将字母转换成大写
  7. 实例方法 toLowerCase 用于将就转换成小写
  8. 实例方法 indexOf 检测是否包含某字符
  9. 实例方法 endsWith 检测是否以某字符结尾
  10. 实例方法 replace 用于替换字符串,支持正则匹配
  11. 实例方法 match 用于查找字符串,支持正则匹配
  12. 实例方法num.toString() 转换为字符串
    注:String 也可以当做普通函数使用,这时它的作用是强制转换成字符串数据类型。

4. Number

Number 是内置的构造函数,用于创建数值
常用方法: toFixed()设置保留小数位的长度
可以让数字指定保留的小数位数

 // toFixed 方法可以让数字指定保留的小数位数
    const num = 10.923
    // console.log(num.toFixed())
    console.log(num.toFixed(1))// 10.9
    const num1 = 10
    console.log(num1.toFixed(2))// 10.00

String总结❤️

  1. 推荐使用字面量方式声明数值,而不是 Number 构造函数
  2. 实例方法 toFixed 用于设置保留小数位的长度

5.综合案例:购物车展示🅱️

分析业务模块:
①:渲染图片、标题、颜色、价格、赠品等数据
②:单价和小计模块
③:总价模块
在这里插入图片描述
方法使用分析业务模块:
①:先利用map来遍历,有多少条数据,渲染多少相同商品
②:里面更换各种数据,注意使用对象解构赋值
③:利用reduce计算总价

总结:❤️如果想要笔记和资料可以私信我喔~

提示:上一章练习答案:D C ABCD A C ABC ABC A B A
以上内容需要掌握构造创建对象,理解实例化过程,掌握对象数组字符数字等类型的常见属性和方法,便捷完成功能。

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

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

相关文章

设计师百度百科词条创建怎么做?

设计分为平面设计、空间设计、工业设计、珠宝设计、游戏设计、家具设计、建筑设计、室内设计、景观设计、服装设计、网页设计、系统设计、剧场设计、动漫设计、品牌设计、造型设计、三维设计师、杂志封面设计师、包装设计师、形象设计师等领域。 设计师是一个提供创意的工作&a…

Hive(8):Hive内、外部表

关键字&#xff1a;EXTERNAL 1 什么是内部表 内部表&#xff08;Internal table&#xff09;也称为被Hive拥有和管理的托管表&#xff08;Managed table&#xff09;。 默认情况下创建的表就是内部表&#xff0c;Hive拥有该表的结构和文件。换句话说&#xff0c;Hive完全管理…

Hue(2):Hue 的安装

1 上传解压安装包 Hue 的安装支持多种方式&#xff0c;包括 rpm 包的方式进行安装、tar.gz 包的方式进行安装以及 cloudera manager 的方式来进行安装等&#xff0c;我们这里使用 tar.gz 包的方式来进行安装。 Hue 的压缩包的下载地址&#xff1a; http://archive.cloudera.…

SSH远程登录RaspberryPi命令行响应缓慢问题

SSH远程登录RaspberryPi命令行响应缓慢问题1. 问题2. 分析3. 解决3.1 去掉PAM部分鉴权模块3.2 去掉sshd的DNS设置3.3 无线WiFi信号优化方法一&#xff1a;ifconfig操作方法二&#xff1a;内核自动检测4. 结果5. 补充资料5.1 [排除wifi网卡功率自管理问题](https://raspberrypi.…

LeetCode刷题---21.合并两个有序链表(双指针)

文章目录一、编程题&#xff1a;19. 删除链表的倒数第 N 个结点&#xff08;双指针-快慢指针&#xff09;1.题目描述2.示例1&#xff1a;3.示例2&#xff1a;4.示例3&#xff1a;5.提示&#xff1a;二、解题思路1.思路2.复杂度分析&#xff1a;3.算法图解三、代码实现总结一、编…

【Linux】调试器 gdb 及 ‘\r‘ 的使用

目录 前言 gdb 断点 打断点 查看、删除断点 断点使能 调试 显示数据 其他指令 ‘\r’的使用 行缓冲区 小程序 前言 &#x1f951;在 Linux 下我们可以通过 gcc 进行编译&#xff0c;但与 vs 相比若想对代码进行调试&#xff0c;我们还需要学会使用调试器 gdb 。 &am…

Elastic Job学习笔记

目标&#xff1a; 第一章&#xff1a;概述 1、理解任务调度的概念 2、理解分布式任务调度的概念 3、能够说出Elastic-Job是什么 第二章&#xff1a;Elastic-Job快速入门 1、能够搭建Elastic-Job快速入门工程环境 2、能够编写Elastic-Job快速入门的程序 3、理解Elastic-Job整体架…

Studio 3T怎么用mysql语句执行查询

目录说明说明 mongo图形界面 Studio 3T怎么执行mongo的原生语句进行查询 就先说到这\color{#008B8B}{ 就先说到这}就先说到这 在下Apollo\color{#008B8B}{在下Apollo}在下Apollo 一个爱分享Java、生活的小人物&#xff0c;\color{#008B8B}{一个爱分享Java、生活的小人物&…

【前端】Vue项目:旅游App-(20)home:点击跳转至带参数的动态路由

文章目录目标过程与代码详情页detailhome中设置点击跳转效果总代码修改或添加的文件router/indexdetailhome-content参考本项目博客总结&#xff1a;【前端】Vue项目&#xff1a;旅游App-博客总结 目标 点击热门精选的item跳转至对应详情页&#xff1a; 详情页&#xff1a; 路…

什么是HTTPDNS?HTTPDNS有哪些作用?

近几年来&#xff0c;HTTPDNS技术大火&#xff0c;很多大的网站都开始部署自己的HTTDNS服务器&#xff0c;那么什么是HTTPDNS&#xff0c;HTTPDNS和传统的DNS技术相比有哪些区别&#xff1f;HTTPDNS又有哪些作用呢&#xff1f;针对这些问题&#xff0c;本文中科三方做下简单介绍…

【学习】Linux 系统 文件权限表示

学习内容描述&#xff1a;Linux 系统 文件权限格式 重点知识&#xff1a; Linux 系统 文件权限格式是10位&#xff0c;格式例如&#xff1a;-rw-rw-rw-&#xff0c;表示文件所有者、所属组、其他用户都具有读和写的权限 。 &#xff08;1&#xff09;第0位确定文件类型 其中: …

计算机组成原理 第三章笔记

视频网址 仅仅是笔记记录&#xff0c;若有错误请指出。 零碎的 存储器的分类 磁表面存储器:磁盘,磁带磁芯存储器半导体存储器 RAM ROM光存储器 看下面这个思维导图 存储器的性能指标 存储容量&#xff1a;存储字数字长单位成本: 每位价格总成本/总容量存储速度&#xff1a;数…

Android Studio Linux系统模拟器启动异常

一、报错&#xff1a;/dev/kvm device permission denied 1、首先检查/dec/kvm的所属关系 命令&#xff1a;ls -al /dev/kvm 可以看到&#xff0c;属于root用户&#xff0c;组也是root用户 2、查看当前用户是否在root组 命令&#xff1a;grep root /etc/group 显然是没有的…

C语言学习笔记-数组

C 数组 C 语言支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量&#xff0c;比如 runoob0、runoob1、…、runoob99&#x…

Project3:Ants Vs. SomeBees

Ants Vs. SomeBees1. 前言2. Phase 1&#xff1a;Basic gameplay3. Phase 2&#xff1a;More Ants&#xff01;4. Phase 3: Water and Might5. 测试结果1. 前言 本项目是 CS 61A 的第三个项目&#xff0c;要求是实现一个类似于植物大战僵尸的游戏&#xff0c;这里 Ants 就相当…

【redis】redis的过期策略以及内存淘汰机制

前言 今天我们讨论下redis的过期策略以及内存淘汰机制&#xff0c;如果你想要考察一个人对redis的了解&#xff0c;那吗这个问题是必选的&#xff0c;从他对这个问题的回答中&#xff0c;就可以了解到他的redis深浅。 过期策略 先来介绍下&#xff0c;Redis key 过期删除的策…

虹科产品 | 使用Redis企业版数据库为MySQL增添魅力!

MySQL读取数据慢&#xff1f; 难以轻松扩展&#xff1f; 数据搜索效率低&#xff1f; 无法实时分发数据集&#xff1f; 虹科Redis企业版数据库解决方案来了&#xff01;企业将Redis企业版数据库与MySQL一起使用&#xff0c;可以实现企业缓存或复制数据库&#xff0c;从而使应用…

MATLAB 非线性规划

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载页;uniapp 在外部打开APP(schemes)

场景&#xff1a; A将某商品分享给B&#xff0c;B点击后判断是否安装APP&#xff0c;若安装直接打开&#xff0c;没有安装则跳转下载页&#xff1b; 知识点&#xff1a; uniapp APP分享&#xff1b;判断用户是否安装APP&#xff0c;已安装直接打开&#xff0c;未安装跳转下载…

从零开始的数模(十一)微分方程建模

目录 一、概念 1.1什么是微分方程建模 1.2使用场合 二、基于python的微分方程建模 2.1scipy.integrate.odeint() 函数 ​编辑2.2案例 ​编辑 三、基于MATLAB的微分方程建模 四、偏微分方程的求解 一、概念 1.1什么是微分方程建模 微分方程建模是数学模型的重要方法&am…