没学明白呢QAQ
# 一、JavaScript介绍JavaScript 编程语言 流程控制
Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。Java和JavaScript的关系就像张雨和张雨生的关系,只是名字很像。
Java 服务器端的编程语言
JavaScript 运行在客户端(浏览器)的编程语言
JavaScript是一种运行在客户端 的脚本语言
JavaScript的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
1、JavaScript现在的意义(应用场景)
JavaScript 发展到现在几乎无所不能。
- 网页特效
- 服务端开发(Node.js)
- 命令行工具(Node.js)
- 桌面程序(Electron)
- App(Cordova)
- 控制硬件-物联网(Ruff)
- 游戏开发(cocos2d-js)
2、JavaScript和HTML、CSS的区别
HTML:提供网页的结构,提供网页中的内容
CSS: 用来美化网页
JavaScript: 可以用来控制网页内容,给网页增加动态的效果,例如动态创建div,实现页面元素的隐藏。
3、JavaScript的组成
3.1、ECMAScript - JavaScript的核心
定义了JavaScript的语法规范
JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关
3.2、BOM - 浏览器对象模型
一套操作浏览器功能的API
通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
3.3、DOM - 文档对象模型
一套操作页面元素的API
DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作
3.4、JavaScript的书写位置
- 写在行内
1 | <input type="button" value="按钮" onclick="alert('Hello World')" /> |
- 写在script标签中
1 | <head> |
- 写在外部js文件中,在页面引入
1 | <script src="main.js">script> |
注意点
引用外部js文件的script标签中不可以写JavaScript代码
二、变量
1、什么是变量
什么是变量
变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据
变量用于描述计算机中的数据存储空间 。
房屋是一个存储空间
用来存放特定的东西
内存,全称内存储器。用于存放计算机运行过程中的数据。
计算机为了更好的存储数据,将内存分为不同的内存单元。
为什么要使用变量
从内存中取出一个存储单元,存储相应的数据。
为了方便存储数据和取数据,需要明确存储单元识别的方式和使用的用途。
识别的方式:起名字 age
使用用途:存放什么内容 18
使用变量可以方便的获取或者修改内存中的数据
2、如何使用变量
- var声明变量
1 | var age; |
- 变量的赋值
1 | var age; |
- 同时声明多个变量
1 | var age, name, sex; |
- 同时声明多个变量并赋值
1 | var age = 10, name = 'zs'; |
3、变量在内存中的存储
4、变量的命名规则和规范
规则 - 必须遵守的,不遵守会报错
- 由字母、数字、下划线、$符号组成,不能以数字开头
- 不能是关键字和保留字,例如:for、while。
- 区分大小写
规范 - 建议遵守的,不遵守不会报错
- 变量名必须有意义
- 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。例如:userName、userPassword
下面哪些变量名不合法
a
1
age18
18age
name
$name
_sex
&sex
theworld theWorld
5、交换两个变量中的值(案例)
三、数据类型
数据类型分为,“简单数据类型”和“复杂数据类型”,现在我们先学习“简单的数据类型”
简单数据类型
Number、String、Boolean、Undefined、Null
1、Number类型
数值字面量:数值的固定值的表示法
110 1024 60.5
浮点数
浮点数精度的问题。
浮点数
var n = 5e-324; // 科学计数法 5乘以10的-324次方
浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数
var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004
console.log(0.07 * 100);
不要判断两个浮点数是否相等
数值判断
NaN:not a number
NaN 与任何值都不相等,包括他本身
在控制台中使用 6*‘abc’ 可以输出NaN
isNaN: is not a number
是数字返回为false.
不是数字返回true.
2、String类型
字符串
‘abc’ “abc”
‘程序猿’,’程序媛’, “黑马程序猿”
思考:如何打印以下字符串。
我是一个”正直”的人
我很喜欢”黑马’程序猿’”
测试字符串中的字符个数:
1 | console.log(msg.length); |
2.2.1 转义符
2.2.2 字符串长度
length属性用来获取字符串的长度
1 | var str = '黑马程序猿 Hello World'; |
2.2.3 字符串拼接
字符串拼接使用 + 连接
1 | console.log(11 + 11); |
- 两边只要有一个是字符串,那么+就是字符串拼接功能
- 两边如果都是数字,那么就是算术功能。
3、Boolean类型
- Boolean字面量: true和false,区分大小写
- 计算机内部存储:true为1,false为0
4、Undefined和Null
- undefined表示一个声明了没有赋值的变量,变量只声明的时候值默认是undefined
- null表示一个空,变量的值如果想为null,必须手动设置
5、获取变量的类型
typeof
1 | var age = 18; |
四、注释
4.1 单行注释
用来描述下面一个或多行代码的作用
1 | // 这是一个变量 |
4.2 多行注释
用来注释多条代码
1 | /* |
五、操作符
5.1 算术运算符
+ - * / %
5.2 一元运算符
一元运算符:只有一个操作数的运算符
5 + 6 两个操作数的运算符 二元运算符
++ 自身加1
-- 自身减1
前置++
1 | var num1 = 5; |
后置++
1 | var num1 = 5; |
思考题:
1 | var a = 1; |
1 | var a = 1; |
5.3 逻辑运算符(布尔运算符)
&& 与 两个操作数同时为true,结果为true,否则都是false
|| 或 两个操作数有一个为true,结果为true,否则为false
! 非 取反
5.4 关系运算符(比较运算符)
< > >= <= =="!=" !="=
=>
1 | ==与===的区别:==只进行值得比较,===类型和值同时相等,则相等 |
5.5 赋值运算符
= += -= *= /= %=
例如:
var num = 0;
num += 5; //相当于 num = num + 5;
5.6 运算符的优先级
优先级从高到底
1. () 优先级最高
2. 一元运算符 ++ -- !
3. 算数运算符 先* / % 后 + -
4. 关系运算符 > >= < <= 5.="" 相等运算符="=" !="===" 6.="" 逻辑运算符="" 先&&="" 后||="" 7.="" 赋值运算符<="" code="">=>
1 | (4 >= 6) || ('人' != '阿凡达') && (!(12 * 2 == 144)) && true |
六、流程控制
程序的三种基本结构
顺序结构
从上到下执行的代码就是顺序结构
程序默认就是由上到下顺序执行的
分支结构
根据不同的情况,执行对应代码
循环结构
循环结构:重复做一件事情
6.1 分支结构
if语句
语法结构
1 | if (/* 条件表达式 */) { |
案例:1、求两个数的最大数
2、判断一个数是偶数还是奇数
3、分数转换,把百分制转换成ABCDE <60 90="" 100="" e="" 60-70="" d="" 70-80="" c="" 80-90="" b="" -="" a<="" p="">
6.2 循环结构
在javascript中,循环语句有三种,while、do..while、for循环。
while语句
基本语法:
1 | // 当循环条件为true时,执行循环体, |
代码示例:
1 | // 计算1-100之间所有数的和 |
案例:打印100以内所有偶数的和(作业1)
do…while语句
do..while循环和while循环非常像,二者经常可以相互替代,但是do..while的特点是不管条件成不成立,都会执行一次。
基础语法:
1 | do { |
代码示例:
1 | // 初始化变量 |
for语句
for循环语法:
1 | // for循环的表达式之间用的是;号分隔的,千万不要写成, |
执行顺序:1243 —- 243 —–243(直到循环条件变成false)
初始化表达式
判断表达式
自增表达式
循环体
七、数组
为什么要学习数组
之前学习的数据类型,只能存储一个值(比如:Number/String。我们想存储班级中所有学生的姓名,此时该如何存储?
数组的概念
所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。
数组的定义
数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。
通过数组字面量创建数组
1 | // 创建一个空数组 |
获取数组元素
数组的取值
1 | // 格式:数组名[下标] 下标又称索引 |
遍历数组
遍历:遍及所有,对数组的每一个元素都访问一次就叫遍历。
数组遍历的基本语法:
1 | for(var i = 0; i < arr.length; i++) { |
数组中新增元素
数组的赋值
1 | // 格式:数组名[下标/索引] = 值; |
八、函数
一、为什么要有函数
如果要在多个地方求1-100之间所有数的和,应该怎么做?
二、什么是函数
把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在后续开发中可以反复调用
函数的作用就是封装一段代码,将来可以重复使用
2.1 函数的定义
函数声明
1 | function 函数名() { |
特点:
函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。
函数一般都用来干一件事情,函数名称一般使用动词
2.2 函数的调用
- 调用函数的语法:
1 | 函数名(); |
特点:
函数体只有在调用的时候才会执行,调用需要()进行调用。
可以调用多次(重复使用)代码示例:
1 | // 声明函数 |
2.3 函数的参数
为什么要有参数
1 | function getSum() { |
语法:
1 | // 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部 |
形参和实参
形式参数:在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。
实际参数:如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。
1 | var x = 5, y = 6; |
案例
求n-m之间所有数的和(作业1)
n=100
m=200
function getSum(n,m){
}
2.4 函数的返回值
函数执行完的时候,并不是所有时候都要把结果打印。我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个返回值
返回值语法:
1 | //声明一个带返回值的函数 |
函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。
案例
- 求组数中的最大值
- 求组数中的最小值(作业2)
返回值详解:
如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined
如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值
如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。
九、什么是对象
现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
举例: 一部车,一个手机
车是一类事物,门口停的那辆车才是对象
特征:红色、四个轮子
行为:驾驶、刹车
1、JavaScript中的对象
JavaScript中的对象其实就是生活中对象的一个抽象
JavaScript的对象是无序属性的集合。
其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JavaScript中的对象想象成键值对,其中值可以是数据和函数。
对象的行为和特征
特征---属性
行为---方法
- 事物的特征在对象中用属性来表示。
- 事物的行为在对象中用方法来表示。
2、为什么要有对象
1 | function printPerson(name, age, sex....) { |
3、 对象创建
1 | var o = { |
通过构造函数来创建对象。(第一个单词的第一个字母大写,后续的每一个单词的第一个字母都大写)
1 | function Person(name, age, job){ |
4、属性和方法
、
如果一个变量属于一个对象所有,那么该变量就可以称之为该对象的一个属性,属性一般是名词,用来描述事物的特征
如果一个函数属于一个对象所有,那么该函数就可以称之为该对象的一个方法,方法是动词,描述事物的行为和功能
5、new关键字
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
- 构造函数用于创建一类对象,首字母要大写。
- 构造函数要和new一起使用才有意义。
new在执行时会做四件事情
new会在内存中创建一个新的空对象
new 会让this指向这个新的对象
执行构造函数 目的:给这个新对象加属性和方法
new会返回这个新对象
3.6 this详解
JavaScript中的this指向问题,有时候会让人难以捉摸,随着学习的深入,我们可以逐渐了解
现在我们需要掌握函数内部的this几个特点
1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
2. 一般函数直接执行,内部this指向全局window
3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化
十、什么是DOM
1、DOM的概念
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言的标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格(目前,HTML和XML文档是通过说明部分定义的)。文档可以进一步被处理,处理的结果可以加入到当前的页面。DOM是一种基于树的API文档,它要求在处理过程中整个文档都表示在存储器中。
DOM又称为文档树模型
- 文档:一个网页可以称为文档
- 节点:网页中的所有内容都是节点(标签、属性、文本、注释等)
- 元素:网页中的标签
- 属性:标签的属性
2、DOM经常进行的操作
- 获取元素
- 对元素进行操作(设置其属性或调用其方法)
- 动态创建元素
- 事件(什么时机做相应的操作)
3、获取页面元素
3.1 为什么要获取页面元素
例如:我们想要操作页面上的某部分(显示/隐藏,动画),需要先获取到该部分对应的元素,才进行后续操作
3.2 根据id获取元素
1 | var div = document.getElementById('main'); |
3.3 根据标签名获取元素
1 | var divs = document.getElementsByTagName('div'); |
返回的是一个集合,不是数组,可以认为是伪数组。
我们获取了元素后,可以对其进行操作,但是我们往往都是在触发了某个事件的时候才会对元素进行操作。
什么是事件呢?
十一、事件
1、什么是事件
当什么时候做什么事情 ,
触发-响应
2、事件三要素
- 事件源:触发(被)事件的元素
- 事件名称: click 点击事件
- 事件处理程序:事件触发后要执行的代码(函数形式)
3、事件的基本使用
1 | var box = document.getElementById('box'); |
4、案例
- 点击按钮切换图片
十二、属性操作
1、属性基本操作
1 | var link = document.getElementById('link'); |
案例:点击按钮显示隐藏div(作业)
现在已经实现了div的隐藏,下面可以div的展示,注意按钮上的文字要变成 “显示”
2、innerHTML和innerText
innerHTML innerText
获取开始标签和结束标签之间的内容
innerHTML 获取内容的时候,如果内容中有标签,会把标签也获取到,原封不动把内容获取到
innerText 获取内容的时候,如果内容中有标签,会把标签过滤掉
十三、BOM
1、BOM的概念
BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。
我们在浏览器中的一些操作都可以使用BOM的方式进行编程处理,
比如:刷新浏览器、后退、前进、在浏览器中输入地址等
2、BOM的顶级对象window
window是浏览器的顶级对象,当调用window下的属性和方法时,可以省略window。
3、对话框
- alert()
- prompt()
- confirm()
4、页面加载事件
onload
1 | window.onload = function () { |
5、定时器
setTimeout()和clearTimeout()
在指定的毫秒数到达之后执行指定的函数,只执行一次
1 | // 创建一个定时器,1000毫秒后执行,返回定时器的标示 |
6、 删除提示案例
7、setInterval()和clearInterval()
定时调用的函数,可以按照给定的时间(单位毫秒)周期调用函数
1 | // 创建一个定时器,每隔1秒调用一次 |
8、location对象
location可以获取或者设置浏览器地址栏的地址
1 | "button" name="" value="单击跳转" id="btn"> |