当前位置: 首页 > news >正文

js入门经典学习小结

 简介

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脚本编程

相关文章:

js入门经典学习小结

简介 js是解释型语言&#xff0c;虽然名字有java&#xff0c;但和java&#xff0c;c等编译型语言不同&#xff0c;它是解释型的&#xff0c;类似perl&#xff0c;py 历史 90年代最早js 1.0版本是网景navigator2引入的 然后欧洲计算机制造商协会&#xff08;ECMA&#xff09…...

nps内网穿透之——腾讯云服务器和linux虚拟机

准备 1、客户端&#xff1a;准备一个内网的linux内网主机&#xff0c;或是一个虚拟机。 2、服务端&#xff1a;准备一个云服务器&#xff08;阿里、腾讯、华为都行&#xff09;。 安装方式&#xff1a; 1、自己到Github官网下载安装包上传。 下载地址&#xff1a;https://…...

大数据知识点

VMWare 设置网段 虚拟机设置 JDK部署 云平台 创建VPC 找到阿里云控制台里的VPC&#xff0c;点击专有网络 安全组 搁置…有需要再使用&#xff0c;因为每月要花200左右 大数据 数据导论...

【计算机毕设项目】2025级计算机专业项目推荐 (前后端Web项目)

以下项目选题适合计算机专业大部分专业&#xff0c;技术栈主要为&#xff1a;Java语言&#xff0c;SSMVue框架&#xff0c;MySQL数据库 后台免费获取源码&#xff0c;可提供远程调试、环境安装配置服务&#xff08;文末有联系方式&#xff09; 以下是本次部分项目推荐1-end&a…...

【MySQL】2.MySQL实际操作

目录 一、数据分析基本流程 注&#xff1a;Navicat快捷键 二、获取数据后的代码操作 &#xff08;1&#xff09;探索数据&#xff0c;查看定义 &#xff08;2&#xff09;筛选有用的字段 &#xff08;3&#xff09;建新表&#xff08;查询建表插值 三合一&#xff09; 注意…...

Winform画圆以及无边框窗体的移动

普通圆 在WinForms中绘制一个圆形&#xff0c;可以通过几种方式实现&#xff1a; 1. 使用ControlPaint类 在窗体的Paint事件中使用ControlPaint.DrawCircle方法来绘制圆形。 private void Form1_Paint(object sender, PaintEventArgs e) {int x 100; // 圆心的X坐标int y …...

如何高效记录并整理编程学习笔记?

高效记录并整理编程学习笔记是提升编程学习效率和效果的重要方法。以下是一些具体的步骤、工具及其使用方法的介绍&#xff1a; 一、高效记录笔记的方法 专注理解&#xff1a;在记录笔记时&#xff0c;首先要保持高度的专注&#xff0c;努力理解老师或教程中讲解的知识点。避免…...

docker的安装和常用命令

docker的安装和常用命令 安装老版本新版本 镜像源配置常用命令基本命令清理文件复制构建镜像上传镜像 补充权限不足无目录权限无用户权限 容器访问jenkins推送镜像失败修改主机名编写Dockerfile 注&#xff1a;这里的安装是针对于cetnos7。 安装 老版本 安装老版本可能遇到报…...

haproxy 7000字配图超详细教程 从小白到入门

简介&#xff1a;HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力&#xff0c;具备丰富的功能。HAProxy的社区非常活跃&#xff0c;版本更新快速,HAProxy具备媲美商用负载均衡器的性能和稳…...

使用 LangChain 掌握检索增强生成 (RAG) 的终极指南:5、将自然语言问题转换为结构化查询

5. 查询构建 — Ragatouille 用户用自然语言提出问题并被路由到特定数据源&#xff08;例如&#xff0c;向量存储、图形数据库等&#xff09;后&#xff0c;该问题需要被转换为结构化查询&#xff0c;以便从选定的数据源检索信息&#xff08;例如&#xff0c;文本到SQL、文本到…...

浅析JavaScript 堆内存及其通过 Chrome DevTools 捕获堆快照的方法

JavaScript 的堆内存&#xff08;Heap Memory&#xff09;是内存中专门用于存放程序执行过程中动态生成的对象、函数实例以及其他动态数据结构的区域。与调用栈&#xff08;Call Stack&#xff09;专注于管理函数调用的顺序和执行环境不同&#xff0c;堆内存则专注于动态地分配…...

C++学习笔记----2、使用C++进行优雅编程(五)----命名

C编译器对于命名有如下规则&#xff1a; 命名中可以有大小写字母、数字、下划线。字母不限于英文字符&#xff0c;可以是任意国家语言的字母&#xff0c;例如日文&#xff0c;阿拉伯文等。不能以数字开头&#xff0c;例如9to5。包含双下划线的被标准库保留不可使用&#xff0c…...

Element UI顶部导航栏与左侧导航栏联动实现~

需求&#xff1a;点击顶部导航栏的不同栏位实现左侧导航栏菜单的不同展示实现联动效果。 点击顶部导航栏按钮将对应的左侧导航栏数据传递给vuex,并在左侧导航栏父组件中接收并传递给左侧导航栏子组件&#xff0c;使用递归组件实现渲染等&#xff0c;具体的优化可以看下面的注释…...

ECMAScript6模板字面量:反引号、${}占位符的使用

ECMAScript 6 中引入了模板字面量&#xff0c;主要通过多行字符串和字符串占位符对字符串进行增强操作。如下&#xff1a; //使用ECMAScript6模板字面量拼接字符串&#xff0c;例如&#xff1a;2024年8月12日 15:38:28 星期一 let dateRet ${Year}年${Month}月${Dates}日 ${H…...

网关与AWS云心跳周期,网关断电或者网络不稳定的离线机制

当mqtt连线建立时, 需要指定keep alive参数,当 iot core在1.5倍 keep alive timeout时长内都没收到任何来自设备端的操作, 例如 ping, subscribe, publish &#xff0c;则会主动将连线中断。如果iot core检测到tcp 连接中断, 会立即中断&#xff1b;如果未检测到则会等到1.5倍 …...

【代码随想录训练营第42期 Day26打卡 贪心Part1 - LeetCode 455.分发饼干 376. 摆动序列 53. 最大子序和

目录 一、贪心 二、题目与题解 题目一&#xff1a;455.分发饼干 题目链接 题解&#xff1a;排序双指针贪心 题目二&#xff1a;376. 摆动序列 题目链接 题解&#xff1a;贪心 题目三&#xff1a;53. 最大子序和 题目链接 题解1&#xff1a;暴力&#xff08;失败&…...

利用有限元法(FEM)模拟电磁场与样品的相互作用

一、引言 电磁场与物质的相互作用是理解光学现象的基础。在实际应用中&#xff0c;激光光束与样品的相互作用通常涉及复杂的电磁场分布&#xff0c;尤其在微纳尺度结构中。因此&#xff0c;使用数值模拟方法如有限元法&#xff08;FEM&#xff09;来模拟电磁场的分布和传播&…...

如何保持git主分支树的整洁

经典应用展示Git版本控制用法 本章将列举Git的一些闪亮特性,期待能够让您爱上Git 文章目录 经典应用展示Git版本控制用法前言一、分支是什么?二、主-分支合并merge三、cherry-pick(精挑细选)四、Rebase(变基)4.1 合并本地分支到主分支4.2 合并本地分支从指定commit开始的…...

Datawhale X 魔搭 AI夏令营 Task1 从零入门AI生图原理实践笔记

赛题内容 参赛者需在可图Kolors模型的基础上训练LoRA模型&#xff0c;生成无限风格&#xff0c;如水墨画风格、水彩风格、赛博朋克风格、日漫风格… 基于LoRA模型生成8张图片组成连贯故事&#xff0c;故事内容可自定义&#xff1b;基于8图故事&#xff0c;评估LoRA风格的美感度…...

Python中将代码打包成exe文件

在Python中将代码打包成exe文件&#xff0c;可以使用PyInstaller工具。以下是使用PyInstaller将Python脚本打包成exe的步骤&#xff1a; 安装PyInstaller&#xff1a; pip install pyinstaller使用PyInstaller打包Python脚本&#xff1a; pyinstaller --onefile your_script…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...