JavaScript

1. 简介

(1)是什么?

JavaScript,简称JS,是一种运行在浏览器的编程语言,实现人机交互的效果。

(2)干啥的?(作用)

网页特效 ---(监听用户的一些行为,让网页作出对应的反馈)
表单验证 ---(针对表单数据的合法性进行判断)
数据交互 ---(获取后台数据,渲染到前端)
服务端编程 ---(node.js)

(3)有什么?(组成)

由 ECMAScript 的基础语法和 web APIs(由页面文档对象模型DOM 和 浏览器对象模型BOM组成)组成。

ECMAScript 规定了JS的基础语法核心知识(比如说:变量、分支语句、循环语句、对象等)
Web APIs :
        DOM 操作文档,比如说,对网页元素进行移动、大小、添加删除等操作
        BOM 操作浏览器,比如说,页面弹窗,检测窗口宽度、存储数据到浏览器等

(4)写在哪?(位置)

①内部JS
直接写在HTML文件里,用script标签包住,最好写在</body>上面 (因为浏览器会按照代码在文件中的顺序加载HTML,而JS是控制修改HTML的元素,若HTML未被加载完可能会导致JS失败)

②外部JS

代码写在以.js结尾的文件里,通过script标签,引入HTML页面中。

③内行JS

代码写在标签内部,一般少用,vue框架多用。

2. 基础语法(大概过一遍)

(1)注释与结束符

①单行注释 “//”                        (ctrl+/)
②多行注释 “/* 。。。*/”         (shift+alt+a)
③结束符 “;”     (实际开发中,可写可不写,最好要么每句都写,要么都别写)

(2)输入输出语法
①什么是语法?

任何计算机打交道的规则约定。

②输出语法

第一种:向body内输出内容(内容写的标签会被执行)

document.write('要输出的内容')

【注】:反引号 “`” 可以换行输出(使用反引号的几种情况:①需要创建多行字符串;②在字符串中用到嵌入表达式,如:模板字符串${}的使用;③标签模板

第二种:页面弹出警告的对话框

alert("要输出的内容")

上面已有例子,不做重复。

第三种:控制台输出语法,供程序员调试使用

console.log("控制台打印")

③输入语法

显示一个对话框,对话框中包含一条文字信息,用来提示用户输入文字

prompt("请输入您的姓名:")

【注】JS按HTML文档流顺序执行JS代码(alert()和prompt()它们会跳过页面渲染先被执行)

④字面量literal

在计算机科学中,字面量是在计算机中描述的事/物。(有数字字面量、字符串字面量等)

(3)变量

变量就是一个容器,用来存储数据的容器,它让计算机变得有记忆。(但变量不是数据本身,它仅仅是装东西的盒子

①变量的申明

要想使用变量,首先要创建变量(也称申明变量或定义变量)==两部分构成:申明关键词与变量名

let 变量名

其中,lei 为申明关键字变量名即为标识

【注】:变量不能重复声明
若函数内部变量没有声明,直接赋值,也当全局变量看,但强烈不推荐。

②变量的赋值

赋值号“=”,例如 let age = 18,意思就是把18赋给了age

③变量的更新

变量赋值后,还可以再赋值给它(新的值会覆盖掉旧的值),以此完成变量的更新。

④变量的本质

内存:计算机中存储数据的地方
变量的本质:程序在内存中申请的一块用来存放数据的小空间

(4)数组

数组(Array),一种将一组数据存储在单个变量名下的优雅方式。

let arr = []

命名使用规则与python类似。

申明: let arr = ["数据1",“数据2 ”,...]
使用:arr[0]

数组的基本操作:增删查改

(5)常量(相较于let更常用)

用const声明的变量叫常量。常量,永远不会改变的值。Like: const name = "JS"

它存的其实不是值,是地址!!!

[注]:常量不允许重新赋值,申明时需要赋值(初始化)

有变量先用const,发现需要修改再改回let。

但是要注意!!!

①简单数据类型,不能修改值;
②复杂数据类型(数组、对象等),只要地址不修改就可以(追加元素可以)。===因为复杂数据类型的值存在堆里边

(6)数据类型

JS数据类型整体分为两大类:

①基本数据类型

number 数字型:可以是整数、小数、正数、负数

string 字符串型:使用单引号、双引号包裹的数据都叫字符串。
(单引号、双引号没有本质区别,更建议用单引号

[注]:“+” 可以实现字符串的拼接

模板字符串:document.write("我今年${age}岁了")

boolean 布尔型:表示肯定或者否定时,计算机中对应的是布尔数据类型。(true或false)

undefined 未定义型:只有一个值 underfined (声明一个变量未赋值的就是 undefined)

null 空类型:仅仅是一个代表“空”、“无”或“值未知”的特殊值
开发时,就是说将来有个变量里边存放的是一个对象,但是对象还没创建好,可以先给个 null

②引用数据类型

object 对象

what:也是JS中的一种数据类型。可以理解为是一种无序的数据集合,注意数组有序的数据集合。(用来描述事物或人)

如何使用:

其基本操作:

对象的方法:

遍历对象:

③检测数据类型

typeof x,可以显示出x的数据类型

④类型转换

从表单、单选框、多选框取来的值默认都是字符串类型。这些值相加减需要转化为数字类型。

一、隐式转换==>系统内部自动将数据类型进行转换

二、显式转换==>自己写代码告诉系统该转换成什么类型
转数字类型:前面加一个“+”
[注]:NaN也是数字类型,代表非数字
parseInt(x),把x转为整数或只取整数【不会四舍五入】
parseFloat(x),把x转为浮点数或只取浮点数

转Boolean类型:

(7)运算符(和C语法大致相同)

①赋值运算符:对变量进行赋值的运算符

②一元运算符

大多数的JS运算符可以根据所需的表达式的个数(需要几个数),分为一元运算符、二元运算符、三元运算符等

一元:“+” 或 “-”,自增、自减

③比较运算符

④逻辑运算符(与“&&”或“||”非“!”)

⑤运算符优先级(优先级高的先算)

(8)语句

①表达式和语句

表达式:可以被求值的代码,比如说:num=3+7。
语句:语句不一定有值,例如说:alert(),for和break等语句。

②分支语句

分支语句包括:
if分支语句(if...单、if...else...双、if...if else...else...多分支)、
三元运算符()、
switch语句

③循环语句

while循环(break强制退出)

for语句

(9)函数

函数就是把重复的部分封装在一起重复使用,提高代码的使用效率。
函数大致分为两种:具名函数(有名)、匿名函数(无名)。
匿名函数:没有名字的函数是无法直接使用的。
而它的使用方式:函数表达式;立即执行函数。(第二个小括号在调用)

函数的使用格式:

参数有实参(实际参数)、形参(形式参数,无需声明,仅在函数内有效)。(实参传数值给形参)
【注】:实参形参在数量上尽量保持一致,若形参不给值,默认为:undefined,而 undefined+undefined = NaN
更严谨的写法:
函数返回值

(10)数学内置对象

what:JS内部提供的对象,包含各种属性和方法给开发者调用

常用的内置对象-math:Math对象是JS提供的一个“数学”对象 
Marh.PI ===>圆周率
Math.round() ===>四舍五入

3. Web APIs

(1)What is the Web API?

它是一组可通过网络进行访问和交互的接口。
作用:使用JS去操作HTML和浏览器
分类:DOM(文本对象模型)、BOM(浏览器对象模型)

(2)What is the DOM?

DOM(Document Object Model),是用来呈现以及与任意HTML或XML文档交互的AIP。
简单地说,DOM是浏览器为我们提供了一套专门用来操作网页内容(标签)的功能

其作用自然就是,开发网页内容特效和实现与用户的交互。

①DOM Tree

DOM树(文档树):将HTML文档以树状结构的形式直观的表现出来。

DOM树直观的体现出了标签与标签之间的关系,更有利于我们理解代码。比如说,下面右图:

②DOM对象(重要!!!)

DOM对象:浏览器根据HTML标签自动生成的JS对象。(任何标签都是一个对象)

下图来理解,document就是最大的DOM对象

如下图:div在HTML里叫标签,在JS里叫对象。

DOM的核心思想:把网页内容当作对象来处理。

③如何获取DOM对象?

此处重点讲用CSS选择器获取DOM对象。

1.选择匹配的第一个元素,其语法:

document.querySelector('css选择器')

举个栗子:

其返回值是CSS选择器匹配到的第一个元素,是一个HTMLElement对象。
若没有匹配到,则为NULL。

当然,想要获取第几个元素或随机获取元素:

//获取第三个元素

const li = document.querySelector('ul li:nth-child(3)')

//随机获取第几个元素(random为随机数,${}为模板字符串)

const li = document.querySelector(`ul li:nth-child(${random})`)

它可以直接对其进行修改。

[注]:一定要有引号!!!

2. 选择匹配的多个元素,其语法:

document.querySelectorAll('css选择器')

像这样:

其返回值是CSS选择器匹配的NodeList 对象集合(以数组的形式来展示,但是不是数组,是一个伪数组,该数组有长度、有索引,但是没有pop()、push()等数组方法)。

不可以直接修改,只能通过数组遍历的方式逐个修改。like this,

④操作元素内容

1. 对象.innerText属性:实现了网页文本内容的修改。

修改前
修改后

[注]:此属性仅仅显示文本,并不会解析标签

2.对象.innerHTML属性:将文本内容添加/更新到任意标签位置。

该属性会解析标签,多标签时建议使用模板字符。

修改前:
修改后:

⑤操作元素属性
1.常用属性(如:href,title,src等)

其语法:

对象.属性 = '值'

修改前:
修改后:

2.样式属性

Ⅰ. 通过style属性操作css

其语法,

对象.style.样式属性 = '值'

举个栗子,(图中有注意事项)

来个小练习:实现页面刷新,页面随机更换背景颜色

Ⅱ. 操作类名(className)操作css

当你需要给这个盒子修改的样式比较多时,用上面的方法会让代码变得比较繁琐。因此,可以借助类名的形式。
其语法,

对象.className = '类名'

举个栗子,

注:className是用新值换旧值的(新值会覆盖旧值),当然,想实现新值的同时保留旧值,可以这样:

Ⅲ. 通过 classList 操作类控制css(最常用!!!)

当你需要保留原值时,第二种方法要求你去找原值的类名,也比较麻烦,因此还有第三种方法。

通过classList方式可以追加(在保留前面属性的基础上再加入其他属性)或删除类名。

其语法,

//追加一个类
元素.classList.add('类名')
//删除一个类
元素.classList.remove('类名')
//切换一个类(原来的类还存在)
元素.classList.toggle('类名')

以add为例,remove以此类推:

这里注意一下toggle,与我认知的 "切换" 略有不同!!!

当元素本身不含有a类名(设它叫a类)时,用toggle后,元素会加上a类:

当元素本身就含有a类时,用toggle后,元素会把a类删除:

简单记忆:有则无,无则有

写一个随机轮播图的小案例:

3.表单属性

获取表单里的值,需要用value属性。即:表单.value

举个栗子:

disabled属性---button是否禁用

check属性---checkbox是否选中

这里注意,disabled和check这两个属性只能接收布尔值,无需加引号~

4.自定义属性

总的来说,标签属性分为两种,一种是标准属性(比如说,class,id...),还有一种就是自定义属性。

自定义属性呢,就是由我们自己定义,自己使用的属性。(都以"data-"开头

dataset就相当于自定义属性的一个集合,若想获取具体某一个属性,直接再加一个".属性"即可

⑥间歇函数 

它其实是定时器的一种,在网页开发中,我们也许会需要实现倒计时、或者每隔一时间自己执行一段代码,这是就需要用到间歇函数,也叫定时器函数。

定时器函数由两部分组成,一部分是开启定时器,还有一部分叫关闭定时器。

1.开启定时器

其语法,

setInterval(函数名,间隔时间)

作用:每隔一段时间,就引用一次setInterval里面的函数,自动去调用。但是不要加括号!!!

因为加上括号以后,就变成了调用。

这里补充:函数引用与函数调用的区别~

首先,函数的引用:

函数引用是指函数作为一个对象被传递或赋值,但它本身并不执行

它通常用于将函数作为参数传递给其他函数,或者作为对象的属性。

接着是,函数的调用:

函数调用是指执行函数。当函数被调用时,JavaScript引擎会立即执行函数体内的代码。

它们的明显区别:

1. 执行的时间:函数引用只是指向函数的指针,它不会导致函数立即执行。而函数调用立即执行函数体内的代码

2. 返回值的不同:函数调用会返回函数执行的结果(除非函数没有返回值,此时默认返回 undefined)。函数引用本身不返回任何值,它只是一个指向函数的指针。

3. 上下文的不同:函数引用在作为参数传递给其他函数时,可以保持其原始的上下文(即 this 的值)。而函数调用的上下文取决于调用它的环境

简单的说,

引用函数,就类似于,你有这个函数地址,但是你并没有实际过去;

调用函数,就类似于,你访问这个函数,走进了一栋建筑(执行代码)。

最后,这里仅仅只是将JS下的函数引用与函数调用,其他语言也有,但可能表现形式有所区别。

间隔时间单位为毫秒。

【注】:该间歇函数,一旦开启,永不停歇。

2.关闭定时器 

其语法,

let 变量名 = setInterval(函数名,间隔时间)
clearInterval(变量名)

 Test:写一个小按钮,里边内容“我同意(3)”,然后随倒计时变化,按钮开启(开始默认关闭)

⑦事件监听
1.什么是事件?

事件是指在编程时,系统内发生的动作或发生的事情。 

2.什么是事件监听?

就是让程序检查是否有事件发生,一旦有事件发生,就立即调用一个函数作出响应,也称为绑定事件或注册事件。

其语法,

元素对象.addEventListener('事件类型',要执行的函数)

事件监听三要素:
事件源:哪个DOM元素被事件触发了,获取DOM元素
事件类型:用什么方式触发的,Like,
事件调用的函数:要干啥

此函数,每点击一次,函数就会执行一次。

小Test:

3. 事件对象

事件对象也是一个对象,这个对象存储了有事件触发时的相关信息。

其使用场景,需要判断用户输入了哪个键,判断鼠标点击了哪个位置,从而作出反应。

如何获取?

在事件绑定的回调函数的第一个参数就是事件对象。如,下面的e就是一个事件对象。

元素.addEventListener('click',function(e){})

其常用属性,

4.环境对象

环境对象:指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境。

每个函数里都会有环境对象this,在普通函数里,this指向的是window。简单地说,谁调用,this就指向谁。

Like,

写个小例子:鼠标经过哪一个选项,哪一个选项就会亮起:

5.回调函数

若将函数A作为参数传递给函数B时,A就是一个回调函数。

特点:它不会立马执行。

比如说,之前定时器那里

function fn()
{
    console.log('回调函数')
}
setInterval(fn, 1000)

以上面代码为例,fn就是回调函数,在setInterval函数中,每过一秒,回头调用一次fn函数。

暂时到这。。。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值