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.mzph.cn/news/229606.shtml

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

相关文章

Vue 项目关于在生产环境下调试

前言 开发项目时&#xff0c;在本地调试没问题&#xff0c;但是部署到生产会遇到一些很奇怪的问题&#xff0c;本地又没法调&#xff0c;就需要在生产环境/域名下进行调试。 在这里介绍一个插件Vue force dev ,浏览器扩展里下载 即便是设置了Vue.config.devtoolsfalse 只要安…

认知能力测验,③如何破解语言常识类测试题?

作为认知能力测评中的一个环节&#xff0c;语言常识类&#xff0c;是大概率的出现&#xff0c;不同的用人单位可能略有不同&#xff0c;语言是一切的基础&#xff0c;而常识则意味着我们的知识面的宽度。 语言常识类的测试&#xff0c;如果要说技巧&#xff1f;难说....更多的…

maui sqlite开发一个商城加购物车的演示(3)

购物车界面及代码 <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:syncfusion"clr-namesp…

ArcMap自定义脚本工具箱迁移至ArcGIS pro

本文记录了将ArcMap10.7创建的自定义脚本工具箱&#xff08;.tbx&#xff09;迁移至ArcGIS pro的过程 ArcGIS Pro使用的是python版本与ArcMap不同&#xff0c;前者为python3&#xff0c;后者为python2。由于python3 和 python2 的部分语法不兼容&#xff0c;以及一些地理处理工…

87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验

瞬间爆火的Mixtral 8x7B 大家好&#xff0c;我是老章 最近风头最盛的大模型当属Mistral AI 发布的Mixtral 8x7B了&#xff0c;火爆程度压过Google的Gemini。 缘起是MistralAI二话不说&#xff0c;直接在其推特账号上甩出了一个87GB的种子 随后Mixtral公布了模型的一些细节&am…

vue3的大致使用

<template><div class"login_wrap"><div class"form_wrap"> <!-- 账号输入--> <el-form ref"formRef" :model"user" class"demo-dynamic" > <!--prop要跟属性名称对应-->…

磁力计LIS2MDL开发(3)----九轴姿态解算

磁力计LIS2MDL开发.3--九轴姿态解算 概述视频教学样品申请完整代码下载使用硬件欧拉角万向节死锁四元数法姿态解算双环PI控制器偏航角陀螺仪解析代码 概述 LIS2MDL 包含三轴磁力计。 lsm6ds3trc包含三轴陀螺仪与三轴加速度计。 姿态有多种数学表示方式&#xff0c;常见的是四元…

服务器RAID配置及功能介绍

服务器RAID配置及功能介绍 一、RAID磁盘阵列详解1.RAID磁盘阵列介绍2.RAID 03.RAID14.RAID35.RAID56.RAID67.RAID 10总结阵列卡介绍 一、RAID磁盘阵列详解 1.RAID磁盘阵列介绍 ①是Redundant Array of lndependent Disks的缩写中文简称为独立冗余磁盘阵列。 ②把多块独立的物…

NBA得分数据可视化

简介 这是上学期的一些课外活动内容&#xff0c;将 NBA 得分数据进行可视化&#xff0c;并进行后续的探索性分析和建模&#xff08;本文未介绍&#xff09;。主要研究动机来源于这篇论文&#xff1a; 该论文使用二元的伽马过程来刻画 NBA 主客场得分数据&#xff0c;并且考虑了…

5.5 Linux Apache服务

1、概念介绍 a. Web 服务简介 WEB服务器也称为WWW(WORLD WIDE WEB&#xff0c;万维网)服务器&#xff0c;主要功能是提供网上信息浏览服务。 常用web服务器&#xff1a;httpd&#xff08;apache&#xff09;、nginx、tomcat、IIS 客户端&#xff1a;IE、firefox、chrome b…

高通平台开发系列讲解(AI篇)SNPE工作流程介绍

文章目录 一、转换网络模型二、量化2.1、选择量化或非量化模型2.2、使用离线TensorFlow或Caffe模型2.3、使用非量化DLC初始化SNPE2.4、使用量化DLC初始化SNPE三、准备输入数据四、运行加载网络沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍SNPE模型工作…

学习Java第70天,过滤器Filter简介

过滤器概述 Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一 Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口 Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和…

【C++】POCO学习总结(十八):XML

【C】郭老二博文之&#xff1a;C目录 1、XML文件格式简介 1&#xff09;XML文件的开头一般都有个声明&#xff0c;声明是可选 <&#xff1f;xml version"1.0" encoding"UTF-8"?>2&#xff09;根元素&#xff1a;XML文件最外层的元素 3&#xff…

java内置的数据结构

Java语言提供了许多内置的数据结构&#xff0c;包括&#xff1a; 1. 数组&#xff08;Array&#xff09;&#xff1a;数组是最基本的数据结构之一&#xff0c;它是一个有序的元素集合&#xff0c;每个元素都有一个对应的索引。在Java中&#xff0c;数组可以通过声明和初始化来创…

【从零开始学习--设计模式--策略模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍策…

每天五分钟计算机视觉:网络中的网络(NiN)

本文重点 前面的课程中我们学习了众多的经典网络模型&#xff0c;比如LeNet、AlexNet、VGG等等&#xff0c;这些网络模型都有共同的特点。 它们的特点是&#xff1a;先由卷积层构成的模块充分提取空间特征&#xff0c;然后再由全连接层构成的模块来输出分类结果。也就是说它们…

C练习题_3答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。 以下正确的C语言自定义标识符是(A)A. la B. 2a C. do D. a.12 2.在C语言中,错误的常数表示是(D) A. OL B. 0x6aL C. ‘6’…

Apache SeaTunne简介

Apache SeaTunne简介 文章目录 1.Apache SeaTunne是什么&#xff1f;1.1[官网](https://seatunnel.apache.org/)1.2 项目地址 2.架构3.特性3.1 丰富且可扩展的连接器和插件机制3.2 支持分布式快照算法以确保数据一致性3.3 支持流、批数据处理&#xff0c;支持全量、增量和实时数…

Linux_Docker图形化工具Portainer如何安装并结合内网穿透实现远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…

频谱论文:基于张量Tucker分解的频谱地图构建算法

#频谱# [1]陈智博,胡景明,张邦宁 郭道省.(2023).基于张量Tucker分解的频谱地图构建算法.电子与信息学报(11),4161-4169. &#xff08;陆军工程大学&#xff09; 研究内容 将动态电磁环境的时变频谱地图建模为3维频谱张量&#xff0c;通过张量Tucker分解提取出具有物理意义的核…