1. JS概述
1.1、浏览器端的支持的三种语言 *
- HTML(标记语言)
用于标记页面的结构与内容
- CSS(样式语言)
用于美化页面
- JavaScript(逻辑语言)
为页面赋予行为动作(与用户进行交互)
1.2、JavaScript的作用
- html引入JS的初衷是解决表单验证问题
- 页面特效
- 动画效果百度地图
- 物联网Ruff(可以让JS运行在其他电子设备上的一个运行环境)
- 网页游戏
- 服务器端开发(Node.js)
1.3、JavaScript的组成 *
- ECMAScript
语法规范:
规定语法的组成,以及语法的格式
语法上的要求对于任何一门编程语言都是十分苛刻的,不允许有一丁点的错误,例如:大小写、标识符号都不可以出错,特别是JS语言
- BOM
Browser Object Model 浏览器对象模型
Browser 英文意思为浏览器
Object 英文意思为对象
Model 英文意思为模型浏览器生产商在开发浏览器时,会将浏览器设计成多个组成部分,每个部分就是一个对象。我们在编程中会使用js操作其中的个个组成部分。例如:弹窗、跳转…
- DOM
Document Object Model 文档对象模型
Document 英文意思为文档 (也就是html文档)
Object 英文意思为对象 (html文档中的任何一个标签,在js中都可以称之为一个对象)
Model 英文意思为模型 (根据html文档中的标签以及标签之间的关系,可以将一个文档画出一种类似于树状的结构,也称之为DOM节点树)我们在编程中,可以使用JS操作标签的方方面面
1.4、JavaScript书写位置 **
- 外部(掌握)
将js保存单独保存到一个文件中。
再使用script标签的src属性将其引入到当前文件。
这种方式即为外部<script src="引入外部的一个js文件"></script>
- 内部(掌握)
书写在script标签内部,这种方式即为内部
<script type="text/javascript"> 书写在这里 </script>
- 行内(了解)
书写在html标签的属性事件中,这种方式即为行内。
<div onxxxx="书写在这里"></div>
👉 一个script标签要么书写内部js代码,要么引入外部js代码,不可以同时进行。一个script标签如果用于书写内部js代码,那么不允许有src属性。
❓ 应有所得
- 外部,通过script标签的src属性
- 内部,书写在script标签内的代码
- 行内,书写在html标签的事件属性内的代码
1.5、JavaScript语言规则
- js是严格区分大小写的语法,初学者要特别注意
- 一般一行仅书写一条代码,如果书写多条需要使用分隔开
- js语法中的符号都是英文的(小写的)
1.6、JavaScript的注释
- 单行注释
格式: 双斜杠
// 注释内容 仅影响斜杠开始到行尾,
快捷键: CTRL + /
- 多行注释
/* ... 注释内容 ... */
多行注释可以包含单行注释,但多行注释不能嵌套
- 作用
注释的内容并不会被js当作代码来执行。
注释一般是针对当前代码进行解释说明,增加程序的可读性,这样有利于其他人接手,或方便以后对代码进行备查。
2. 常用的输入与输出
2.1、目标
-
熟练使用输入函数
-
熟练使用输出函数
2.2、为什么要有输出与输出
计算机的作用就是处理数据,数据来源于现实人们的生产数据。要将现实中的数据输入给计算机。所以就要求计算机必须有接收输入的功能。
计算机对我们的数据进行处理后会有一个结果,这个结果要显示给我们。这就要求计算机还必须提供输出显示的功能。
例如:ATM机取钱
密码保存在人的头脑中,要告诉ATM机。
这就要求ATM弹出一个窗口,让我们输入密码,这样ATM就得到了现实的数据,弹出的窗口就是人机交互接口。
经过计算机处理后,如果密码不正确,则会再次弹出来一个窗口来显示密码不正确的信息,有了输入与输出,人才能与计算机有良好的沟通。
2.3、输入
- prompt(‘内容’)
弹出一个交互信息获取框,并显示提示信息。
- confirm(‘内容’)
弹出一个,确认交互对话框,仅需要用户进行确认或取消操作即可。
2.4、输出
- alert(‘内容’)
弹出一个提示信息框,这种方式主要是弹出提示信息给普通用户
- console.log(‘内容’)
在控制台输出信息,此种方式主要是给程序写使用
👉 console.log(‘数据1’,‘数据2’…) 将多个数据使用逗号分隔,可以在控制台输出多个数据
- document.write(‘内容’)
将内容输出到html的body标签内
2.5、应有所得
prompt
alert
confirm
console.log
document.write()
3. 变量
3.1、目标
-
能够说出变量的主要作用
-
能够写出变量的初始化
-
能够说出变量的命名规范
-
能够画出变量是如何在内存中存储的
-
能够交换两个变量的值
3.2、什么是变量
首先明确:
计算机的作用是用对数据进行运算,想对数据进行运算,在计算机内部数据就得有个保存的位置。
官方概念:
变量内存中用于存储数据的一个空间,这个空间有一个标识。
变量是空间(空间用于保存东西的)。
空间有一个标识,通过这个标识来对这个空间进行读写操作。这个标识称之为变量名。
类比:
酒店的客房
客房是一个空间,空间用于客人休息。
客房都是有一个房号标识,通过房号找到房间,就可以确认客人。
👉 变量的本质是一个内存中的一个空间,作用是用于存储数据。空间有一个标识(名子)。
3.3、声明变量🔑
语法:
let 变量名 // 声明一个变量
let 变量名 = 值 // 声明一个变量同时赋值,术语称之为变量的初始化
说明:
= 符号在这里是赋值的作用(后面会详解)
送给初学者:
let单词被js赋予了特殊的功能,用于声明变量,这是语法规定的,以后会学习很多具有特殊功能的单词
let后面必须有空格,这也是语法规定的
总之一句话:语法规定的必须给我记死
示例:
let a; // 仅声明一个变量,以后再赋值 a = 200; // 这是以后赋值的语句 let b = 100; // 也可以声明同时赋值即为初始化 console.log(a,b)
3.4、访问变量🔑
将某个变量的值读取出来,进行显示或进行其他运算,这种操作行话称之为访问变量。
示例:
let a = 10; // 显示 console.log(a) // 读取现变量a的内容,计算后再显示其结果 console.log(a + 20)
课堂案例: 使用三个变量保存自己的姓名、年龄、性别信息
3.5、修改变量的值🔑
对一个已经存在的变量重新赋值
示例:
let sex = '男'
// 再次赋值
sex = '女'
console.log(sex)
3.6、变量的内存原理
👉 物理地址:操作系统层面用于对各个内存空间进行管理的依据(通过这个编号就可以快速的找到每一个小格子)
👉 内存空间:就是变量(变量就是内存中的一个空间)
变量的内存操作
let a = 100
说明:
let a = 100; 这条语句会向操作系统申请一个空间(例如:操作系统为本条语句所分配的空间为0x1091)。并将数据100保存到这个空间中,同时为这个空间定义一个名子a(a就是变量名)。
有了变量名后,我们就不需要关心数据100的物理地址是什么,代码中通过自己定义的变量名a就可以对这个空间进行操作了。
let a = 100 console.log(a)
说明:
当执行console.log(a)时,js会到内存中查看是否有a这个变量名,如果有就读取其内容,并将其输出到控制台。
let a = 100 console.log(a) a = 200
说明:
当执行到a = 200时,js会到内存中找到a所对应的空间,再将新数据200覆盖原空间中的数据100。
送给初学者:程序的本质就是对内存的操作。
3.7、变量操作扩展
3.7.1、变量的默认值🔑
❓仅声明一个变量并没有赋值,此时变量的值是什么呢
let a; console.log(a) //undefined
👉 undefined也是一种值,会在以下来的小节详解
3.7.2、使用变量赋值🔑
let a = 200; let b = a; console.log(b)
说明:
执行let a = 200时,先申请一个a空间,并保存200数据,
执行let b = a时,申请一个b空间,发现=右侧并不是一个具体的数据,而是一个变量,这时js会根据a变量找到对应的空间,再将a空间中的数据复制一份到b空间中。
👉 两个空间中保存的都是数据200,但是完全独立的并不是同一份。
3.7.3、一次声明多个变量
let a,b,c let a=10,b,c=30 let a=b=c=100
3.7.4、交换两个变量的值🔑
let a = 100 let b = 200 // 借助第2个变量 let c = a a = b b = c console.log(a,b)
3.8、为什么要使用变量
1.存储数据
存储数据是为了计算
2.方便复用
同一个数据在出现两次及以上时,我们就需要考虑使用变量存储这个数据。并通过变量来显示数据。
这样作的好处是显示时一致、修改后同步。
3.9、变量的命名规则🔑
只能包含字母、数字、下划线、$
不能以数字开头
不能是js中的关键字,关键字就是被js赋予了特殊功能的单词。
例如:
let这个人类的单词被js赋予了定义变量的功能,而age单词在js中就没有被赋予特殊的功能。
实际开发中的一些规范:
尽量见名知义
多个单词组成的变量名采用驼峰法
不建议使用name,name存在一个坑。
3.10、应有所得
变量命名规则:
由什么组成: 字母、数字、下划线、$,不能以数字开头。
见名知义、不能使用关键字
多个单词组成的采用小驼峰。
4、数据类型_1(简单数据类型)
4.1、目标
- 能够说出5种简单数据类型
- 能够熟练为变量赋予 数值类型、字符串类型、布尔值类型的数据
- 能够熟练的使用字符串 引号嵌套
❓ 什么是数据类型:
人类有意识的,所以很容易分清数字与字符的区别。
例如:数字具有加、减、乘、除… 运算 10 * 20 = 200
例如:字符 张三 * 李四 没有任何意义
👉 所以数字应该具有与数字相关的运算方式,字符有与字符相关的运算方式
但是计算机是没有意识的,它并不能区分数字与字符,所以必须非常明确的告诉计算机,我们要让他计算的数据类型的是什么。
你想让计算机进行数值运算就传递数值给它,你想让它处理文字,就传递字符给它。为了让计算机能对数据进行正确的运算,所以对数据进行了类型的划分。
JS中数据类型分为两大类,八小类:
不同的类型的数据具有不同的运算方式,也有不同的存储方式。数据类型主要从定义,取值、运算这几方面学习`
4.2、number数值类型
数值类型很简单,就是数字,取值:
整数
小数(浮点数)
正数
负数
示例:
let age = 20 let price = 98.23 let balance = -20000
八进制与十六进制(课后了解)
- 八进制
以0开头,只能出现0-7个数码
示例:
let oct = 076 console.log(oct) // 显示时默认以十进制进行显示
- 十六进制
以0x开头,包含:
0、1、2、3、4、5、6、7、8、9
a(10)
b(11)
c(12)
d(13)
e(14)
f(15)示例:
let hex = 0xff console.log(hex) // 显示时默认以十进制进行显示
4.3、string字符串类型
定义:
使用单引号或双引号括起来的为个或多个字符。
示例:
let uname = 'zhangsan' //单引号定义字符串 let aword = "超人类" // 双引号定义的字符串 let addredd = '' // 空字符串
注意:
默认情况下单引号不能再包含单引号
默认情况下双引号不能再包含双引号
示例:
let aword = 'people became 'quite illogical' // 报错 let awrod = "people became "quite illogical" // 报错
报错原因:
在js中单引号与双引号被赋予了特殊的功能(定义字符串的功能),当遇到开始的前半个单引号时,js明确我们开始定义一个字符串了,它马上会找紧随其后的另一半,js马上找到中间的组成了一对,这样字符串的定义就结束了。但后面的代码(quite illogical’)语法不完成而报错。
双引号也是同样的道理
引号嵌套:
默认情况下单引号不能再包含单引号,但可以包含双引号
默认情况下双引号不能再包含双引号,但可以包含单引号
示例:
let aword = 'people became "quite "illogical' let awrod = "people became 'quite illogical"
经验法则:开发时建议使用单引号定义字符串
4.4、boolean布尔类型
布尔类型的值常用于表示现实中的"矛盾态",相互对应的两种状态。
例如:
成立、不成立
对、错
男、女
取值:布尔类型仅有两个取值
true 表示成立、对
false 表示不成立、错
👉 这两个是js关键词,不需要加引号
👉 布尔类型的值很简单,主要是看使用者赋予它的意义。
示例:
// 表示对错 let isOk = true // 表示对 isOk = false // 表示错 // 表示性别 let sex = true // 人为的赋予true的意义为男,也可以反过来 sex = false // 为人的赋予false的意义为女,也可以反过来 // 表示方向 let direct = true // 代表箭头向下 direct = false // 代表箭头向下 // 表示折叠 let collapse = true // 代表折叠 collapse = false // 代表展开
4.5、undefined未定义类型
undefined类型翻译为未定义类型,其取值只有1个,
取值:
undefined
示例:
仅声明变量(并没有赋值),
let a; console.log(a) // undefined
👉 变量是存在的,但是没有值,为了表示严谨,所以js设计了这个值。
声明变量直接赋值为undefined
let a = undefined console.log(a) // undefined
4.6、null空类型
null也称之为空类型,其取值只有1个
取值:
null
示例:
声明变量直接赋值为null
let obj = null console.log(null)
当在prompt()的弹窗中,点击取消或关闭按钮时,返回值为Null
let ret = prompt('输入年龄') console.log(ret)
4.7、输入函数的返回值类型
4.7.1、prompt()
let uname = prompt('输入姓名') // 输入 thinker
console.log(uname) // 'thinker'
let age = prompt('输入年龄') // 输入20
console.log(age) // '20'
let ret = prompt('输入数据') // 点击取消
console.log(ret) // null
4.7.2、confirm()
let isOk = confirm('你确定要删除么') // 点击确定
console.log(isOk) // true
isOk = confirm('你确定删除么') // 点击取消
console.log(isOk) // false
4.8、应有所得
- confirm
点击确定 返回 true
点击取消 返回false
- prompt
点击确定 返回字符串
5、运算符_1
5.1、目标
-
了解赋值运算符
-
认识算术运算符,完成数学运算
-
能够使用 +、+= 号完成字符串的拼接
-
能够使用自操作运算符完成变量本身的运算
5.2、赋值运算符
运算规则
将 =右侧的数据 赋值给 =左侧的变量
示例:
let a = 10 let b = prompt('输入您的数据')
5.3、算术运算符
5.3.1、加减乘除运算符
/
5.3.2、% (取模运算符)
求两个数相除得到的余数
常用于判断一个数是否是另一个数的整数倍。
例如:
判断一个数是奇数还是偶数
示例:
let a = 7; let b = 3 let ret = a%b console.log(ret)
5.3.3、**++ ** 自增运算符
自增运算符的出现就是为了简化代码。在代码开发中,经常遇到将一个变量的值加1,再赋值给自己的操作。
示例:
let a = 0 // 声明一个变量我,并赋值为0 a = a + 1 // 在a原值上 加 1 再赋值给自己 console.log(a)
简化
let a = 0 ++a // 等效于 a=a+1 console.log(a)
自增运算符又分为前自增与后自增
++ 在变量这前称之为前自增
++ 在变量之后称之为后自增
功能都是对变量的值进行加1,++在前与++在后,变量的值都会加1。
示例:
let a = 0; let b = 0; ++a b++ console.log(a,b) // 1 1
5.3.4、-- 自减运算符
自减运算符的出现也是为了简化代码。在代码开发中,经常遇到将一个变量的值减1,再赋值给自己的操作。
示例:
let a = 2 // 声明一个变量我,并赋值为0 a = a - 1 // 在a原值上 减 1 再赋值给自己 console.log(a)
简化
let a = 2 --a // 等效于 a=a-1 console.log(a)
自增运算符又分为前自增与后自增
– 在变量这前称之为前自减
– 在变量之后称之为后自减
功能都是对变量的值进行减1,–在前与–在后,变量的值都会减1。
示例:
let a = 2; let b = 2; --a b-- console.log(a,b) // 1 1
5.3.5、自操作运算符
自操作运算符,主要是用于对一个变量进行加、减、乘、除一个数再赋值给自己的操作,本质就是一种代码的简化,没什么复杂性可言。
示例:
let i = 10; i+=5 // 等效于 i = i + 5 i-=5 // 等效于 i = i - 5 i*=5 // 等效于 i = i * 5 i/=5 // 等效于 i = i / 5 i%=5 // 等效于 i = i % 5
自操作运算符的应用逻辑:一个变量要与其他数据进行 + - * / % 运算,结果再赋值给自己
5.4、字符串运算符
5.4.1、+(自字符串拼接)
运算规则
进行字符串拼接操作
示例
let a = 'hello' let b = ' world' let ret = a + b console.log(ret) // hello world
+ 即是数学运算符,又是字符串运算符,只要参与运算的两个操作数中有一个是字符串,就进行字符串拼接运算
如下示例
let a = 10 let b = 20 let ret = a + b console.log(ret) // 30 let x = 10 let y = '20' let str = x + y console.log(str) // 1020
5.4.2、+=(字符串自操作)
运算规则
进行字符串拼接操作
示例:
let a = 'hello' a += ' world' console.log(a) // hello world
5.4.3、字符串与变量的拼接 **
作用:
将一个字符串与变量的值进行拼接。拼接的情况有以下几种:
- 变量的值可能出现在字符串结尾或开头
- 变量的值可能出现在字符串中间
示例:
拼接到字符中间
let age = 20 // 需求:将age变量的值,放到字符串 '我今天 ? 岁了' 这个字符串的?处输出 let ret1 = '我今天age岁了' // 尝试是否可以,思考为什么 console.log(ret1) let ret2 = '我今天' + age + '岁了' // console.log(ret2)
拼接到字符结尾或开头
let age = 20 let word = '我的年龄为' let ret3 = wrold + age
在js中单引号或双引号定义的字符串中的变量,其值并不能被解析出来进行显示,仅是显示变量的名,js语言规定的,是不容置疑的
👉 任务2:实现
// 获取用户数据 let n1 = prompt('输入第1个数值') let n2 = prompt('输入第2个数值') // 对用户数据进行乘法运算,得到结果 let ret = n1 * n2 // 虽然得到了结果,但是最终显示的内容中不但有结果,还有其他内容(10 * 20 =)。这部分内容并不是完全由用户输入的 // 所以我们要拼接生成这部分内容, let fina = n1 + '*' + n2 + '=' + ret alert(fina)
5.5、比较运算符
==
作用:
用于判断两个变量的值是否相等,返回的结果永远是布尔类型
相等返回 布尔值:true
否则返回 布尔值:false
示例:
// 判断两个值是否相等 console.log( 10 == 10) // true // 判断两个变量的值是否相等 let a = 10 let b = 20 let c = 20 console.log(a == b) // false console.log(b == c) // true // 判断变量与值是否相等 let a = 10 let b = 20 console.log(a == 10) // true console.log(b == 10) // false
比较的结果也可以保存在一个变量中,这个变量就等效于布尔值true或false
let a = 10 let b = 20 let c = 20 // 使用变量保存比较的结果 let ret1 = a == b let ret2 = b == c console.log(ret1) // false console.log(ret2) // true
5.6、应有所得
- 算术
% 取余
++
–
对变量的值加减1 再赋值给自己
+=
-=
*=
/=
%=
对变量的值加减乘除某个数再赋值给自己
- 字符串
+=
只要有一个操作数是字符串,那么就是字符串拼接
字符串与变量的拼接,变量不能写在字符串内
- 比较运算符
==
6、表达式
6.1、目的
- 了解什么是表达式
- 能够将需求中的条件书写成一个表达式
6.2、什么是表达式
表达式就是由变量、数据、以及运算符组成的一个式子。换句话讲就是使用式子把一个条件表达出来。
示例:
需求1:张三与李四谁的年龄大
age1 > age2
需求2:微信余额是否可以支付午餐费用
wx > lanch
需求3:判断一个人是否成年
age >= 18
需求4:求购物车内的小计与总计
g1_price = 100; gl_num = 10; g1_sum = g1_price * gl_num
g2_price = 20; g2_num = 15 g2_sum = g2_price * g2_num
g1_sum + g2_sum;
6.3、运算符的优先级
数学:+ - * / 先乘除 后加减
赋值运算
比较运算符
数学运算符优先计算(数值运算符之间先乘除后加减) 比较运算符 赋值运算符
7、流程控制_1
7.1、目标
-
能使用if完成一种情况的判断
-
能使用if完成两种或多种不同情况的判断
流程控制分类:
- 顺序结构
程序自由而下的执行过程
👉 顺序结构是最简单的结构,按代码的书写顺序来执行。
- 分支结构
根据条件的成立与否将程序转向不同的代码块执行。
- 循环结构
根据某一条件重复的执行一段代码。
7.2、if分支_单分支
语法:
if(
条件表达式
){ //代码块
}
// … if结构外,后面的语句 …
执行逻辑:
首先判断
条件表达式
是否成立?如果不成立执行if结构外,后面的语句。
如果成立,则执行代码块。代码块执行完,再执行后面的语句
示例:
条件表达式
为 true(翻译为成立)if(true){ console.log('美国恶意阻拦') } console.log('中国崛起')
条件表达式
为 false(翻译为不成立)if(false){ console.log('美国恶意阻拦') } console.log('中国崛起')
条件表达式
也可以是一个式子let age = prompt('输入年龄') if(age >= 18){ console.log('可以交女朋友了') }
条件表达式
还可以是一个变量let age = prompt('输入年龄') let ret = age >= 18 if(ret){ console.log('可以交女朋友了') }
👉 在JS中一切都要以作为表达式,具体的值、一个式子、一个变量…都 可以作为表达式。
7.3、if分支_双分支
语法:
if(
条件表达式 1
){ //代码块1
}else if(
条件表达式 2
){ // 代码块2
}
// … if结构外,后面的语句 …
执行逻辑:
首先判断
条件表达式 1
是否成立?如果成立,则执行代码块1。代码块1执行完后就结束整个if结构(不会再判断
条件表达式 2
) 直接执行if结构外,后面的语句。如果
条件表达式 1
不成立,则判断条件表达式 2
是否成立?如果成立,则执行代码块2。如果不成立,不结束整个if结构,继续执行if结构后面的语句。
7.4、if分支_多分支
语法:
if(
条件表达式 1
){ //代码块1
}else if(
条件表达式 2
){ // 代码块2
}else if(
条件表达式 3
){ // 代码块3
}else{
// 缺省语句块
}
// … if结构外,后面的语句 …
执行逻辑:
自上而下的判断
条件表达式
是否成立,当某个表达式成立时就执行对应的代码块,当某个代码块执行之比后,立即结构整个if结构,继续if结构外,后面的语句执行。当所有的
条件表达式
都不成立时,执行缺省语句块。else if结构可以有多个,else结构可以省略。
7.5、if嵌套
一个if语句还可以包含另一个if语句,这种形式就是if嵌套
8、Math数学对象
8.1、目标
- 了解Math数学计算工具
- 熟练的使用 向上取整、向下取整、随机函数
8.2、Math对象
Math对象是JS为我们提供的一个辅助对象。
Math对象上有数学计算相关的数据以及计算方法。
辅助我们进行数学相关的运算,可以完成除加减乘除之外的复杂运算。
8.3、相关操作
8.3.1、获取圆周率
语法:
Math.PI
示例:
console.log(Math.PI) //3.141592653589793
8.3.2、 求绝对值
语法:
Math.abs()
示例:
let a = -10 console.log(Math.abs(a)) // -10 console.log(Math.abs(5-20)) // -15
8.3.3、 求绝次方
语法:
Math.pow(m,n)
👉 求m的n次方
示例:
console.log(Math.pow(2,8)) // 256
8.3.4、求最大值
语法:
Math.max(v1,v2,v3…)
求多个数中的最大值
示例:
console.log(Math.max(10,5,9,20,4)) // 20 let a=10,b=5,c=9,d=20,e=4 console.log(Math.max(a,b,c,d,e)) // 20
8.3.5、求最小值
语法:
Math.min(v1,v2,v3…)
求多个数中的最小值
示例:
console.log(Math.min(10,5,9,20,4)) // 4 let a=10,b=5,c=9,d=20,e=4 console.log(Math.min(a,b,c,d,e)) // 4
8.3.6、向上取整🔑
语法:
Math.ceil()
ceil是天花板的意思,对一个小数向上取整
示例:
console.log(Math.ceil(4.001)) // 5 console.log(Math.ceil(4)) // 4
8.3.7、向下取整🔑
语法:
Math.floor()
floor是地板的意思,对一个小数向下取整
示例:
console.log(5.9999) // 5 console.log(5) // 5
8.3.9、取随机数🔑
语法:
Math.random()
random是随机的意思,用于获取一个随机小数,包含0不包含1
示例:
console.log(Math.random())