【16.0】JavaScript对象

【16.0】JavaScript对象

【一】js对象概念

  • 【特性】js中的对象时无序的属性集合
  • 【理解】我们可以把js里的对象想象成py中的字典,具有键值对,其实就是属性和属性值u,对象就是一个容器,里面属性的堆放肯定时无序的
  • 【玩法】对象的特征–可以在对象的属性中表示,对象的行为–在对象的方法中表示
  • 【类比】就下py中的实例化对象,具有类属性和自己的属性等等,是一个很抽象的团概念

【二】js对象的创建

  • 【直接创建】
    • 用花括号来创建一个空对象,或者在初始化创建的时候,就给我们的对象添加指定键值对

      var obj={}
      
      //属性之间逗号隔开
      const person = {name:"opp",gender:"male"};
      
  • 【new关键字生成】
    • 直接生成一个空对象

      var obj = new Object()
      
    • 放值

      obj.name="opp"
      
  • 【自定义函数构造】
    • 就像构造类一样,利用this初始化他的自身属性,(this就类似我们的init)

      function Person(name,gender){this.name=name;this.gender=gender;}
      const opp=new Person("opp","male");//点出属性
      console.log(opp.gender) //male
      

【三】js对象的调用

【1】属性访问
  • 【普通】直接对象名(.)点相应的属性

  • 【特定】在对象内部可以使用this加 . 调用属性

    function Person(name,gender){this.name=name;this.gender=gender;}
    const opp=new Person("opp","male");//点出属性
    console.log(opp.gender) //male
    
    //在内部用this
    function Person(name,gender){this.name=name;this.gender=gender;console.log(`这是 ${this.name}`) //注意是反引号
    }
    const opp=new Person("opp","male");
    //得到 这是 opp
    
【2】方法调用
  • 和上面一样,上面是属性,在这是方法名
【3】索引式访问
  • 在对象后[“属性名]

    function Person(name,gender){this.name=name;this.gender=gender;}
    const opp=new Person("opp","male");
    //调用name属性
    console.log(opp["name"]);  //opp
    
【4】遍历数组for in
  • 使用for in遍历对象的可枚举属性,但不包括原型链上的属性

    for (let key in opp) {if (person.hasOwnProperty(key)) {console.log(`${key}: ${person[key]}`);}
    }
    //name: opp
    //gender: male
    

【四】js对象----日期对象Date

【1】概念
  • 处理日期时间和操作相关的方法
【2】日期对象的创建
  • 日期对象类型不同,有很多的创建方式,都是Date去创建的,类似于内置方法,有很多的属性,我们根据需求利用属性创建

  • 创建当前 日期和时间的对象实例

    • var currentDate = new Date();
      
  • 创建指定 日期和时间的对象实例

    • var specificDate = new Date(2024,6,12,10,30,);
      //以此为年月日 时分秒
      2024-07-12T02:30:30.000Z
      //会做一个转换 编程国际时间
      
  • 结构化时间

    • //let变成局部变量
      let currentDate = new Date()
      // undefined
      currentDate
      //2024-06-12T09:01:18.799Z(国际时间)
      
  • 转时间格式

    • let currentDate = new Date()
      currentDate.toLocaleString();
      //2024/6/12 17:03:49
      
  • 自定义时间

    • //自己打好时间格式
      let specificDate = new Date("2028/11/11 11:11:11");
      specificDate.toLocaleString();
      //2028/11/11 11:11:11//直接传入时间
      let specificDate = new Date(2024,6,11,11,1,2,2);
      console.log(specificDate.toLocaleString());
      // 2024/7/11 11:01:02
      
【3】日期对象的内置方法
  • 获取具体的 年月日信息

    • let da=new Date
      //获取年份
      da.getFullYear();
      //获取月份(0-11 0表示1月)
      da.getMonth();
      // 获取日(月中的某一天)
      d0.getDay();
      // 获取星期
      d0.getHours();
      // 获取小时
      d0.getMinutes();
      // 获取分钟
      d0.getSeconds();
      // 获取秒数
      d0.getMilliseconds();
      // 获取毫秒数
      d0.getTime();
      // 获取时间戳
      
  • 设置时间和日期

    • var data=new Date();date.setFullYear(2024); // 设置年份
      date.setMonth(8); // 设置月份(表示一月,11表示十二月)
      date.setDate(15); // 设置日期(月中的某一天)
      date.setHours(18); // 设置小时
      date.setMinutes(45); // 设置分钟
      date.setSeconds(30); // 设置秒数
      
  • 格式化时间

    • 日期对象内没有内置的格式化方法,但是可以使用其他的方法将日期和时间格式转为想要的格式

    • var data=new Date();var formattedDate = data.toLocaleDateString(); //格式化为本地日期字符串
      var formattedTime = date.toLocaleTimeString(); // 格式化为本地时间字符串
      var formattedDateTime = date.toLocaleString(); // 格式化为本地日期和时间字符串
      

【五】javascript和json对象转换

  • 【对比】

    • 在py中 dumps是序列化 loads是反序列化 (序列化是转成json对象)
    • 在js中 JSON .stringify是序列化JSON.parse是反序列化
  • 【序列化】JSON.stringify

    • stringify序列化成json对象

    • //JavaScript对象
      var opp={name:"opp",gender:"male"};//生成json对象
      var oppj=JSON.stringify(opp);
      console.log(oppj);
      //{"name":"opp","gender":"male"}
      
  • 【反序列化】JSON.parse

    • 将json对象转成js对象

    • var oppjs=JSON.parse(oppj)
      //{ name: 'opp', gender: 'male' }
      //还给自动变成单引号了
      

【六】正则对象RegExp

  • 正则表达式(Regular Expression)是一种用来匹配、查找和操作字符串的工具
【创建方式】
  • 利用内置函数

    var reg = new RegExp(正则表达式);
    
  • 直接写出自己的正则表达式

    var reg = /正则表达式/
    
【正则的一些方法】
  • test( ) 方法

    • 测试字符串是否可以匹配正则表达式----得到布尔值

      var str='hello world';
      //写出正则表达式
      var pattern=/hello/;
      //进行匹配
      var result=pattern.test(str);
      console.log(result);//得到true
      
  • exec( )

    • 根据正则表达式匹配,将匹配的结果返回成数组(包含内容,索引,原数组)

    • 没有匹配到,返回null

      var str='hello world';
      //写出正则表达式 匹配l和后一个的字母
      var pattern=/l+/g;
      //进行匹配
      var result=pattern.exec(str);
      console.log(result);
      
      //只得到第一个匹配项
      [ 'll', index: 2, input: 'hello world', groups: undefined ]
      
  • match()

    • 将匹配内容返回数组

    • 没匹配到,返回null

      var str='hello world';
      //写出正则表达式
      var pattern=/l+/g;
      //进行匹配
      var result=str.match(pattern);
      console.log(result);
      
      //[ 'll', 'l' ] 
      //匹配e+
      //[ 'e' ]
      
  • search()

    • 在字符串中搜索匹配正则表达式的内容,并返回第一个匹配的索引位置。

    • 没匹配到 返回-1

      var str = "Hello, world!";
      var pattern = /lo/;
      var result = str.search(pattern);
      console.log(result); // 输出:3
      
  • replace()

    • 将匹配项替换成新的内容

    • var str = "Hello, world!";
      var pattern = /o/g;
      var replacement = "a";
      var result = str.replace(pattern, replacement);
      console.log(result); // 输出:Hella, warld!
      
  • flags

    • 返回正则表达式的修饰符标志字符串

      var pattern = /hello/gi;
      console.log(pattern.flags); // 输出:givar pattern = /hello/g;
      console.log(pattern.flags); // 输出:g
      
【3】匹配数据
  • let reg = new RegExp(正则表达式);
    reg.test(待匹配内容)// 获取字符串中的某个字母
    let str = "dream eam eam eam"
    // 字符串内置方法
    str.match(/m/) // 拿到第一个字母并返回索引,不会继续匹配
    str.match(/m/g) // 全局匹配 g表示全局模式
    
  • // 获取字符串中的某个字母
    let str = "dream eam eam eam"
    undefined
    str.match(/m/) // 拿到第一个字母并返回索引,不会继续匹配
    // ['m', index: 4, input: 'dream eam eam eam', groups: undefined]
    str.match(/m/g) // 全局匹配 g表示全局模式
    // (4) ['m', 'm', 'm', 'm']
    
【4】正则的bug
  • 在正则中,匹配过程中指针会移动,第一次匹配会移动到数据的末尾,所以第二次匹配都无效,第二次匹配完又倒回最初,所以第三次匹配又有效

  • 【实例】

    • 全局模式的指针移动

    • let reg = /^[a-zA-Z][A-Za-z0-9]/g// 第一次匹配成功 -- 有数据-- 指针移动到尾端
      reg.test("dream");
      // true// 第二次匹配失败 -- 指针在尾端向后匹配 --无数据
      reg.test("dream");
      // false// 第三次匹配成功 -- 有数据-- 指针回到头部
      reg.test("dream");
      // true
      reg.test("dream");
      // false// 第二次匹配失败 -- 指针在尾端向后匹配 --无数据
      reg.lastIndex
      // 0
      reg.test("dream");
      // true// 第三次匹配成功 -- 有数据-- 指针回到头部
      reg.lastIndex
      // 2
      
    • 匹配数据为空时

      let reg = /^[a-zA-Z][A-Za-z0-9]/reg.test();
      
      let reg = /^[a-zA-Z][A-Za-z0-9]/// 针对上述表达式 :没有数据时。默认传进去的参数是  undefined --- 匹配成功
      reg.test();
      // true
      reg.test();
      // true
      

【七】math对象

  • 生成一些关于数学的式子

  • 【用法】Math.方法名(传参数)

  • abs(x)      返回数的绝对值。
    exp(x)      返回 e 的指数。
    floor(x)    对数进行下舍入。
    log(x)      返回数的自然对数(底为e)。
    max(x,y)    返回 x 和 y 中的最高值。
    min(x,y)    返回 x 和 y 中的最低值。
    pow(x,y)    返回 x 的 y 次幂。
    random()    返回 0 ~ 1 之间的随机数。
    round(x)    把数四舍五入为最接近的整数。
    sin(x)      返回数的正弦。
    sqrt(x)     返回数的平方根。
    tan(x)      返回角的正切。
    
  • 【实例】

    • abs()

      numabs=Math.abs(-2);
      console.log(numabs);
      //得到2
      

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

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

相关文章

美学心得(第二百六十三集) 罗国正

美学心得(第二百六十三集) 罗国正 (2024年6月) 徐念慈(1974—1908),江苏常熟市人,是文学家、翻译家、教育家、出版家。二十岁时便精通英、日文字,二十一岁中秀才&#…

opencv 打开图片后,cv::mat存入共享内存的代码,实现消费者与生产者模型。XSI信号量和POSIX 信号量

文章目录 基于 sys 系统信号量(XSI信号量)常用api参考 基于 POSIX 信号量有名信号量常用 api 无名信号量常用 api 参考 实践-基于POSIX有名信号量生产者消费者模型任务说明同步关系互斥关系 设置一个互斥信号量,实现对共享内存的互斥访问设置两个信号量,…

铁路防鸟有哪些措施?铁路专用太阳能雷达驱鸟扇

铁路沿线的电杆、接触网支柱以及硬横梁等结构,因其牢固稳定以及无晃动的特点,成为了鸟儿们心仪的筑巢佳地,众多鸟类选择在此“安营扎寨”。而鸟巢中的树枝、草根和铁丝等杂物,极易引起铁路供电设备跳闸,导致短路停电&a…

微信小程序创建新项目,app.json主动设置配置

"window": {"navigationBarTextStyle": "black","navigationBarBackgroundColor": "#f5f5f5","navigationBarTitleText": "微信"},

【云岚到家】-day04-1-数据同步方案-Canal-MQ

【云岚到家】-day04-1-数据同步方案-Canal-MQ 1 服务搜索1.1 服务搜索技术方案1.1.1 需求分析1.1.2 技术方案1.1.2.1 使用Elasticsearch进行全文检索1.1.2.2 索引同步方案 1.1.3 CanalMQ1.1.3.1 MySQL主从数据同步1.1.3.2 Canal工作流程1.1.3.3 具体实现方案 1.2 MQ技术方案1.2…

【QT】

通信服务端实现 widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox>//消息 #include <QTcpServer> #include <QList> #include <QTcpSocket> QT_BEGIN_NAMESPAC…

apache poi excel export

apache poi excel export 水一篇 凑个数&#xff08;啊 水文章好羞耻啊&#xff01;请原谅我私密马赛&#xff01;&#xff09; 1 ExcelColumn Data Builder ToString NoArgsConstructor AllArgsConstructor public class ExcelColumn implements Serializable {Serialprivat…

我在高职教STM32——LCD液晶显示(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

[GESP202306 三级] 春游

题目:原题点我 题目大意&#xff1a; 找 0 0 0到 N − 1 N-1 N−1哪个少了输出哪个&#xff0c;没少输出 N N N 解题思路&#xff1a; 建立一个bool类型变量flag&#xff0c;输入时直接将对应的数放到对应的位置上去&#xff0c;就免了排序&#xff1b; 接着判断&#xff1…

Linux源码学习笔记01-Linux内核源码结构

Linux内核特性 是一个类Unix操作系统&#xff0c;但不是简化的Unix&#xff1b;不仅继承了Unix的特征&#xff0c;还有其他特性。 Linux内核的组织形式&#xff1a;整体式的结构&#xff0c;方便每个领域的开发人员参与开发&#xff1b;Linux进程调度方式简单高效&#xff1a…

用智能插件(Fitten Code: Faster and Better AI Assistant)再次修改vue3 <script setup>留言板

<template><div><button class"openForm" click"openForm" v-if"!formVisible">编辑</button><button click"closeForm" v-if"formVisible">取消编辑</button><hr /><formv-i…

【权威发布】2024年环境科学、旅游与产业经济国际会议(ICESTIE 2024)

2024年环境科学、旅游与产业经济国际会议 2024 International Conference on Environmental Science, Tourism and Industrial Economics 会议简介 2024年环境科学、旅游与产业经济国际会议旨在汇聚全球该领域的专家学者&#xff0c;共同探讨环境科学与旅游产业的融合发展&…

SDK编译IO Domain电压选择

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙…

SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)

想要明白生活你需要先经历它,而不是总在分析它。 —萨莉鲁尼 文章目录 前言一、@Async注解1. 概念2. 使用2.1 使用@EnableAsync启动函数异步支持2.2 不会异步执行的坑2.2.1 为什么内部调用不会异步执行?2.2.2 如何确保@Async方法异步执行?3. 配置线程池3.1 通过代码配置3.1.…

【iOS】#include、#import、@class、@import

文章目录 #include#importclassimport总结 #include #include是c\c中的预处理器指令&#xff0c;用于包含头文件的内容 但是使用#include可能会出现重复包含文件的问题&#xff0c;因此需要使用&#xff08;#ifndef/#define/#endif&#xff09;。 #import //导入系统头文件…

Python Tkinter GUI图形化开发

Python Tkinter GUI图形化开发 今天我想和大家分享一下Python中使用Tkinter进行GUI图形化开发的经验和心得。Tkinter作为Python内置的标准GUI库&#xff0c;简单易用&#xff0c;是快速开发桌面应用程序的不错选择。今天的分享适合初学者和有一定基础的开发者&#xff0c;希望…

关于下载 IDEA、WebStorm 的一些心得感想

背景 实习第一天的时候&#xff0c;睿哥便吩咐我下载一些软件&#xff0c;这些软件以后在写项目的时候会用到&#xff0c;他叫我先装IDEA,WebStorm&#xff0c;微信开发者工具&#xff0c;git&#xff0c;还有Navicat。 这些软件能够被我们正常使用&#xff0c;无非就通过三步…

浅谈配置元件之TCP取样器配置/TCP取样器

浅谈配置元件之TCP取样器配置/TCP取样器 1.引言 在进行网络性能测试时&#xff0c;TCP取样器配置和TCP 取样器&#xff08;TCP Sampler&#xff09;是两个重要的组件&#xff0c;他们允许用户直接发送和接收TCP 数据包&#xff0c;这对于测试服务器的TCP 连接处理能力、模拟特…

Arduino-ESP32的CAN波特率设置为1M代码,不用改底层。

前面调CAN的时候&#xff0c;发现CAN的实际的波特率是设置的波特率的一半。然后还去看手册&#xff0c;推公式&#xff0c;改底层库的代码。后面发现不用这么麻烦&#xff0c;换一下使用的库和配置函数就行。使用CAN.h头文件的配置函数就会出现CAN的实际的波特率是设置的波特率…

使用opencv合并两个图像

本节的目的 linear blending&#xff08;线性混合&#xff09;使用**addWeighted()**来添加两个图像 原理 (其实我也没太懂&#xff0c;留个坑&#xff0c;感觉本科的时候线代没学好。不对&#xff0c;我本科就没学线代。) 源码分析 源码链接 #include "opencv2/imgc…