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这类的值,所以只会输出undefinedconsole.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)

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

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

相关文章

Metasploit Pro 4.22.2-2024031301 (Linux, Windows) 下载 - 专业渗透测试框架

Metasploit Pro 4.22.2-2024031301 (Linux, Windows) 下载 - 专业渗透测试框架 Rapid7 Penetration testing, Release Mar 13, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/metasploit-pro-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者…

centos配置natapp 自动配置

步骤 下载客户端 赋值权限 启动测试是否可用配置natapp.service 设置自动启动 natapp.service 配置的文件夹需要跟 natapp的路径一致 下载配置文件 centos 这里 我用的 natapp_autostart-master\natapp_autostart-master\systemd 文件夹下的 natapp.service 上传natapp到服…

对 Transformer 中位置编码 Position Encoding 的理解

目录 什么是位置编码 Position Encoding 一、将绝对位置编码加在 Transformer 的输入端 (Sinusoidal 位置编码或可学习位置编码) 二、将绝对位置编码乘在 q k v (RoPE 位置编码) 三、将相对位置编码加在注意力权重 (ALiBi 位置编码) 什么是位置编码 Position Encoding Tr…

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…

程序运行之ELF文件的段

更多精彩内容在公众号。 我们将之前的代码增加下变量来具体看下 在代码中增加了全局变量以及静态变量&#xff0c;还有一个简单的函数。 #include <stdio.h> int global_var1; int global_init_var; void func1(int i){ printf("%d\n",i); } int main(vo…

合辑下载 | MatrixOne 与 MySQL 全面对比

前言 MatrixOne是一款高度兼容MySQL语法的HTAP数据库&#xff0c;采用云原生化和存储、计算、事务分离的架构打造了HSTAP超融合数据引擎&#xff0c;实现单一数据库系统同时支持OLTP、OLAP、流计算等多种业务负载。基于MatrixOne高度兼容MySQL的定位&#xff0c;社区的小伙伴在…

【Linux】生产者消费者模型{基于BlockingQueue的PC模型/RAII风格的加锁方式/串行,并行,并发}

文章目录 1.认识PC模型2.基于BlockingQueue的PC模型2.1串行&#xff0c;并行&#xff0c;并发2.2理解linux下的并发2.2RAII风格的加锁方式2.3阻塞队列2.4深入理解pthread_cond_wait2.5整体代码1.Task.hpp2.lockGuard.hpp3.BlockQueue.hpp4.pcModel.cc 3.总结PC模型 1.认识PC模型…

机器学习笔记(2)—单变量线性回归

单变量线性回归 单变量线性回归(Linear Regression with One Variable)1.1 模型表示1.2 代价函数1.3 代价函数的直观理解1.4 梯度下降1.5 梯度下降的直观理解1.6 梯度下降的线性回归 单变量线性回归(Linear Regression with One Variable) ps:...今天很倒霉 一名小女孩悄悄地碎…

以Pycharm为例的生成requirements.txt

一、什么是requirements.txt 通常用于Python项目&#xff0c;其中列出了项目依赖的软件包及其版本号。通过在requirements.txt中列出这些依赖项&#xff0c;可以确保其他用户或开发人员能够轻松地安装项目所需的所有软件包及其特定版本&#xff0c;以便项目能够正常运行。一般…

【Java核心能力】RocketMQ 针对消息有序和消息积压的处理

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

5个免费的3D钣金CAD软件

如果你正在设计简单的折叠钣金零件&#xff0c;则只需设计一些具有圆角半径的法兰&#xff1a;一个简单的钣金模块。 首先&#xff0c;你可以采用老式方式绘图并以 2D 方式完成所有操作。 许多传统制造商仍在使用 2D DWG 和 DXF 图纸。 因此&#xff0c;你很有可能只需快速起草…