第一天的内容
---
typora-root-url: img
---
# JavaScript概述
## 为什么学习JavaScript
一个页面构成由三个部分组成:结构(html)+表现(css)+行为(js)
![1659316286320](/1659316286320.png)
## JavaScript的介绍
JavaScript是一种支持面向对象的跨平台的脚本编程语言(编程语言)
面向对象:属于编程语言中核心思想
跨平台:可以在不同的操作系统中运行
脚本语言:依赖于某些特点的环境才可以运行
## JavaScript发展史
ECMAScript简称ES 用于制定语法标准。规定了代码应该如何编写
## JavaScript应用场景
1、表单验证
2、特效
3、小游戏
总结:只要是基于浏览器的相关功能都可以实现
## JavaScript组成
在**浏览器端js**是由三个部分组合起来
1、ES
2、BOM 表示浏览器对象模型 就可以控制到浏览器功能
3、DOM 表示文档对象模型 用于控制页面上的元素
# JS在HTML中书写位置
## 行内
```html
<!-- 1、js的书写位置 行内方式 -->
<!-- onclick 表示 当元素被点击时做什么 javascript:; 表示执行js代码 其中js的代码写在:与;之间,如果没有js代码表示什么都不做-->
<button onclick="javascript:;" >按钮</button>
<!-- alert 是js中内置的函数 用于弹出内容 内容中注意使用引号 -->
<button onclick="javascript:alert('你好');" >按钮</button>
```
## 内嵌
由于行内方式 结构与行为不分离导致代码维护困难
```html
<!-- 2、js的书写位置 内嵌方式 此方式跟页面载入事件有关系,在不理解情况下先写到最后 -->
<script>
alert("hello world");
</script>
```
## 外联
1、创建js文件
![1659318311692](/1659318311692.png)
2、引入文件
![1659318338029](/1659318338029.png)
注意:一旦使用外联方式(src属性指定) script标签中嵌套的代码无效
>总结:三种方式推荐使用的是外联,但是课堂上为了方便写代码。大多都使用内嵌方式
# JS中的输出语句
## alert()
页面上弹出一些内容
```html
<!-- 1、alert 系统弹出内容 在alert中指定内容 -->
<script>
alert('你确定要删除数据吗?')
</script>
```
## document.write()
```html
<!-- 2、document.write() 直接在页面上输入内容 -->
<script>
document.write('<h1>今日头条</h1>')
</script>
```
## prompt()
```html
<!--
3、prompt() 询问
var res = prompt('你喜欢谁?') 表示将用户输入的结果接受 并且保存到res变量中
alert(res); 表示将res变量的结果弹出
-->
<script>
var res = prompt('你喜欢谁?');
alert(res);
</script>
```
## confirm()
```html
<!-- 4、confirm 询问 只可以 选中是与否 -->
<script>
confirm('你今天18岁?')
</script>
```
## console.log()
```html
<!-- 5、console.log() 控制台中输出内容 以后可以使用该语句进行代码的测试,可以在怀疑出问题的位置 对内容进行输出 查看结果 -->
<script>
console.log('js代码的测试方式,目测')
</script>
```
# JS中注释
```html
<script>
// 1、表示单行注释
/*
2、多行注释。只要在注释符号中间的内容 都是备注说明
*/
</script>
```
# JS的变量(重点)
## 表达式
例如需要进行一些数学的运算,每一种运算都是一种表达式,例如 1 + 1 就是一种表达式 可以得到一定结果。表
达式的结果后期是绝对会使用。在编程语言中,也是需要进行大量的计算。每一次计算的结果也是后期要使用的。
也需要存储。所以需要存储数据的一种容器 变量就是存储数据的容器
## 变量声明
```javascript
// 1、变量声明 就是创建一个变量
// 语法是: var 变量名称
// var 是关键字 变量名称是我们自己指定的一个标识(只要满足变量命名规则即可)
var name;
```
## 变量赋值
```javascript
// 2、变量赋值 一定要保证变量先存在 变量的第一次赋值也叫做初始化
var age;
// 变量赋值 读法 将18这个值赋值给变量age
age = 18;
// 将age变量中的值在控制台中输出
console.log(age);
// 3、一般创建变量与赋值同时使用
var money = -1000;
console.log(money);
// 同时创建多个变量 变量之间使用逗号分割
var height = 1.8,
weight = 180;
// 变量连续赋值
var a = b = c = d = 20;
// 表示同时输出多个变量
console.log(a, b, c, d)
```
## 变量命名规则
```html
/*
规则
1、可以使用数字0-9,字母a-zA-Z,下划线_,美元符$ 组成
2、不允许以数字开头
3、不允许使用中文
4、区分大小写
5、不允许使用关键字和保留字
规范
1、尽量语义化 - 词必达意
2、尽量驼峰式 - 由多个单词组成时,每个单词的首字母大写 变量名称使用小驼峰,函数、类使用大驼峰
*/
// 1、没有遵守规范 使用特殊字符表示变量名称
// var !@# = 20;
// 2、不能使用数字表示变量名称开头
// var 5n=20;
// 3、JS中严格区分大小写 age 与Age是完全不同的变量
var age = 20;
var Age = 30;
// 4、不允许使用关键字和保留字
```
# JS数据类型(重点)
## 数据类型分类
将变量中存储的值进行归类操作,归类的类别就叫做数据类型。将值进行归类之后JS可以统一的进行控制,提供某
些功能
```javascript
1、基本类型
1、数字类型
2、字符串类型
3、布尔类型
4、undefined
5、null
2、引用类型
1、数组
2、对象
3、函数等
```
## 数字类型
只要是平常使用的数字 都是归属与数字,例如正数、负数、小数、整数都是数字类型
### 整数的基本使用
```javascript
// 1、数字类型的基本使用
var number = 10;
// 在js中可以使用typeof 关键字查看变量的数据类型
// typeof 关键字()表示调用 中间指定查看变量的名称
var res = typeof (number); //number 小写
var res2 = typeof number; //number 小写
// 使用逗号分割 同时输出res res2
console.log(res, res2);
// 修改number变量值
number = 20;
// js语言属于弱类型语言,变量可以存储任何数据类型的值
```
### 小数的使用
```javascript
// 2、小数使用
var n1 = 0.1;
var n2 = 0.2;
// 等价于 var res3 = typeof(n1) console.log(re3)
console.log(typeof(n1));
var res4 = n1 + n2;
console.log(res4);//0.30000000000000004
// 上面的结果不是0.3是因为在编程语言中是没有小数的 所以就存在精度问题
// res4.toFixed(2); 将res4变量的结果保留2位小数点
var res5 = res4.toFixed(2);
console.log(res5)
// 如果需要考虑精度问题 就需要下降单位
```
### NAN
```javascript
// 3、NAN Not a Number 表示不是一个数字 但是 确实是数字类型,但是这个值是无法表示
var n3 = 10;
var s1 = "abc";//字符串
console.log(s1*n3);
console.log(typeof(s1*n3));
```
### 数字的范围
```javascript
// 4、数字的范围 Number表示数字的构造函数名称
console.log(Number.MAX_VALUE);//MAX_VALUE 表示得到最大值
console.log(Number.MIN_VALUE);//MAX_VALUE 表示得到最小值
console.log(Number.MAX_SAFE_INTEGER);//MAX_SAFE_INTEGER 表示最大的安全整数
console.log(Infinity);//正无穷
console.log(-Infinity);//负无穷
```
## 字符串数据类型
### 存储字符串数据类型的数据
```javascript
// 1、字符串类型基本使用
// 使用单引号或者双引号将内容包裹 就是字符串类型
var s1 = '10';
console.log(typeof(s1));
// 使用双引号包裹
var s2 = "你好!你还有头发吗?";
console.log(s2,typeof s2);
```
### 字符串单双引号的嵌套
```javascript
// 2、字符串单双引号的嵌套 默认情况下 单引号不能嵌套单引号 双引号也不能嵌套双引号 单引号可以嵌套双引号 双引号可以嵌套单引号(不能嵌套自己,只能嵌套其他)
// var s3 = ' my name's xxx'
var s4 = "my name's xxx";
console.log(s4)
```
### 字符串转义符
```javascript
// 3、转义符号 \ 表示将后面的字符原有的含义取消
var s3 = 'my name\'s xxx';
console.log(s3)
```
### 字符串拼接
```javascript
// 4、字符串拼接 将两个字符串组合到一起
var s4 = 'hello'
var s5 = ' world'
// 使用+符号就可以完成拼接,在JS中+符号有2个作用 同时可以进行数学加法运算与拼接字符串功能,+只有运算的都是数字才会进行加法运算 否则一律作为拼接使用
var s6 = s4 + s5;
console.log(s6)
// 先计算s4+10的结果再对结果进行输出
console.log(s4 + 10)
console.log(10 + 10)
console.log('10' + 10);
```
### 输出HTML标签
```javascript
var name = '张三';
var age = 18;
// 单引号或者双引号中间的变量名称只是一个普通的字符串
var str = '<table><tr><td>'+name+'</td><td>'+age+'</td></tr></table>';
document.write(str);
```
## 布尔类型
布尔类型只有两种值 true与false 布尔值可以用于表示事物的两面(真与假)。布尔值作用用于后面的条件判断
```javascript
var flag = true;
console.log(typeof(flag));//boolean
var flag2 = false;
console.log(typeof(flag2));
```
## undefined
```javascript
当创建一个变量 但是又不给变量赋值,系统默认就将变量设置为undefined
// undefined
var number;
console.log(typeof(number));
```
## null
```javascript
null 表示空 也是什么都没有的含义
// null
var obj = null;
console.log(typeof obj);//object 因为null 在js中是对象
```
>建议:
>
>1、平常在使用变量时 尽可能为每一个变量设置初始值,数字 可以设置初始化为0 字符串初始值为''(空字符串) 布尔值 随意选择一个,数组初始值设置为\[](表示空数组)、对象设置为空对象{}
>
>2、建议每次使用变量 先代码顶部创建变量 最后在使用
# 运算符
## 算数运算符
```javascript
+:表示加法运算或者字符串拼接
-:减法运算
*:乘法运算
/:表示除法运算
%:求余数
var n1 = 10;
var n2 = 2;
// 数学运算 要求一定是数字
console.log('n1+n2=', n1 + n2);
console.log('n1*n2=', n1 * n2);
console.log('n1-n2=', n1 - n2);
console.log('n1/n2=', n1 / n2);
// % 求余数 除以某一个数字 得多少余多少 求余数最终得到的结果就是那个余数 例如 10 % 3 得3余1 使用余数这个符号 可以判断是否是指定数字的倍数
console.log(10%3);//1
var n3 = 5;
// n3 % 2 如果余数是0 就证明是偶数 如果余数是1 就证明是奇数
```
## 比较运算符
**比较运算符最后得到的结果永远是布尔类型**
```javascript
>:判断左边大于右边
<:判断左边小于右边
>=:判断左边大于或者等于右边
<=:判断左边小于或者等于右边
==:判断左右是否相等(只判断值) 相等得到的为真 否则为假
!=:判断左右是否不相等
===:判断左右是否全等(值与数据类型一定相同)
!==:判断左右是否不全等(只要值与数据类型有一个不一样 就是真)
var n1 = 10;
var n2 = 20;
var n3 = '10';
// >
console.log(n1>n2);//false
// <
console.log(n1<n2);//true;
// >=
console.log(n1>=n2);//false;
// <=
console.log(n1<=n2);//true;
// == 注意 两个等号判断相等 一个等号表示赋值
console.log(n1 == n2);//只判断值
console.log(n1 == n3);//true值判断了值 没有判断数据类型
console.log(n1 != n2);//true
// ===
console.log(n1===n3);//值相等 数据类型不同 false
console.log(n1 !== n3);//只与数据类型中只要有一个不同就是真
```
课后习题
1-计算两个文本框的和
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
// 注意数据类型 可以字符串-0后得到的是数字
var num1 = prompt("请输入第一个数字:")-0;
var num2 = prompt("请输入第二个数字:")-0;
// var res = Number(num1) + Number(num2);
// console.log(res)
// -0 减法 需要使用数字 如果某一个变量 不是数字类型 触发自动转换机制
var res = num1 + num2;
console.log(res);
</script>
</html>
2-小明换算温度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
/*
小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。
它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
提示:摄氏度与芈氏度的转换公式为:摄氏度 = 5/9.0*(华氏度-32)保留3位小数
小数点后保留3位,使用 数字.toFixed(要保留的位数) 例:3.1415926.toFixed(3) ===> 3.142
*/
var number = 80;
var res = (5 / 9.0) * (number - 32);
console.log(res.toFixed(3))
</script>
</html>
3-递增运算
4-交换两个变量的值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
var a = 1;
var b = 2;
// 根据上面两个变量,运用变量的赋值或计算,得出a=2;b=1
var tmp = a;
// 那个变量先将值赋值给 临时变量 就先修改这个变量
a = b
// 在将b变量的值进行修改
b = tmp;
console.log(a,b);
// b=a;
// a=b;
// console.log(a,b)
</script>
</html>
5-写出奇数偶数的条件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
var num = prompt("输入数字:");
if(num % 2 == 0){
console.log('偶数')
}else{
console.log('奇数')
}
</script>
</html>
6-战士抗洪
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
// 为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?
var hours = 89; // 总小时数;
var day = parseInt(89/24)
// var lastHours = 89 % 24
var lastHours = hours - day * 24;
console.log('天数:',day,'小数:',lastHours)
</script>
</html>
7-逻辑运算
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
// 输入一个数字,判断是否能被3整除并且能被5整除
var num = prompt("请输入你要判断的数字:");
if ((num % 3 == 0) && (num % 5 == 0)) {
console.log('ok')
}
</script>
</html>
8-写出闰年的条件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
// 需要使用逻辑运算符
var year = prompt("请输入年份:");
// 闰年:条件 整除4 但是 不能整除100 或者 整除400
// if (year % 4 == 0 && year % 100 != 0) {
// console.log('是闰年');
// } else {
// if (year % 400 == 0) {
// console.log('是闰年')
// } else {
// console.log('是平年')
// }
// }
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
console.log('是闰年');
} else {
console.log('是平年');
}
// if(){
// if(){
// if(){
// }
// }else{
// }
// }else{
// }
// 错误优先
// if(XXX错误情况){
// 代码执行到这里就不执行了
// }
// if(XXX错误2){
// 代码执行到这里就不执行了
// }
// if(){
// 1000行
// }else{
// 1行代码
// }
</script>
</html>