js入门经典学习小结

news2024/11/16 0:18:30

 简介

js是解释型语言,虽然名字有java,但和java,c等编译型语言不同,它是解释型的,类似perl,py

历史

90年代最早js 1.0版本是网景navigator2引入的

然后欧洲计算机制造商协会(ECMA)制定ECMASript规范

然后微软开发自己的javascript: jScript

90年代后期网景navigator4和IE4都支持js,但各自的实现方式不同,规范也不同,让开发者感到复杂。然后W3C通过DOM规范各厂商对界面操作的规范

dom

浏览器加载页面,有一个页面结构的内部体系存在内存里,叫DOM,是树形结构,可通过js方便操作dom。

树形结构顶层对象是window对象,它也是全局对象,具有全局作用域,window四个子对象是document, location,history,navigator。html界面都在document对象下,document对象用的也比较多,如果需要对document对象操作,直接执行document.getElementByNames(...),也可以带全局对象操作:window.document.getElementByNames(...)

document有属性document.write('text'),但这个好像会覆盖document下其他元素,不推荐,推荐用dom操作页面对象

如何定义js脚本

两种方法,一种是写到html标签里,一种是写在js文件里,然后在html里用script标签的src属性引入自定义的js文件

// test/test.js
function () {alert('hello world');}
<script>function() {alert('hello world');}</script>
<script src="/test/test.js"></script>

注意,如果用src引入外部js文件,则html的script标签里不能有任何内容

虽然js文件后缀是.js,但浏览器其实可以无视后缀,即你后缀不对但文件内容对也能加载出来

创建简单脚本

思考1 js定义在html还是js脚本

js如果在html定义,放在head还是body?

如果放在body,会解释执行,但是是按顺序的,如果dom没加载出来但js访问了那就会报错,所以如果要定义在body,需要把script放在body末尾

如果放在head,当在body调用时,body肯定都已经加载完了,放在head更易读,也避免了放在body元素未加载完调用js报错问题

思考2 js关于大小写

html不区分大小写 js区分大小写 xhtml区分大小写

注释

单行注释:// this is a note

多行注释: /* this is \n another note */

文件大小

带注释的js文件会稍微大点,一般生产环境部署会压缩js文件,压缩后文件后缀一般是xxx.min.js

关于事件

js用事件处理器处理事件,常见的有onClick,onMouseOver,onMouseOut等,这三个几乎可以用于任何html元素

关于空行

html不会处理空行,除非你用转义字符表示空行

函数

尝试一下

<script>
function buttonReport(buttonId, buttonName, buttonValue) {
	var a = "button id: " + buttonId + "\n";
	var b = "button name: " + buttonName + "\n";
	var c = "button value: " + buttonValue + "\n";
	alert(a + b + c);
}
</script>
<div class="testb"><input id="abc" name="def" value="ghi" onclick="buttonReport(this.id, this.name, this.value)"/>test</div>

返回值

函数没返回值的话则是undefined

匿名函数

看个例子

<script>
var sayHello = function () {alert("hello world");};
</script>
<div class="testb"><p onclick="sayHello()">test</p></div>

更多函数知识

变量作用域

js有 全局作用域 函数作用域 块级作用域

var可声明全局作用域和函数作用域,块级作用域需要用let声明 块的定义可以理解为一个大括号

函数内部如果调用函数外同名变量,如果没有在函数里重新用var声明,则调用的是全局变量,即函数外的变量,在函数内改变这个变量,外部变量也会改变,因为改的是全局变量,是全局作用域

如果在函数内部用var重新声明了外部同名变量,这时这个变量就是函数作用域的了

用let声明的是块级作用域

this

html标签里调用时使用this,表示调用当前的标签对象,需注意的是this后加的属性需要元素拥有才能调用,否则报错,注意注意在注意

如果在js函数内部调用this,则this表示的是调用这个函数的父对象

const

用const可以声明常量,用const声明的常量,不能修改值,也不能重新用var定义,也不能重新用const定义为其他常量

箭头函数

可以理解为匿名函数的另一种简便写法

var sayHello = () => alert('hello world')

默认参数

默认参数一般放在参数列表的末尾,顺序不能错,类似py

dom对象和内置对象

常见用户交互对象方法

alert 类似py的print

confirm 弹出一个模态框 有ok cancel按钮 文本是confirm传入的参数

var sayHello = () => {confirm('hello world');};

prompt 和confirm类似,弹出一个模态框,有一个输入框,最后的值是你输入的值,还提供第二个参数作为输入框里的默认值

var sayHello = () => {prompt('hello world');};

var sayHello = () => {prompt('hello world', "hello kitty");};

常用元素属性方法

根据id或name访问元素:即document.getElementById 注意该方法和document.getElementsByName的区别,一个获取的是单元素,一个获取的是多元素,多元素拿到要再通过下标访问

interHTML:闭合标签夹着的内容可通过修改元素的interHTML属性来修改实现

window.history

可通过history的方法forward backward go三个方法访问历史url,三个方法执行结果分别为前进,后退,按执行参数前进或后退n个页面

window.location

该属性包含了当前页面url信息

应用:

href可以设为location.href实现访问

location.reload()表示刷新页面

window.navigator

保存浏览器本身数据 这个数据长让人捉摸不透 感觉书里不很建议用这个属性

日期和时间

var abc = new Date();

var year = abc.getFullYear();

var month = abc.getMonth();

var date = abc.getDate();

var day = abc.getDay();

var hour = abc.getHours();

var minutes = abc.getMinutes();

var seconds = abc.getSeconds();

with

类似py,例如调用某个模块(math)的方法,使用with,省去了对模块名的访问

数字和字符串

全局方法

toString

将一个数字转化为字符串

toFixed

将数组按指定小数位返回

toExponential

将数字按指数表示法返回

Number.isNaN

Number.parseFloat Number.parseInt

将字符串解析为整数或浮点数,还可以指定数字的基,默认是十进制,也可以指定解析为八进制十六进制等

Number.isFinite

判断数字是否无穷

字符串操作

可以用单引号或双引号定义字符串,类似于py,单引号字串可以包含双引号,反之亦然

length属性

length属性表示字符串长度,这是一个只读属性,无法给他赋值,即使赋值了,length也保持不变

模板字符串

类似py 或 perl的模板字符串,用反引号定义,反引号内的转义字符无需加反斜杠表示

数组

创建数组

两种方法:1 var test = new Array(); 2 var test = [];

一个注意点,超过列表范围的赋值,前面会自动填充undefined,类似py,但py会报错

常用方法

遍历数组

foreach

map

for of

三点操作符

类似py的解包 可能都是解释型语言吧

js事件处理

常见事件

鼠标事件

onclick onmousedown onmouseenter onmouseleave onmousemove onmouseover oncontextmenu ondblclick

键盘事件

onkeydown onkeypress onkeyup

dom事件

onerror onload onresize onscroll

表单事件

onblur onchange onfocus onreset onselect onsubmit

事件处理器

内联事件处理器

即内联在html元素里的事件处理器,需要注意不同元素支持的事件不同,内联定义需要定义元素支持的事件处理器

事件处理函数作为dom属性赋值给事件处理器

即先获取元素,再元素.onclick = function () {alert(9);}这种形式

addEventListener

先获取元素,再element.addEventListener('click', function () {alert(666);})

删除事件监听器:element.removeEventListener('click', func_name)

注意,如果需要对一个事件添加多个处理器,如果

element.onclick = funca; element.onclick = funcb,funcb会覆盖funca

如果用addEventListener,则不会覆盖

event对象

addEventListener时,监听处理函数需要定义一个参数,表示事件对象。事件对象有很多方法 不知道不提供事件参数可不可以 没试过

阻止默认行为

e.preventDefault()阻止事件的默认行为,如果只alert,事件还是会正常发生

事件冒泡与捕获

addEventListener第三个参数接受布尔值参数,表示是否事件冒泡捕获。一般事件触发先出发内层元素事件然后逐步触发外层元素事件,这个默认第三个参数是false会有这现象,如果为true,当事件产生时,会先触发和最外层元素关联的事件处理器,最后触发和最内层元素相关的事件处理器

通过e.stopPropagation()方法可组织事件进一步冒泡

通过e.target属性可看到事件最早是再哪个元素触发的

这个属性可用于事件捕获 你想 这个元素事件触发了,但最先触发的是内层元素的事件,最后才会触发本元素事件 如果想本元素先触发 就需要捕获模式 第三个参数设为true

思考1 鼠标事件顺序?

先后:mousedown mouseup click

思考2 匿名事件处理器如何删除

删除不了 如果要删 必须具名函数

控制语句

==只判断值是否相等 ===判断值和类型是否同时相等

循环

while, do...while, for, for... in四种

定时器

setTimeout用来在指定时间后执行动作,从动作触发到动作发生这段事件,如果想取消动作,可以调用cleartimeout方法,参数传递用setTimeout的返回值

setInterval是周期任务,如果想取消,也是先保存setinterval的值,调用clearInterval取消定时任务

面向对象编程

创建对象几种方法:1 new Object() 2 定义函数function test() {this.info = "666"}; var a = new test() 3 通过prototype继承或扩展。注意继承,让子类的prototype等于一个父类对象新建的实例即可

对象进阶

和上一章相比,可以用关键字class代替函数式创建实例。区别:class省去了很多function关键字,用属性和方法取而代之,可以理解为一种语法糖,class还有构造函数constructor,产生对象的调用方式一样,直接new

constructor构造函数在class不可缺省 constroctor构造函数也不支持多态 只能有一个

getter和setter

symbol

一种js数据类型,特点是独立,比如12==12为true,但Symbol(12)==Symbol(12)为false

class继承

class关键字继承语法为class son extends parent {constroctor...}

子类调用父类方法直接用super关键字

功能检测

可使用if来检测函数是否存在,判别条件为document.func_name就行,用自身的逻辑值

或者也可以用typeof document.func_namea == 'function'判别

dom脚本编程

常用属性

节点类型:元素有个属性nodeType可查看元素类型,值范围1-12,常见的类型是123

子节点属性:childNodes,是子元素的集合表示,集合也可以用下标访问,但有些数组方法不能用

可以通过firstChild和lastChild属性访问元素的首个/末个子节点

parentNode可访问父节点

nextSibling和previousSibling可访问下一个 前一个兄弟节点

nodeName可查看元素标签名

nodeValue可查看元素值,可用于获取元素内的text值,目前有两种方法,innerHTML或childnodes[0]

应用

可以通过document.getElementsByxxx等方法结合上述属性进行逻辑判断选择dom进行dom操作

常用方法

element.getAttribute

创建节点

var nodea = document.createElement("div")

var nodeb = document.createTextNode("your text")

var nodec = nodea.cloneNode(true) 参数true/false表示是否复制节点下的所有子节点

注意元素的id是唯一的,复制的元素id会重复,所以复制完需要修改元素id

将节点放入dom树

nodea.appendChild(nodeb) 将新节点添加到父节点的最后一个子节点,所以新增元素总是lastChild

nodea.insertBefore(nodeb, nodec) 将nodeb添加到nodea下nodec前面

nodea.replaceChild(nodeb, nodec) 将nodea下的nodec用nodeb代替

注意,添加p元素,除了var p = createElement("p")如果希望p有文字还需要var text = createTextNode("your text"),然后p.appendChild(text)把文本节点加到p元素

nodea.removeChild(nodeb) 删除nodea下的nodeb,如果不方便引用父元素,可以用parentNode属性代替:nodea.parentChild.removeChild(nodeb)

动态加载js文件:思路新增script元素,然后改script节点的src属性,值是你要加载的js文件路径,然后将元素加到head dom里

json

基础

类似py字典,直接定义就行

可使用JSON.parse解析字符串为json对象

可用JSON.stringify将json对象变成字符串

html js css

可通过className改变元素的类名

通过document.styleSheets可访问页面上全部样式表,length查看样式表数量

启用,禁用样式表:document.styleSheets[0].disabled= true/false

厂商前缀

css3在各浏览器未完全支持前,每个厂商会有前缀,个浏览器完全支持后,这些前缀则可省略了

使用前缀时,在属性前加前缀即可

边框

边框阴影:box-shadow 参数是阴影长,阴影款,模糊距离,颜色等

背景

background-size

background-origin 见css揭秘-学习小结-CSDN博客

多背景:通过background-image实现,逗号分隔多个图像即可,第一个在最上层,逐层往下

js中使用css3

css3属性名在js中转换,js中如果使用属性操作符(即一个点)需要将css属性连字符去掉,然后驼峰属性写法来引用

document.getComputedStyle用来获取元素经过最终计算得到的属性:getComputedStyle(document.getElementById("abc")).getPropertyValue("borderRadius")

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

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

相关文章

链上数字供应链高级研修班举办 隆道总裁吴树贵分享供应链数字化实践

8月8日-8月9日&#xff0c;链上数字产业研究院联合中国物流与采购联合会举办的“链上数字供应链高级研修班”在上海开班&#xff0c;隆道公司总裁吴树贵作为培训讲师出席&#xff0c;并系统地分享了供应链理论及数字化转型创新实践经验。 “链上数字供应链高级研修班”旨在贯彻…

TCP详解(一)报文详情/MSS/MTU

本文旨在介绍TCP的报文格式详情和传输层、链路层的字节数限制 1 TCP 协议的报文格式 TCP 报文段包括协议首部和数据两部分&#xff0c;协议首部的固定部分是 20 个字节&#xff0c;头部是固定部分&#xff0c;后面是选项部分。 1.1 端口号 16位源端口&#xff1a;发送方主机…

笔记:在WPF中如何控件级全局事件和应用程序级全局事件

一、目的&#xff1a;在WPF中如何控件级全局事件和应用程序级全局事件 二、实现 应用程序级全局事件 //注册应用程序级全局事件 EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, new RoutedEventHandler(ic_event_Click)); 如上代码既会注册全局Butt…

Linux--C语言之循环结构

文章目录 一、循环结构&#xff08;一&#xff09;循环的概念&#xff08;二&#xff09;循环的类型&#xff08;三&#xff09;循环的构成&#xff08;四&#xff09;当型循环的实现while死循环 &#xff08;五&#xff09;for...总结死循环 &#xff08;七&#xff09;循环实…

数据结构:链式二叉树(2)

目录 前言 一、节点个数 1.1 二叉树的节点个数 1.2 二叉树叶子节点个数 1.3 二叉树第k层节点个数 二、查找值为x的节点 三、判断二叉树是否为完全二叉树 前言 上一篇 链式二叉树&#xff08;1&#xff09;&#xff0c;主要是讲了了一些链式二叉树的实现基础以及链式二叉…

day28 代码随想录 | 贪心 买卖股票 跳跃游戏 K次取反

买卖股票的最佳时机 II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。返回 你能获得的 …

测绘工程项目管理系统,为测绘企业量身定制!测绘项目一体化管理

在日益复杂的测绘工程项目管理领域&#xff0c;高效、精准的信息化管理成为提升工作效率、降低运营成本的关键。企智汇软件&#xff0c;作为一款专为勘察、设计、监测、测绘等多元化工程项目量身打造的管理系统&#xff0c;正逐步成为行业内的佼佼者。 企智汇测绘管理系统深度…

Java FX 学习

声明&#xff1a;参考视频 一. Stage与Scene 舞台与场景&#xff1a;JavaFX应用程序将Ul容器定义为舞台&#xff08;Stage&#xff09;与场景&#xff08;Scene&#xff09;Stage类是顶级容器&#xff0c;它对应于窗体&#xff0c;其内容由Scene决定。Scene类是所有可视化内容…

运维监控体系实践与探索

在当今的数字化时代&#xff0c;运维工作作为企业IT服务的核心&#xff0c;面临着前所未有的挑战与机遇。随着业务规模的扩大和技术栈的复杂化&#xff0c;如何确保系统稳定运行、高效响应&#xff0c;成为运维团队亟需解决的问题。监控体系作为运维工作的基石&#xff0c;其建…

Python+selenium基于PO模式的Web自动化测试框架详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主…

分布式锁 分布式锁解决了什么问题 如何实现 看门狗机制是什么

分布式锁的基本概念 在 Redis 中实现分布式锁的常用方式是通过 SETNX 命令&#xff08;SET with NX option&#xff09;来设置一个键&#xff08;key&#xff09;&#xff0c;这个键代表锁。如果 key 不存在&#xff0c;SETNX 会设置成功&#xff0c;并返回 1&#xff0c;表示…

【LinuxPython】linux中通过源码方式安装python环境

python环境安装直接看第二部分即可。 文章目录 1.背景2.python安装3.包环境复制 1.背景 部署一个线上任务时&#xff0c;相同的代码本地开发机正常产出数据&#xff0c;线上产出数据为0&#xff0c;排查到原因是&#xff1a; ...File "/home/disk1/wangdeyong/venv/pyth…

linux搭建zabbix

zabbix简介 Zabbix是一个监控系统&#xff0c;它可以帮助我们实时检查设备的状态&#xff0c;比如服务器、网络设备等。当设备出现问题时&#xff0c;它会及时通知我们&#xff0c;让我们可以采取措施来解决。同时&#xff0c;它还可以把收集到的数据转化成图表和报告&#xf…

ITL-Internet Technology Letters

文章目录 一、期刊简介二、征稿信息三、投稿须知四、咨询 一、期刊简介 Internet Technology Letters本期旨在涵盖所有用于提高物联网性能的新兴或现代学习算法。在此背景下&#xff0c;我们打算收集有关物联网学习进展的研究论文。强烈鼓励与机器学习、计算智能、概率学习、统…

树和图()

预备知识&#xff08;可以不看&#xff09;&#xff1a; 无向图可以理解为是特殊的有向图 1. 图的遍历&#xff08;因为树可以理解为是特殊的图&#xff0c;因此这里不考虑树的遍历&#xff0c;只考虑图的遍历&#xff09; 给定一个具体的图&#xff0c;便于分析 下面是树的结构…

Servlet——个人笔记

Servlet——个人笔记 文章目录 [toc]Servlet简介Servlet命名Servlet由来实现过程 Servlet 相对 CGI 的优势简要说说什么是CGI Servlet 在IDEA中开发流程Servlet注解方式配置WebServlet注解源码WebServlet注解使用 Servlet常见容器Servlet 生命周期简介测试 Servlet 方法init()…

交叉编译util-linux

参考文章&#xff1a;https://www.cnblogs.com/wanglouxiaozi/p/17836701.html 1、下载源码 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.39/2、编译 解压压缩包&#xff1a; sudo tar xvf util-linux-2.39.2.tar.gz执行autogen.sh生成configure ./aut…

解锁眼部舒压新境界:WT2605C-AT-L009眼部按摩仪蓝牙语音方案,手机APP控制,让护眼更轻松!

一、开发背景&#xff1a; 随着科技的飞速发展和人们生活品质的提升&#xff0c;眼部按摩仪作为一种能够缓解眼部疲劳、改善眼部血液循环的健康产品&#xff0c;越来越受到消费者的青睐。在众多眼部按摩仪中&#xff0c;采用WT2605C-AT-L009蓝牙模块的应用方案&#xff0c;不仅…

优思学院|PDCA和DMAIC之间如何选择?

在现代组织中&#xff0c;提升方法、质量和效率是企业追求卓越、保持竞争力的核心目标。在这条道路上&#xff0c;DMAIC&#xff08;定义、测量、分析、改进、控制&#xff09;和PDCA&#xff08;计划、执行、检查、行动&#xff09;被广泛应用于持续改进和问题解决。这两者虽然…

基于Java的大学新生入学系统设计与实现----附源码17610

摘要 随着高校规模的不断扩大和新生人数的增加&#xff0c;传统的手工登记和管理方式已经无法满足高效、准确的需求。为了提升大学新生入学迎新工作的效率和质量&#xff0c;本研究设计开发了一套基于Java的大学新生入学系统。系统通过信息技术的应用&#xff0c;集成了首页、校…