JavaScript的学习笔记

<script src="index.js" defer></script>,defer的作用是延迟加载index.js文件

定义变量

变量的类型分为两大类:基本类型和复合类型

JavaScript是一种弱类型语言,所以没有强类型语言所具有的int,float,char等等,而任何变量的定义都是以var来实现的,只会根据所赋值来确定其类型。

基本类型

基本类型分为五种:数值类型,字符串类型,布尔类型,undefined类型,null类型

var a=0.8;
var b="abcdef";
var c=true;
var d=undefined;//与var d;且不给d赋值是一样的

我们可以使用运算符typeof来查看类型

typeof "John" // 返回 string 
typeof 3.14// 返回 number 
typeof false// 返回 boolean 
typeof [1,2,3,4]// 返回 object 
typeof {name:'John', age:34}// 返回 object

复合类型

复合类型分为:数组类型,对象类型,函数类型

对象类型的访问方式有两种使用.或者对类数组的访问方式。例如

var obj=
{
    name:"张三",
    age:29,
    banks:["工商银行","建设银行"],
}
console.log(obj.banks[0]);
console.log(obj["banks"][0]); //这两种访问方式都可以访问到 工商银行

值得注意的是,第一种访问方式并不是任何条件下都可以正确访问。例如

for(var key in obj)
{
	console.log(obj.key);// 在这中情况下key只是被obj当作一个类似与name、age这类的值,所以只会输出undefined
	console.log(obj[key]);// key只是一个字符串,所以是可以的
}

函数变量

命名函数与匿名函数

// 命名函数
function 方法名(参数列表)
{
	...
	...
}
// 匿名函数
function(参数列表)
{
	...
	...
}

而匿名函数是没有方法名的,所以他必须当作一个值赋给一个变量,但是命名函数也可以赋给一个变量。

函数的使用

在js中没有函数重载,只有覆盖(根据代码的出现位置,越晚出现的就会覆盖掉越早出现的),而且在使用函数时的参数不是必须的。例如

function test()
{
    console.log("我是无参函数")
}
function test(a,b)
{
    console.log("我是有参函数 "+a+","+b)
    return 8;
}
test()
test(4)
test(4,5)

运行结果:

![[Pasted image 20230827232252.png]]

在使用函数时有两种使用方法:

  1. 函数整体作为值来使用

    var a=test
    console.log(a)
    a(4,5)
    

    运行结果:

    ![[Pasted image 20230827232623.png]]

    setInterval(test,1000) //等同于setInterval("test()",1000)
    					   //这个函数的意思是每1000ms执行一次test()
    //setInterval("test(4,5)",1000) 每1000ms执行一次test(4,5)
    

    运行结果:

    ![[Pasted image 20230828135708.png]]

  2. 函数返回值作为值来使用

    var a=test()
    console.log(a)
    

    运行结果:

    ![[Pasted image 20230827233009.png]]

事件

在js中事件就是与人绑定的函数,认为触发函数就叫做事件。事件是具有传播机制的,传播机制的必备条件是元素嵌套以及相同的事件(函数)。

事件的传播机制:

  • 由内到外的冒泡机制(浏览器默认机制)
  • 由外到内的捕获机制

![[Pasted image 20230828141904.png]]

下边是具有嵌套的html

<div class="par" style="width:100px;height:100px;background-color: #2ac">
    <div class="ch" style="width:50px;height:50px;background-color: pink">
    </div>
</div>

![[Pasted image 20230828143438.png]]

冒泡机制

var p=document.querySelector(".par")
var c=document.querySelector(".ch")

c.onclick=function(){
    console.log("子级元素触发了")
}
p.onclick=function(){
    console.log("父级元素触发了")
}

点击粉色区域(子元素)后的运行结果:

![[Pasted image 20230828144044.png]]

捕获机制

var p=document.querySelector(".par")
var c=document.querySelector(".ch")

c.addEventListener("click",function(){
    console.log("子级元素触发了")
},true)
p.addEventListener("click",function(){
    console.log("父级元素触发了")
},true)

点击粉色区域(子元素)后的运行结果:

![[Pasted image 20230828145411.png]]

在设置捕获机制是使用到了函数addEventListener(event,function,bool),他有三个参数,第一个是事件的种类例如click,mouseenter等等;第二个参数是触发的方法;第三个参数是一个bool值,true表示捕获机制,false表示冒泡机制,如果不写第三个参数,则是undefined会被js当作false处理。

js中也有阻断传播机制设置。event.stopPropagation():调用该方法可以阻止事件在当前元素上继续传播,无论是在捕获阶段还是冒泡阶段。如果事件在捕获阶段触发,调用这个方法会阻止影响子元素。如果事件在冒泡阶段触发,调用这个方法会立即停止冒泡,不会再传播给父元素及其祖先元素。如果在同一个元素上有多个事件处理函数,调用这个方法只会阻止事件传播,但不会影响其他处理函数的执行。例如

stopPropagation(),这个方法是由每一个function的隐藏参数调用的,每一个function都有一个隐藏参数代表方法本身,只需在参数列表中只指明参数然后调用即可。

c.onclick=function(e){
    e.stopPropagation();
    console.log("子级元素触发了")
}

p.onclick=function(){
    console.log("父级元素触发了")
}

点击粉色区域(子元素)后的运行结果:

在这里插入图片描述

dom 增删改查

  1. 以id查找 getElmentById(),只会获取复合条件的第一个元素
  2. 以class查找getElemnetsByClass(),会获取复合条件的所有元素,存到一个数组之中
  3. 以元素名称来查找元素们 getElementsByTagName() 会获取符合条件的所有元素
  4. 以选择器来查找元素 querySelector() 只会获取符合条件的第一个元素
  5. 以选择器来查找元素们 querySelectorA11() 会获取符合条件的所有元素
  6. 根据元素之间的关系查找
    1. partentNode,parentElemnet 当前节点的父亲节点
    2. childNodes 当前节点的所有孩子节点(元素节点和文本节点,可以通过NodeType属性来筛选)
    3. children 当前节点的所有孩子节点(只包含元素节点)
    4. previousSibling 获取当前节点的上一个节点,注意文本节点的存在
    5. previousElementSibling 获取当前节点的上一个元素节点
    6. nextSibling 获取当前节点的下一个节点,注意文本节点的存在
    7. nextElementSibling 获取当前节点的下一个元素节点
    8. firstChild 获取当前节点的第一个孩子节点,注意文本节点的存在
    9. firstElementChild 获取当前节点的第一个元素孩子节点
    10. lastChild 获取当前节点的最后一个孩子节点,注意文本节点的存在
    11. lastElementChild 获取当前节点的最后一个元素孩子节点

removeChild(TargetNode),删除其孩子节点TargetNode

删除改节点时,只需找到他的父亲节点即可。例如

x.parentNode.rmoveChild(x);//就是删除x元素

修改内容

修改 | 获取,要修改内容就要先获取内容所以修改和获取本质是一样的。

  1. innerHTML(非表单元素,包含html元素)
  2. innerText(非表单内容,只包含纯文本 )
  3. value(表单控件)

例如:

    <div class="d1" style="background:#2ac">innerHTML</div>
    <div class="d2" style="background:#2ac">innerText</div>

![[Pasted image 20230829094930.png]]

document.onclick=function(){  //点击页面任意位置
    var d1=document.querySelector(".d1")
    d1.innerHTML="<h3>123</h3>"
    var d2=document.querySelector(".d2")
    d2.innerText="<h3>123</h3>"
}

![[Pasted image 20230829095227.png]]

修改属性

修改属性 setAttribute() 有两个参数第一个是属性的名称,第二个是属性的值;获取属性getAttribute()

修改各个标签的属性,可以通过console.dir()来查看标签的各种属性。以上两种方法对于原生属性以及自定义属性都可以使用。而通过直接用.来获取并修改只适用于原生属性(例如value,class等)

增加元素是分为两步,第一步是创建或复制元素,第二步是添加到已有元素中

创建或复制元素。创建元素createElement(),复制元素cloneNode(boolean) true 深度复制,false 浅复制

添加到已有元素中。追加parentNode.appendChild(newnode),插入parentNode.insertBefore(newNode,refNode)。都是作为parentNode的孩子节点

定时器

周期定时器 setInterval(function,time) 延时定时器 setTimeout(function,time)。第一个参数是函数,第二个参数是时间间隔,单位时ms。

他们都有一个返回值,这个返回值就是每一次定时器的标志,可以通过标志来停止定时器。例如

var timer=setInterval(function(){
	...
},1000)
clearInterval(timer) //停止定时器 clearTimeout(timer)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无药可医还能怎么办?越没本事的人,越喜欢从别人身上找原因!——早读(逆天打工人爬取热门微信文章解读)

无药可医的病该怎么办呢&#xff1f; 引言Python 代码第一篇 洞见 《骆驼祥子》&#xff1a;越没本事的人&#xff0c;越喜欢从别人身上找原因第二篇 人民日报 来啦 新闻早班车要闻社会政策 结尾 “吾日三省吾身&#xff0c;而后深知自助者天助之。” 在人生的迷宫中 遭遇困境时…

域环境共享文件夹,容量配额管理

首先&#xff0c;我们先创建一个新的磁盘&#xff0c;必须在服务器关机的状态下创建&#xff0c;只有在关机状态下才能创建NVMe类型的磁盘。 打开此电脑&#xff0c;右击创建的磁盘&#xff0c;点击属性。 点击共享&#xff0c;点击高级共享。 将共享此文件夹勾选上&#xff0c…

蓝桥杯 第2945题 课程抢购 C++ Java Python

目录 题目 思路和解题方法 c 代码 Java 版本&#xff08;仅供参考&#xff09; Python 版本&#xff08;仅供参考&#xff09; 代码细节&#xff1a; C 代码细节解释: Python 代码细节解释: lenyan算法笔记 语雀 《lenyan算法笔记》 个人笔记日常更新。含金量不高。/…

ZNC3罗德与施瓦茨ZNC3网络分析仪

181/2461/8938产品概述&#xff1a; 罗德与施瓦茨 ZNC3 网络分析仪的工作频率范围为 9 kHz 至 3 GHz&#xff0c;面向移动无线电和电子产品行业的应用。它具有双向测试装置&#xff0c;用于测量有源和无源 DUT 的所有四个 S 参数。此外&#xff0c;它还提供适合开发和生产中各…

2023年第十四届蓝桥杯大赛软件类省赛C/C++研究生组真题(代码完整题解)

C题-翻转⭐ 标签:贪心 简述:如果 S 中存在子串 101 或者 010,就可以将其分别变为 111 和 000,操作可以无限重复。最少翻转多少次可以把 S 变成和 T 一样。 链接: 翻转 思路:要求步骤最少->S每个位置最多修改一次->从头开始遍历不匹配就翻转->翻转不了就-1 …

esp32中vscode的开发环境

vscode中安装esp32开发环境请参考&#xff1a;CSDN 1、调出esp32的控制面板View ->Command Paletter&#xff0c;或者快捷键&#xff08;ctrshitp&#xff09; 调出esp-idf的样例工程 选择ESP-IDF所在的安装路径 选择一个样例工程&#xff0c;作为工程模板 创建的新工程如…

基于springboot实现课程作业管理系统项目【项目源码+论文说明】

基于springboot实现课程作业管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;课程作业管理系统当然也不能排除在外。课程作业管理系统是以实际运用为开发背景…

swift中的autoreleasepool(自动释放池)有用么?

想到一个问题 swift中的autoreleasepool(自动释放池)有用么? 我们进行验证一下 首先我们写一个加载图片的方法,保证会真正用到真实的IMP内存func loadBigData(string: String?) {if let path Bundle.main.path(forResource: "big", ofType: "png") {for…

[数据库]windows环境安装mysql数据库服务

mysql介绍 MySQL是一个流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是由瑞典的MySQL AB公司开发&#xff0c;后来被Sun Microsystems收购&#xff0c;再后来Sun被Oracle收购。MySQL以其稳定性、可靠性、高性能和开放源代码的特性而闻名&#xff0c…

完整部署一套k8s-v.1.28.0版本的集群

一、系统情况 虚拟机版本&#xff1a;esxi 6.7 系统版本&#xff1a;centos7.9_2009_x86 配置&#xff1a;4核8G&#xff08;官网最低要求2核2G&#xff09; 192.168.0.137 master节点 192.168.0.139 node2节点 192.168.0.138 node1节点&#xff08;节点扩容练习&#xf…

剑指Offer题目笔记21(计数排序)

面试题74&#xff1a; 问题&#xff1a; ​ 输入一个区间的集合&#xff0c;将重叠的区间合并。 解决方案&#xff1a; ​ 先将所有区间按照起始位置排序&#xff0c;然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并&#xff0c;然后判断合并…

C++ namespace 使用梳理

前言 发现 namespace 这个小细节在工作项目中处理的有一点点小混乱&#xff0c;于是稍微梳理了一下关于 C namespace 使用相关的使用内容&#xff0c;为日后项目的重构做准备&#xff0c;虽然是很小的点&#xff0c;但是也是值得注意的&#xff0c;毕竟代码的质量体现在每一个…

Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(二)项目实现-第五篇-核心功能车票预定开发及nacos集成

本文参考自 Springboot3微服务实战12306高性能售票系统 - 慕课网 (imooc.com) 本文是仿12306项目实战第&#xff08;二&#xff09;章——项目实现 的第五篇&#xff0c;本篇讲解该项目的核心功能——余票查询、车票预定功能的基础版开发&#xff0c;以及讲解项目与Nacos的集成…

linux 下固定摄像头的设备名字

为什么写着一篇文章 在做基于ARM-Linux的垃圾分类垃圾桶的时候&#xff0c;在不小心松动usb摄像头的或者是重新连接的时候&#xff0c;摄像头的编号会改变。有时候etc/udev/video2 &#xff0c;有时etc/udev/video3这样使得每次运行的时候都需要修改编号。 什么是udev规则 u…

Pillow教程03:图像处理的基本步骤+分离split+合并merge+混合blend+composite遮罩

--------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁剪…

mysql进阶知识总结

1.存储引擎 1.1MySQL体系结构 1).连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证…

关于v114之后的chromedriver及存放路径

使用selenium调用浏览器时&#xff0c;我一直调用谷歌浏览器&#xff0c;可浏览器升级后&#xff0c;就会再次遇到以前遇到过的各种问题&#xff0c;诸如&#xff1a;1、怎么关闭浏览器更新&#xff1b;2、去哪儿下载chromedriver&#xff1b;3、114版本之后的驱动去哪儿下载&a…

面试题:JVM的垃圾回收

一、GC概念 为了让程序员更专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以&#xff0c;在Java语言中&#xff0c;有了自动的垃圾回收机制&#xff0c;也就是我们熟悉的GC(Garbage Collection)。 有了垃圾回收机制后&#xff0c;程序员只需要关…

力扣2. 两数相加

Problem: 2. 两数相加 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建虚拟头节点dummy&#xff0c;用于存储相加的结果数字&#xff1b; 2.让指针p1、p2、tail分别指向l1、l2、dummy&#xff0c;定义int变量carry记录每次相加的进位值&#xff1b; 3.当p1不为空或者p2不…

双非计算机考研目标211,选11408还是22408更稳?

求稳得话&#xff0c;11408比22408要稳&#xff01; 很多同学只知道&#xff0c;11408和22408在考察的科目上有区别&#xff0c;比如&#xff1a; 11408考的是考研数学一和英语一&#xff0c;22408考察的是考研数学二和英语二&#xff1a; 考研数学一和考研数学二的区别大吗…