js基础入门

先来一点js基础,其实js大部分的时候都在处理对象或者数组。

对象四个基本操作:增删改查

掌握元素的增删改查,了解如何拷贝,深拷贝和浅拷贝的区别。详情见代码


<script>//创建对象一共有三种赋值声明的语法let obj={} //赋值创建变量的一个语法var obj1={} //现在var不常用了const obj2={}//const是常量的意思//如果你直接创建对象而没有复制的话,console就是undefinedlet obj obj.a='1' //创建对象的属性console.log(obj)obj.a=true //改变对象的值console.log(obj)delete obj.a //删除对象console.log(obj)obj['address']='北京市朝阳区' //这也是赋值的一种方式console.log(obj)//assign的意思是把一个对象内的属性转给另一个对象,这也叫做深拷贝。let teacher ={} //新的对象 老师Object.assign(teacher,obj) //把obj这个对象里的转给新建的这个teacher对象//如何验证是否转移成功方法,先console一下teacher里的值console.log(teacher)//再给teacher添加一个属性,再打印看看其他属性还在不在。teacher.birth='1993-01-01'console.log(teacher)//再看一下obj原来的数组元素console.log(obj)//深拷贝写法2:let teacher1=Object.assign({},obj)console.log(teacher1)//深拷贝写法3let teacher3 =JSON.parse(JSON.stringify(obj))//这样的方式叫浅拷贝,即往新的对象中添加一个元素,这个增删改查的元素会同步到obj对象中let teacher2= objteacher2.xxx='hhh'console.log(teacher2)console.log(obj)</script>

其他操作:

1、obj[a]=1;括号法赋值

obj['address']='北京市朝阳区' //这也是赋值的一种方式console.log(obj)

2、Object.assign() :拷贝

let teacher ={} //新的对象 老师Object.assign(teacher,obj) //把obj这个对象里的转给新建的这个teacher对象

3、let{name}=user 拿对象里的属性

 let{xxx}=objconsole.log(xxx)

4、有时候我们想把对象a内的值给对象b,但是在你不确定a有没有那个值,以下有三种格式可以避免程序报错,这样写也可以让程序更健康。

一、?. b=a?.name(a是undefined或者null,b不报错)

 //赋值1:let a =undefinedlet b=a?.x //a是undefined或者null,b不报错。console.log(b) //b输出是undefined

二、?? b=a??c (a是undefined或者null,则赋值c给b)

 //赋值2(有点类似于三目运算符)let a1=undefinedlet c1=1let b1=a??c1 //如果问号左边是undefined或者null的话,则自动用问号右边的值console.log(b1) //b1输出结果是1

也可以这样写:localStorage.getItem('user')??{}

或者这样写也可以:(来个空json)

let b1=localStorage.getItem('user')??'{}'

或者这样:

let b1=JSON.parse(localStorage.getItem('user')??'{}')

这样的写法不会报错。

在控制台里的application的local storage里新增一个‘user'对象

这样写的话就要求你对象里的数据必须是一个标准的JSON格式。

三、|| b=a||c (a是undefined或者null,则取c)

let res;
let res1 =res || {}console.log(res1.name) //输出结果是undefined

四、??= b ??=a(左侧是undefined或者null,则取右侧的值)

let a;
let b = 1;
console.log(a ??=b) //输出结果为1

知识补充

 //数字也可以作为js的一个keylet jsObj={1:'a',2:'b'}//[]还可以访问字符串的属性console.log(jsObj[1]) //访问js数字属性的方法,输出结果为a

给对象的属性加一些值以及如何写js的循环语句

//在 JavaScript 中,const 是用来声明一个常量的关键字

你发现if语句里的东西没有正确显示,此时你可以debugger

debugger是快速定位并且解决问题的方式

?如何debugger

sources:源代码  block:代码块

所以此时你就知道问题在在于if语句的判断条件里的key值应该是字符串形式,改过来即可。

数组的增删改查

一、新增一个数组:

去查看数组里指定的某一位结果
 console.log(arr1[0]) //输出结果是undefined
往已经有元素的数组里再加新的内容
 arr1.push('嘻嘻')console.log(arr1)

修改(直接改):

 arr1[2]=trueconsole.log(arr1)

tips:

删除:

删除方法一splice:

删除方法三shift:shift就是默认删除首位元素

删除方法四pop:默认删除末尾元素

数组的其他操作:

slice:切割元素

concat:合并数组

split:字符串变成数组

把每一个字都分割成了数组的一个元素

形式一:

 let str = '逆风如解意容易莫摧残'console.log(str.split(''))

形式二:

根据特定的字符去切割成若干个元素

join:把数组里的每一个元素变成一个新的字符串

let arrB=[1,2,3,4]console.log(arrB.join()) //输出结果是1,2,3,4

也可以把你的数组里的每一个元素和你join括号内的分隔符拼在一起变成一个新的字符串

let arrB=[1,2,3,4]console.log(arrB.join('|||||'))//输出结果为1|||||2|||||3|||||4

sort排序:注意这里的坑,这里的排序规则不是按照阿拉伯数字大小去排列的,而是按照unicode编码顺序。

let sortArr=[1,2,10]let newSortArr=sortArr.sort() //unicode编码排序console.log(newSortArr) //结果是[1,10,2]而不是[1,2,10]

解决方法:加一个小函数做判断

let sortArr=[1,2,10]let newSortArr=sortArr.sort((a,b)=>a-b)console.log(newSortArr) //结果是[1,2,10]

reverse函数:翻转(把顺序颠倒过来)

这里虽然没有坑,但是如果你想要排列顺序按照阿拉伯数字的逻辑的话也要加小函数做判断

let reverseArr=[1,2,10,8,6,22,11]console.log(reverseArr.reverse()) //输出结果:[11, 22, 6, 8, 10, 2, 1]//所以要这样写:console.log(reverseArr.sort((a,b)=>b-a)) //输出结果:[22, 11, 10, 8, 6, 2, 1]

indexOf:获取元素下标,但是如果括号里写了3,此时数组里没有下标为3的则会显示-1,有的话会从下标为0的位置开始获取。

lastindexOf则是相反的规则

let indexArr=[1,2,3]console.log(indexArr.indexOf(2)) //输出结果:1

加入现在有两个数组,把年龄大于20的添加到新数组里去,如果直接写代码的话非常麻烦:

 let users=[{name:'张三',age:20},{name:'李四',age:21}]let newUsers = []//遍历users这个数组,aaa是我自主命名的参数users.forEach(aaa=>{if(aaa.age>20){newUsers.push(aaa)}})console.log(newUsers)

神器filter:

 let newUser1=users.filter(aaa =>aaa.age>20)console.log(newUser1)

也可以再多加条件:

功能二:删除数组中的某一项(正常写)

用filter:

神器find:快速查找某一个元素

有两种方法:

神器map:

例如想把一个数组的所有人的名字给找到

reduce:有五个属性,但常用就三个。

pre:之前所有操作的结果

current:当前的一个操作

0:初始值

cuurent.age表示每一个对象的年龄加上之前所有的年龄之和,再通过一个数值0来赋值。

例1:想对某一数组里所有年龄求和:

 let users=[{name:'张三',age:20},{name:'李四',age:21},{name:'王二',age:22}]let sum=users.reduce((pre,current)=>{return pre + current.age},0)console.log(sum) //63

例2:统计数组里每一个人出现的次数

// 定义了一个包含用户信息的数组
let users = [{ name: '张三', age: 20 },{ name: '张三', age: 20 },{ name: '张三', age: 20 },{ name: '李四', age: 21 },{ name: '王二', age: 22 }
];// 使用 reduce 方法统计相同姓名的用户数量
let count = users.reduce((pre, current) => {// 检查当前姓名是否已经存在于结果对象 pre 中if (current.name in pre) {// 如果存在,则递增对应姓名的计数pre[current.name]++;} else {// 如果不存在,则将当前姓名添加到结果对象,并初始化计数为 1pre[current.name] = 1;}// 返回更新后的结果对象return pre;
}, {}); // 初始值为一个空对象// 打印输出统计结果,显示每个姓名对应的数量
console.log(count);

更详细的注解:

pre 是在每一次迭代中被累积的结果对象,current 是数组中的当前元素。

  • if (current.name in pre) 检查 pre 对象中是否已经存在了以 current.name 为键的属性。
  • 如果存在,表示这个姓名已经在 pre 对象中有对应的属性了,那么就将该属性对应的值加 1。这意味着这个姓名已经出现过,计数加一。
  • 如果不存在,意味着这是第一次遇到这个姓名,那么就需要在 pre 对象中创建一个新的属性,键是 current.name,并将这个属性的值初始化为 1。这样就表示这个姓名出现了一次。
  • 最后返回更新后的 pre 对象,作为下一次迭代的起始值。
  • 由于初始值 {} 为空对象,用于存储姓名计数,所以最终结果是一个对象,键是姓名,值是出现次数。

本章最后一个知识点:

JSON——数据传输的格式(前后端交互数据时以JSON这种格式来进行交互的)

json其实就两种

1、json对象{}

2、json数组[]

json数据格式要求:

key必须是字符串{"name":"张三","age":23}

一个标准的json样式:json里可以套用很多数据

可以去json.cn这个网站去验证json

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

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

相关文章

大数据存储技术(3)—— HBase分布式数据库

目录 一、HBase简介 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;特点 &#xff08;三&#xff09;HBase架构 二、HBase原理 &#xff08;一&#xff09;读流程 &#xff08;二&#xff09;写流程 &#xff08;三&#xff09;数据 flush 过程 &#xf…

Java stream 进阶版

1、Stream 概述 Java 8 引入了 Stream API,它是一种用于简化集合和数组操作的强大工具。Stream API 允许我们将集合或数组视为流,并在流上进行各种操作,如筛选、排序、聚合等。 Stream API 的核心概念是 Stream 流,它代表了一个数据流,其中包含了一系列的元素。这些元素…

【LeetCode刷题-排序】--179.最大数

179.最大数 思路&#xff1a; 方法&#xff1a;自定义排序 class Solution {public String largestNumber(int[] nums) {if(nums null || nums.length 0){return "";}//将每个数字转换成字符串String[] strs new String[nums.length];for(int i 0;i < nums.l…

怎样长时间保持SSH会话连接不断开?

操作场景 使用SSH方式登录CentOS Stream操作系统的云服务器时&#xff0c;过一段时间就会自动断开连接。 该文档适用于CentOS/EulerOS系统。 操作方法 编辑/etc/ssh/sshd_config文件设置心跳&#xff0c;保持连接。 编辑/etc/ssh/sshd_config&#xff0c;添加配置项&#x…

【C语言】——认识指针变量和地址,以及指针变量类型的意义

&#x1f3a5; 岁月失语唯石能言的个人主页 &#x1f525;个人栏专&#xff1a;秒懂C语言 ⭐若在许我少年时&#xff0c;一两黄金一两风 目录 前言 一、指针变量和地址 1.1 取地址操作符&#xff08;&&#xff09; 1.2 指针变量和解引用操作符&#xff…

scrapy post请求——百度翻译(十四)

scrapy处理 post 请求 爬取百度翻译界面 目录 1.创建项目及爬虫文件 2.发送post请求 1.创建项目及爬虫文件 scrapy startproject scrapy_104 scrapy genspider translate fanyi.baidu.com 2.发送请求 post请求需要传递参数&#xff0c;所以就不能用start_urls和parse函数了&…

飞天使-docker知识点6-容器dockerfile各项名词解释

文章目录 docker的小技巧dockerfile容器为什么会出现启动了不暂停查看docker 网桥相关信息 docker 数据卷 docker的小技巧 [rootlight-test playbook-vars[]# docker inspect -f "{{.NetworkSettings.IPAddress}}" d3a9ae03ae5f 172.17.0.4docker d3a9ae03ae5f:/etc…

QT----第三天,Visio stdio自定义封装控件,鼠标事件,定时器,事件分发器过滤器,绘图事件

目录 第三天1 自定义控件封装2 QT鼠标事件3 定时器4 event事件分发器5 事件过滤器6 绘图事件Qpainter 源码&#xff1a;CPP学习代码 第三天 1 自定义控件封装 新建一个QT widgetclass&#xff0c;同时生成ui,h,cpp文件 在smallWidget.ui里添加上你想要的控件并调试大小 回到…

《Linux C编程实战》笔记:一些系统调用

目录 dup和dup2函数 fcntl函数 示例程序1 示例程序2 ioctl函数 dup和dup2函数 #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd): dup 函数复制 oldfd 参数所指向的文件描述符。 参数&#xff1a; oldfd&#xff1a;要复制的文件描述符的…

zookeeper4==zookeeper源码阅读,FOLLOWER收到了需要LEADER执行的命令后各节点会执行什么

上面已经阅读并观察了节点确定自己的身份后会做些什么&#xff0c;大致就是比对双方信息然后完成同步。 本篇阅读&#xff0c; FOLLOWER收到了需要LEADER执行的命令后&#xff0c;怎么同步给LEADER的&#xff0c;并且LEADER会执行什么操作。 源码启动zkCli用于测试 将原本的代…

技术阅读周刊第十期

技术阅读周刊&#xff0c;每周更新。 周四加了个班&#xff0c;周五没缓过来&#xff0c;就推迟到今天更新了 历史更新 20231117&#xff1a;第六期20231124&#xff1a;第七期20231201&#xff1a;第八期20231215&#xff1a;第九期 Golang: 14 Shorthand Tricks You Might No…

LLM中的Prompt提示

简介 在LLM中&#xff0c;prompt&#xff08;提示&#xff09;是一个预先设定的条件&#xff0c;它可以限制模型自由发散&#xff0c;而是围绕提示内容进行展开。输入中添加prompt&#xff0c;可以强制模型关注特定的信息&#xff0c;从而提高模型在特定任务上的表现。 结构 …

hive数据仓库工具

1、hive是一套操作数据仓库的应用工具&#xff0c;通过这个工具可实现mapreduce的功能 2、hive的语言是hql[hive query language] 3、官网hive.apache.org 下载hive软件包地址 Welcome! - The Apache Software Foundationhttps://archive.apache.org/ 4、hive在管理数据时分为元…

『踩坑记录』IDEA Spring initialzr新建Spring项目不能选择jdk8的解决方法

问题描述 Spring initializr新建Spring项目不能选低版本java 解决方法 默认官方start.spring.io已不支持自动生成低版本jkd的Spring项目&#xff0c;自定义用阿里云的starter即可 用阿里云的就能支持低版本jdk了 完 欢迎关注我的CSDN博客 &#xff1a;Ho1aAs 版权属于&a…

【C++】 C++11 新特性探索:decltype 和 auto

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ decltype推导变量类型推导函数返回类型 2️⃣ auto自动推导变量类型迭代器和范围循环 3️⃣ decltype 和 auto 同时使用&#x1f6ec; 结论&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 C11 引入了一些强大的新特性&#xff…

LVS负载均衡群集,熟悉LVS的工作模式,了解LVS的调度策略以及ipvsadm工具的命令格式

目录 一、什么是群集 群集的作用&#xff1a; 群集的目的是什么 根据群集所针对的目标差异&#xff0c;可分为三种类型 负载均衡群集&#xff08;LBC&#xff09;load balance cluster 高可用群集&#xff08;HAC&#xff09;high availability cluster 高性能运算群集&a…

MAMOS蓝图: 打造自己的质量工程

针对团队中存在的问题&#xff0c;构造MAMOS蓝图&#xff0c;从而以系统化的方式识别并解决问题。本文将针对减少等待时间这一问题举例说明MAMOS蓝图的组成和使用方式。原文: MAMOS Blueprint: Build your own for Quality at Speed 很难完全摆脱等待时间。 我认为没有必要争论…

在线二进制原码,补码,反码计算器

具体请前往&#xff1a;在线原码/反码/补码计算器

阅读笔记——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

【参考文献】Jeong B, Jang J, Yi H, et al. UTOPIA: automatic generation of fuzz driver using unit tests[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2676-2692.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。…