然后在js文件中写代码:
alert(“hehe”);
> 注意:这种情况下 script 标签中间不能写代码. 必须空着(写了代码也不会执行)。适合代码多的情况.
3\. JavaScript 基本语法
=====================
3.1 注释
------
单行注释://
// 我是单行注释
多行注释:/\* \*/
/*
我是多行注释
我是多行注释
我是多行注释
*/
3.2 输入输出
--------
**输入: prompt**
弹出一个输入框
// 弹出一个输入框
prompt(“请输入您的姓名:”);
![](https://img-blog.csdnimg.cn/c554ef8d008a4495b4503d72d6e4c2a8.png)
**输出: alert**
弹出一个警示对话框, 输出结果:
// 弹出一个输出框
alert(“hello”);
![](https://img-blog.csdnimg.cn/147c0702f95b4259a161501050d7d2a5.png)
**输出: console.log**
在控制台打印一个日志:
// 向控制台输出日志
console.log(“这是一条日志”);
在VS Code中可以在控制台直接看到:
![](https://img-blog.csdnimg.cn/309aaf1b7a154f85bec6cf5862242704.png)
在浏览器中按F12(或者鼠标右键检查)打开开发者工具,在Console中可看到:
![](https://img-blog.csdnimg.cn/0d667a39ceaf464a960536f9996cdd3a.png)
console.log 解释:
> console 是一个 js 中的 "对象"
> . 表示取对象中的某个属性或者方法. 可以直观理解成 "的"
> console.log 就可以理解成: 使用 "控制台" 对象 "的" log 方法.
**3.3** 变量
----------
### 3.3.1 变量初始化
* var是一个JS关键字,用来声明变量(variable变量的意思)。使用该关键字声明变量后,计算机会自动为变量分配内存空间。
* 初始化的值如果是字符串, 那么就要使用单引号或者双引号引起来。
* 同时声明多个变量时,只需要写一个 var, 多个变量名之间使用英文逗号隔开。
// 声明变量同时赋值
var name = ‘gousheng’;
// 同时声明多个变量时,只需要写一个 var, 多个变量名之间使用英文逗号隔开
var age = 20, address = ‘花果山’;
使用变量:
console.log(age); // 读取并打印变量
age = 30; // 修改变量内容
### 3.3.2 变量的命名规范
1. 由字母(A-Z,a-z),数字(0-9),下划线(\_),美元符号($)组成,如:user,num12,\_\_age
2. 严格区分大小写。
3. 不能以数字开头。
4. 不能是关键字,保留字。例如:`var,for,while`
5. 遵循小驼峰命名法。首字母小写,后面单词的首字母需要大写。`className`
3.4 基本数据类型
----------
| 简单数据类型 | 说明 | 默认值 |
| --- | --- | --- |
| Number | 数字型,包含整型值和浮点型值,如1,0.1 | 0 |
| Boolean | 布尔值类型,如true,false ,等价于1和0 | false |
| Undefined | var a; 声明了变量a但是没有赋值,此时a=undefined | undefined(未定义的) |
| string | 字符串类型,如“狗剩” | “” |
| Null | var a = null;声明了变量a为空值 | null |
3.5 流程控制
--------
### 3.5.1 if
if 使用语法如下:
// 形式1
if (条件) {
语句
}
// 形式2
if (条件) {
语句1
} else {
语句2
}
// 形式3
if (条件1) {
语句1
} else if (条件2) {
语句2
} else if … {
语句...
} else {
语句N
}
### 3.5.2 switch
语法:
switch (表达式) {
case 值1:
语句1;
break;
case 值2:
语句2:
break;
default:
语句N;
}
示例:
var day = 6;
switch (day) {
case 1:
console.log("星期⼀");
break;
case 2:
console.log("星期⼆");
break;
case 3:
console.log("星期三");
break;
case 4:
console.log("星期四");
break;
case 5:
console.log("星期五");
break;
case 6:
console.log("星期六");
break;
case 7:
console.log("星期⽇");
break;
default:
console.log("其他");
}
输出结果:
![](https://img-blog.csdnimg.cn/fd573e69eb974ce8ae408940f5c9b4fd.png)
### 3.5.3 while 循环
语法:
while (条件) {
循环体;
}
执行过程:
* 先执行条件语句
* 条件为 true, 执行循环体代码.
* 条件为 false, 直接结束循环
示例:
var num = 1;
while (num <= 10) {
console.log(num);
num++;
}
执行结果:
![](https://img-blog.csdnimg.cn/ff626672263f4bd99e067f2fa41538af.png)
### 3.5.4 for 循环
for (表达式1; 表达式2; 表达式3) {
循环体
}
* 表达式1: 用于初始化循环变量.
* 表达式2: 循环条件
* 表达式3: 更新循环变量.
示例:
for (var num = 1; num <= 5; num++) {
console.log(num);
}
执行结果:
![](https://img-blog.csdnimg.cn/b655ab707af142a895f7c2f21c1c9221.png)
### 3.5.5 三元表达式
是 if else 的简化写法
条件 ? 表达式1 : 表达式2
条件为真, 返回表达式1 的值. 条件为假, 返回表达式2 的值.
### 3.5.6 break 关键字
**结束整个循环**。
例如,吃五个李子, 发现第三个李子里有半个虫子, 于是剩下的也不吃了.
var i = 1;
while (i <= 5) {
if (i == 3) {
break;
}
console.log("我在吃第" + i + "个李子");
i++;
}
执行结果:
![](https://img-blog.csdnimg.cn/89a78f54bfb44067b4dd7c9a520456c0.png)
### 3.5.7 continue 关键字
continue 关键字用于**立即跳出本次循环,继续下一次循环。**
例如,吃五个李子, 发现第三个李子里有半个虫子, 于是扔掉第三个,继续吃第四个。
for (var i = 1; i <= 5; i++) {
if (i == 3) {
console.log("第" + i + "个李子有虫,不吃,扔掉!");
continue;
}
console.log("我在吃第" + i + "个李子");
}
执行结果:
![](https://img-blog.csdnimg.cn/a6646994243648789c8a4ebb7ae0e8cc.png)
3.6 函数
------
### 3.6.1 基本语法
// 创建函数/函数声明/函数定义
function 函数名(形参列表) {
函数体
return 返回值;
}
// 函数调用
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值
注意:函数定义并不会执行函数体内容, 必须要调用才会执行. 调用几次就会执行几次.
示例:
function hello() {
console.log(“hello”);
}
// 如果不调用函数, 则没有执行打印语句
hello();
### 3.6.2 函数表达式
var add = function() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(add(10, 20)); // 30
console.log(add(1, 2, 3, 4)); // 10
console.log(typeof add); // function
> 此时形如 function() { } 这样的写法定义了一个匿名函数, 然后将这个匿名函数用一个变量来表示. 后面就可以通过这个 add 变量来调用函数了
4\. WebAPI
==========
4.1 什么是API
----------
API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOM+BOM 所谓的 API 本质上就是一些现成的函数/对象, 让程序猿拿来就用, 方便开发.
API 参考文档:[Web API 接口参考 | MDN]( )
4.2 DOM 简介
----------
DOM 全称为 **D**ocument **O**bject **M**odel(文档对象模型),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。
4.3 获取元素
---------
### 4.3.1 querySelector
**根据指定选择器返回第一个元素对象**,用法如下:
var element = document.querySelector(selectors);
* selectors (选择器)包含一个或多个要匹配的选择器的 DOM字符串 DOMString,该字符串必须是有效的CSS选择器字符串;如果不是,则引发 SYNTAX\_ERR 异常;
* 表示文档中与指定的一组CSS选择器匹配的第一个元素的 html元素Element对象;
* 如果您需要与指定选择器匹配的所有元素的列表,则应该使用 querySelectorAll()
* 可以在任何元素上调用,不仅仅是 document。 调用这个方法的元素将作为本次查找的根元素。
正因为参数是选择器, 所以一定要通过特殊符号指定是哪种选择器,例如 .box 是**类选择器**, #star 是 **id 选择器** 等:
<div class="box">abc</div>
<div id="id">def</div>
<h3><span><input type="text"></span></h3>
<script>
var elem1 = document.querySelector('.box');
console.log(elem1);
var elem2 = document.querySelector('#id');
console.log(elem2);
var elem3 = document.querySelector('h3 span input');
console.log(elem3);
</script>
### 4.3.2 querySelectorAll
**根据指定选择器返回所有元素对象**,使用方法和 querySelector 类似。
示例:
<div class="box">abc</div>
<div id="id">def</div>
<script>
var elems = document.querySelectorAll('div');
console.log(elems);
</script>
4.4 事件基础
--------
### 4.4.1 事件概述
JS 要构建动态页面, 就需要感知到用户的行为,用户对于页面的一些操作(点击, 选择, 修改等) 操作都会在浏览器中产生一个个事件, 被 JS 获取到, 从而进行更复杂的交互操作。
> 浏览器就是一个哨兵, 在侦查敌情(用户行为). 一旦用户有反应(触发具体动作), 哨兵就会点燃烽火台的狼烟(事件), 后方就可以根据狼烟来决定下一步的对敌策略.
### 4.4.2 事件三要素
1. 事件源: 哪个元素触发的
2. 事件类型: 是点击, 选中, 还是修改?
3. 事件处理程序: 进一步如何处理. 往往是一个回调函数.
### 4.4.3 执行事件的步骤
1. 获取事件源
2. 注册事件(绑定事件)
3. 添加事件处理程序(采取函数赋值形式)
示例:
<button id="btn">点我有惊喜</button>
<script>
// 1. 获取事件源
var btn = document.querySelector('#btn');
// 2.绑定事件 注册事件
// div.onclick
// 3.添加事件处理程序
btn.onclick = function () {
alert("奖励暑假作业一套!");
}
</script>
未点击:
![](https://img-blog.csdnimg.cn/e0e79b4337a448acbb79189a52974ab9.png)
点击后:
![](https://img-blog.csdnimg.cn/d004a37080fd4cda93a6fa2214139b15.png)
### 4.4.4 鼠标事件
| 鼠标事件 | 触发条件 |
| --- | --- |
| onclick | 鼠标点击左键触发 |
| onmouseover | 鼠标经过触发 |
| onmouseout | 鼠标离开触发 |
| onfocus | 获得鼠标焦点触发 |
| onblur | 失去鼠标焦点触发 |
| onmousemove | 鼠标移动触发 |
| onmouseup | 鼠标弹起触发 |
| onmousedown | 鼠标按下触发 |
4.5 操作元素
--------
### 4.5.1 获取/修改元素内容
**innerText :**
Element.innerText 属性表示一个节点及其后代的“渲染”文本内容。
// 读操作
var renderedText = HTMLElement.innerText;
// 写操作
HTMLElement.innerText = string;
**不识别 html 标签. 是非标准的(IE发起的). 读取结果不保留html源码中的 换行 和 空格,示例:**
<div>
<span>hello world</span>
<span>hello world</span>
</div>
<script>
var div = document.querySelector('div');
// 读取 div 内部内容
console.log(div.innerText);
// 修改 div 内部内容, 界面上就会同步修改
div.innerText = 'hello js <span>hello js</span>';
</script>
![](https://img-blog.csdnimg.cn/9222aa0991f34669a97ff429dfb50487.png)
> 可以看到, 通过 innerText 无法获取到 div 内部的 html 结构, 只能得到文本内容,修改页面的时候也会把 span 标签当成文本进行设置.
**innerHTML :**
Element.innerHTML 属性设置或获取HTML语法表示的元素的后代。
// 读操作
var content = element.innerHTML;
// 写操作
element.innerHTML = htmlString;
**识别 html 标签. W3C 标准的. 读取结果保留html源码中的 换行 和 空格,示例:**
<div>
<span>hello world</span>
<span>hello world</span>
</div>
<script>
var div = document.querySelector('div');
// 读取页面内容
console.log(div.innerHTML);
// 修改页面内容
div.innerHTML = '<span>hello js</span>'
</script>
![](https://img-blog.csdnimg.cn/3204f17dd450480d9a44d7ccf580e19e.png)
> 可以看到 innerHTML 不光能获取到页面的 html 结构, 同时也能修改结构. 并且获取到的内容保留的空格和换行.
### 4.5.2 获取/修改元素属性
可以通过 Element 对象的属性来直接修改, 就能影响到页面显示效果.
<img src="image/img.jpg" alt="这是一朵花" title="玫瑰花">
<script>
var img = document.querySelector('img');
console.dir(img);
</script>
此时可以看到 img 这个Element对象中有很多属性 :
![](https://img-blog.csdnimg.cn/4962b03d518a43389a6399bd39255ed4.png)
![](https://img-blog.csdnimg.cn/638b3077bb7b44c4b7890e0224a81d92.png)
我们可以在代码中直接通过这些属性来获取属性的值:
<img src="image/img.jpg" alt="这是一张图片" title="图片">
<script>
var img = document.querySelector('img');
console.log(img.src);
console.log(img.title);
console.log(img.alt);
</script>
![](https://img-blog.csdnimg.cn/f05f28bbf80e41dc9bacb432582c4acf.png)
还可以直接修改属性:
<img src="image/img.jpg" alt="这是一张图片" title="图片" width="50%" height="50%">
<script>
var img = document.querySelector('img');
img.onclick = function () {
if (img.src.lastIndexOf('image/img.jpg') !== -1) {
img.src = 'image/head.jpg';
} else {
img.src = 'image/img.jpg';
}
}
</script>
> 此时点击图片就可以切换图片显示状态. (需要提前把两个图片准备好)
![](https://img-blog.csdnimg.cn/9c9440a6d3fb40c6a864aa5c48576461.png)
点击后:
![](https://img-blog.csdnimg.cn/f1ffc0bab71f493694b46b547fb2369f.png)
### 4.5.3 获取/修改表单元素属性
表单(主要是指 input 标签)的以下属性都可以通过 DOM 来修改:
* **value**: input 的值.
* **disabled**: 禁用
* **checked**: 复选框会使用
* **selected**: 下拉框会使用
* **type**: input 的类型(文本, 密码, 按钮, 文件等)
**示例: 切换按钮的文本**
> 假设这是个播放按钮, 在 "播放" - "暂停" 之间切换.
<input type="button" value="播放">
<script>
var btn = document.querySelector('input');
btn.onclick = function () {
if (btn.value === '播放') {
btn.value = '暂停';
} else {
btn.value = '播放';
}
}
</script>
![](https://img-blog.csdnimg.cn/f40cdab3bc4c4b8bb9964ef4cb5a4fba.png)