HTML5+CSS3+JavaScript
Made by Ziyang CHEN, Rocky, 陈子阳
网页最主要由3部分组成:结构写到 HTML 文件中, 表现写到 CSS 文件中, 行为写到 JavaScript 文件中。
- HTML (HyperText Markup Language): 构建网页的基础,它通过标签来定义网页的内容和结构。HTML 用来规定网页中的 **文本、图片、视频等 **内容,以及它们的 **语义和结构 (Structure)**。
- CSS (Cascading Style Sheets): 控制网页样式和布局的语言。CSS 用于设置网页的 **外观样式/表现 (Presentation)**,如 文字颜色、大小、边距、背景等。CSS 可以将样式信息与网页内容分离,使得同一份内容可以使用不同的样式显示。
- JavaScript: 一种脚本语言,是我们前端的核心,主要用于实现 网页的各种交互和动态效果,即 **行为 (Behavior)**。JavaScript 可以响应用户的交互,控制网页内容,使网页有丰富的动态功能。比如实现网页验证、轮播图、下拉菜单等等。
VSCode常用的快捷键 | |
---|---|
快速复制一行 | Shift + option + ⬆️/⬇️ |
添加多个光标 | Command + option + ⬆️/⬇️ |
个人笔记,仅供参考 (FOR REFERENCE ONLY)
01. HTML (Hyper Text Markup Language)
1 |
|
其他 <head> 内部标签 | Description |
---|---|
<style> | 定义CSS样式 |
<link> | 链接外部CSS文件或脚本文件 |
<script> | 定义脚本语言 |
<base> | 定义页面所有链接的基础定位(用得很少) |
1.1 段落与文字标签
标签 | 语义 | 说明 |
---|---|---|
<h1>~<h6> | header | 标题,一个标题独占一行。 |
<p> | paragraph | 段落,段落和段落之间保有空隙。 |
<br /> | break | 换行,是个单标签,简单地开始新的一行 |
<hr> | horizontal rule | 水平线 |
<div> | division 分割/一行一个 | 块元素,用来布局,<div> 一行一个的单行大标签 (大盒子) |
<span> | span 跨行/一行多个 | 行内元素,用来布局,一行上可以放多个 <span> (小盒子) |
1.2 文本格式化标签
1 |
|
1 |
|
1.3 图像标签和路径
1 |
|
属性 | 属性值 | 说明 |
---|---|---|
src | 图片路径 | 必须属性 |
alt | 文本 | 替换文本。图像不能显示时显示此文字 |
title | 文本 | 提示文本。鼠标放在图像上,显示的文字 |
weight | 像素 | 设置图像的宽度 |
height | 像素 | 设置图像的高度 |
border | 像素 | 设置图像的默认黑色的边框粗细,一般后面通过CSS指定 |
相对路径: 以引用文件所在位置为参考基础,而建立出的目录路径。 这里简单来说,图片相对于 HTML 页面的位置
相对路径分类 | 符号 | 说明 |
---|---|---|
同一级路径 | 图像文件位于HTML文件同一级 如: <img src=”baidu.gif” /> | |
下一级路径 | / | 图像文件位于HTML文件下一级 如: <img src=”images/baidu.gif” /> |
上一级路径 | ../ | 图像文件位于HTML文件上一级 如: <img src=”../baidu.gif”/> |
绝对路径: 指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。
1 |
|
1.4 <a href=”#”>超链接标签</a>
<a> 标签 用于定义超链接,作用是从一个页面到另一个页面。
1 |
|
1.5 <table> 表格标签
表格主要用于 显示、展示数据,在表格中包含几组<tr></tr>就表示该表格为几行。
[th] colspan, 跨列合并, 跨度列数 = 2 | [th] 表头单元格 | [th] 加超链接 | |
---|---|---|---|
[td] 标准单元格1 | [td] 标准单元格2 | [td] align="center" rowspan, 跨行合并, 跨度行数 = 2 | [td] 第一个链接 |
[td] 标准单元格3 | [td] 标准单元格4 | [td] 第二个链接 | |
[td] 标准单元格5 | [td] 标准单元格6 | [td] 标准单元格7 | [td] 第三个链接 |
1 |
|
1.6 List label
标签名 | 定义 | 说明 |
---|---|---|
<ol></ol> | 有序标签 | 里面只能包含<li> 有顺序,<li> 里面可以包含任何标签 |
<ul></ul> | 无序标签 | 里面只能包含<li> 没有顺序,<li> 里面可以包含任何标签 |
<dl></dl> | 自定义列表 | 里面只能包含<dt>和<dd>。<dt>和<dd>里面可以放任何标签 |
<ol> 有序列表 (ordered list)
- 有序列表项
- 有序列表项
- 有序列表项
1 |
|
<ul> 无序列表 (unordered list)
- 无序列表项
- 无序列表项
- 无序列表项
1 |
|
<dl> 定义列表 (definition list)
- 名词1
- 添加该名词1的具体解释1
- 添加该名词1的具体解释2
- 名词2
- 添加该名词2的具体解释1
- 添加该名词2的具体解释2
1 |
|
1.7 Four form labels
<input>标签
<input type="表单类型">
<input type=”表单类型”> | 描述 |
---|---|
button | 定义可点击按钮 (多数情况下,用于通过 JavaScript 启动脚本) |
checkbox | 定义复选框 |
file | 定义 “输入字段” 和 “浏览” 按钮,供文件上传 |
hidden | 定义隐藏的输入字段 |
image | 定义图像形式的提交按钮 |
password | 定义密码字段。该字段中的字符被掩码 |
radio | 定义单选按钮 |
reset | 定义重置按钮。重置按钮会清除表单中的所有数据,还原表单元素初始的默认状态 |
submit | 定义提交按钮。提交按钮会把表单数据发送到服务器 |
text | 定义单行的输入字段,用户可在其中输入文本。默认宽度为 20 个字符 |
<input type="表单类型" name = "名称" value ="值" checked="checked" maxlength="20" >
其他属性 | 描述 |
---|---|
name | 定义 input 元素的名称,每个表单元素都有的属性值,区别不同的表单,主要给后台人员使用. |
value | 规定 input 元素的值,text 刚打开页面就默认显示value。其他 type 不显示,用户输入后,value会发送给后台人员. |
checked | 规定此 input 元素首次加载时默认就会被选中 |
maxlength | 规定输入宇段中的字符的最大长度 |
- name 表单元素的名字, 要求 单选按钮和复选框要有相同的name值.
- checked 属性主要针对于 单选按钮和复选框,主要作用 一打开页面就要可以默认选中某个表单元素.
1 |
|
<input type="submit">
提交按钮:当用户单击确认按钮时,表单的内容会被传送到服务器。表单的动作属性 action 定义了服务端的文件名。action 属性会对接收到的用户输入数据进行相关的处理:
假如在下面文本框内键入几个字母,然后点击确认按钮,那么输入数据会传送到 html_form_action.php 文件,该页面将显示出输入的结果。实例中有一个 method 属性,它用于定义表单数据的提交方式,可以是以下值:
- post:指的是 HTTP POST 方法,表单数据会包含在表单体内然后发送给服务器,用于提交敏感数据,如用户名与密码等。
- get:默认值,指的是 HTTP GET 方法,表单数据会附加在 action 属性的 URL 中,并以 ? 作为分隔符,一般用于不敏感信息,如分页等。例如:
https://www.runoob.com/?page=1
,这里的 page=1 就是 get 方法提交的数据。
1 |
|
<label></label>
标签
<label> 标签为 input 元素定义标注(标签),用于绑定一个表单元素,当点击<label> 标签内的文本时,浏览器就会自动将焦点(光标)转到或者选择对应的表单元素上,用来增加用户体验.
1 |
|
<textarea> 标签 – 特大号文本框
当用户输入内容较多的情况下,我们就不能使用文本框表单了,此时我们可以使用 <textarea>
标签。 在表单元素中,<textarea>
标签是用于定义多行文本输入的控件。 使用多行文本输入控件,可以输入更多的文字,该控件常见于留言板,评论。
1 |
|
<select> 和 <option> 下拉列表
有多个选项让用户选择,可以使用 <select>
标签控件定义下拉列表
<select>
中至少包含一对<option>
- 在
<option>
中定义selected ="selected"
时,当前项即为默认选中项
1 |
|
02. CSS (Cascading Style Sheets)
CSS 是也是一种标记语言,主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、 边距等)以及版面的布局和外观显示样式。
所有的样式,都包含在 <style>
标签内,表示是样式表。<style>
一般写到 </head>
上方。
2.1 基础选择器 (selector)
四种选择器:标签选择器、class、id 选择器和通配符选择器,以下 S
为选择器名:
- 元素/标签选择器 (element selector, ES):
S{...}
,把某一类标签全部选择出来匹配成相应样式 - 类选择器(class):
.S{...}
,就像衣服,一个人可以有多个衣服,同时一个衣服也可以被多个人使用。 - id 选择器:
#S{...}
,好比人的身份证号码,是唯一的,不得重复。id 选择器一般用于页面唯一性的元素上。
Element selector [全部标签选出来]
- 作用:标签选择器可以把 某一类标签全部选择出来,比如所有的
<div>
标签和所有的<span>
标签。 - 优点: 能快速为页面中同类型的标签统一设置样式。
- 缺点: 不能设计差异化样式,只能选择全部的当前标签。
1 |
|
.class 选择器 [公共样式放里边]
如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器。
类选择器口诀:样式 .
定义 结构 类(class)
调用。自定义的名称,以 .
号作为前缀,然后再通过HTML标签的class属性调用类选择器。以标签的class属性作为样式应用的依据。注意事项:
- HTML 调用 类选择器 时不能添加
.
号 - HTML 同时调用多个类选择器时,以
空格
分隔 - 类选择器名称不能以
数字
开头
1 |
|
#id 选择器 [一次性调用]
HTML 元素以 id 属性来设置 id 选择器,CSS 中 id 选择器以 #
来定义。
- 注意:id 属性只能在每个 HTML 文档中出现一次。
- 口诀:样式
#
定义,结构id
调用,只能调用一次,别人切勿使用.
1 |
|
通配符选择器 [选择所有标签]
通配符选择器使用 *
定义,它表示选取页面中所有元素(标签)。通配符选择器不需要调用, 自动就给所有的元素使用样式,特殊情况才使用
1 |
|
2.2 CSS 字体属性
CSS Fonts (字体) 属性用于定义 字体系列、大小、粗细、和文字样式(如斜体)
属性 | 含义 |
---|---|
font-size | 大小、尺寸 (可以使用多种单位) |
font-weight | 粗细 |
font-family | 字体 |
font-style | 样式 |
font | 简写 |
font-size [字体大小]
- 谷歌浏览器默认的文字大小为16px,不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小
- inherited继承,默认从父标签继承字体大小(默认值),所有CSS属性的默认值都是inherited
- px(pixel
/ˈpɪksl/
,像素)大小是我们网页的最常用的单位 - % 百分比,相对父标签字体大小的百分比
- em 倍数,相对于父标签字体大小的倍数
1 |
|
font-weight [字体粗细]
- 学会让加粗标签(比如 h 和 strong 等) 不加粗,或者其他标签加粗
- 实际开发时,我们更喜欢用 数字(100 - 900) 表示粗细,后面不要跟单位,**400 等同于 “normal”,而700等同于 “bold”**。
- normal 普通(默认)
- bold 粗体
- 自定义:400 = normal,700 = bold
1 |
|
font-family [文本字体系列]
- 各种字体之间必须使用英文状态下的逗号隔开;一般情况下,如果有空格隔开的多个单词组成的字体,加引号。
- 尽量使用系统默认自带字体,保证在任何用户的浏览器中都能正确显示
- 最常见的几个字体:body {font-family: ‘Microsoft YaHei’,tahoma,arial,’Hiragino Sans GB’; }
1 |
|
font-style [文本风格]
属性值/取值 | 作用 |
---|---|
font-style: normal; |
默认值,浏览器会显示标准的字体样式。 |
font-style: italic; |
浏览器会显示斜体的字体样式。 |
1 |
|
font: font-size font-family;
- 使用
font属性
时,可以把字体样式综合来写,更节约代码,但必须按下面语法格式中的顺序书写,并且各个属性间以空格隔开 - 不需要设置的属性可以省略(取默认值),但必须保留
font-size
和font-family
属性,否则 font 属性将不起作用
1 |
|
1 |
|
2.3 CSS 文本属性
CSS Text(文本)属性可定义文本的外观,比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等。
属性 | 含义 | 说明 |
---|---|---|
color | 颜色 | 我们通常用 十六进制,而且是简写形式 #fff |
line-height | 行高 | 行之间的高度,控制行与行之间的距离 |
text-align | 水平对齐方式 | 取值:left、center、right |
vertical-align | 垂直对齐方式 | 取值:top、middle、bottom可以用于图片和文字的对齐方式 |
text-indent | 首行缩进 | 通常我们用于段落首行缩进2个字的距离 text-indent: 2em; |
text-decoration | 文本修饰 | 取值:underline, overline, line-through;添加下划线 underline 取消下划线 none |
text-transform | 字母大小写转换 | 取值:lowercase、uppercase、capitalize首字母大写 |
letter-spacing | 字符间距 | |
word-spacing | 单词间距 | 只对英文有效 |
white-space | 空白的处理方式 | 文本超出后是否换行,取值:nowrap |
color: 文本颜色
取值写法 | 属性值 | 备注 |
---|---|---|
预定义的颜色值 | color: red |
颜色名称直接使用英文单词 |
十六进制 (开发中最常用) |
color: #cc00ff; |
特定情况下可以缩写: #FFFFFF—>#FFF 白色 #000000—>#000 黑色 #FF0000—>#F00 红色 #00FF00—>#0F0 绿色 #0000FF—>#00F 蓝色 #CCCCCC—>#CCC 灰色 #FF7300—>无法简写 |
RGB代码 | rgb函数:rgb(red,green,blue)color: rgb(255, 0, 255); or rgb(100%,0%,100%) |
rgba函数:rbga(red,green,blue,alpha), alpha设置透明度 [0,1]: [完全透明, 完全不透明] rgba(255,0,0,1)----->纯红 rgba(255,0,0,0.5)---->红色半透明 |
1 |
|
text-align: 对齐文本
属性值 | 解释 |
---|---|
left | 左对齐(默认值) |
right | 右对齐 |
center | 居中对齐 |
1 |
|
text-decoration: 装饰文本
text-decoration 属性规定添加到文本的修饰。可以给文本添加下划线、删除线、上划线等。
重点记住如何添加下划线 ? 如何删除下划线 ? 其余了解即可
属性值 | 描述 |
---|---|
none | 默认。没有装饰线(最常用) |
underline | 下划线。链接a 自带下划线(常用) |
overline | 上划线(几乎不用) |
line-through | 删除线(不常用) |
1 |
|
text-indent: 文本缩进
text-indent 属性用来指定文本的第一行的缩进,通常是将 段落的首行缩进。
- 取值可以是
px
orem
, 20px = 2em, em 是一个相对单位,就是当前元素(font-size) 1 个文字的大小, 如果当前元素没有设置大小,则会按照父元素的 1 个文字大小。
1 |
|
line-height: 行间距
line-height 属性用于设置行间的距离(行高)。可以控制文字行与行之间的距离.
1 |
|
2.4 背景属性
属性 | 含义 | 备注 |
---|---|---|
background-color | 背景颜色 | 取值:transparent 透明 |
background-image | 背景图片 | 必须使用url()方式指定图片的路径 如果在css样式文件中使用相对路径,此时是相对于css文件,不是相对html文件 |
background-repeat | 背景图片的重复方式 | 取值:repeat(默认),repeat-x,repeat-y,no-repeat |
background-position | 背景图片的显示位置 | 默认背景图显示在左上角,取值: 关键字:top、bottom、left、right、center 坐标:左上角为(0,0)坐标,向右为x正方向,向下为y正方向 |
background-attachment | 背景图片是否跟随滚动 | 取值:scroll(默认)、fixed固定不动 |
background | 简写 | 简写属性:background:background-color|background-image|background-repeat|background-position 以空格隔开,书写顺序没有要求 |
2.5 列表属性
属性 | 含义 | 说明 |
---|---|---|
list-style-type | 设置列表前的标记 | 取值:none、disc、circle、square、decimal 此时不再区分有序列表还是无序列表,只要设置列表前的标记就可以了 |
list-style-image | 将图像作为列表前的标记 | |
list-style-position | 设置标记的位置 | 取值:outside(默认)、inside |
list-style | 简写 | 简写属性:list-style: list-style-type list-style-image list-style-position 书写顺序没有要求 |
2.6 表格属性
border-collapse:表格中相邻的边框是否合并(折叠)为单一边框
取值:separated(默认) collapse
2.7 CSS 引入方式
按照 CSS 样式书写的位置(或者引入的方式),CSS 样式表可以分为三大类:
样式表 | 优点 | 缺点 | 使用情况 | 控制范围 |
---|---|---|---|---|
行内样式表 | 书写方便,权重高 | 结构样式混写 | 较少 | 控制一𠆤标签 |
内部样式表 | 部分结构和样式相分离 | 没有彻底分离 | 较多 | 控制一个页面 |
外部样式表 | 完全实现结构和样式相分离 | 需要弘入 | 最多,吐血推荐 | 控制多个页面 |
行内样式表 (直接写在HTML里)
1 |
|
内部样式表
1 |
|
外部样式表 (需另外创建一个css文件)
1 |
|
1 |
|
2.8 Chrome 调试工具
打开 Chrome 浏览器,按下 F12
键或者右击页面空白处 -> 检查。
- Ctrl+滚轮 可以放大开发者工具代码大小。
- 左边是 HTML 元素结构,右边是 CSS 样式。
- 右边 CSS 样式可以改动数值(左右箭头或者直接输入)和查看颜色。
- Ctrl + 0 复原浏览器大小。
- 如果点击元素,发现右侧没有样式引入,极有可能是类名或者样式引入错误。 6 如果有样式,但是样式前面有黄色叹号提示,则是样式属性书写错误。
03. JavaScript
JavaScript(缩写:JS)是一门完备的动态编程语言。当应用于 HTML 文档时,可为网站提供动态交互特性。由布兰登·艾克(Brendan Eich,Mozilla 项目、Mozilla 基金会和 Mozilla 公司的联合创始人)发明。JavaScript 是一种运行在客户端(浏览器)的编程语言;JavaScript 由两部分组成 :
- ECMAScript:规定了js基础语法核心知识 (变量、分支语句、循环语句、对象等等)。
- web APIs (DOM、BOM)
- DOM:操作文档,比如对页面元素进行移动、大小、添加删除等操作
- BOM:操作浏览器,比如页面弹窗,检测窗口宽度、存储数据到浏览器等等
JavaScript 的应用场合极其广泛,简单到幻灯片、照片库、浮动布局和响应按钮点击,复杂到游戏、2D/3D 动画、大型数据库驱动程序等等。JavaScript 相当简洁,却非常灵活。开发者们基于 JavaScript 核心编写了大量实用工具,可以使 开发工作事半功倍。其中包括:
- 浏览器应用程序接口(API)—— 浏览器内置的 API 提供了丰富的功能,比如:动态创建 HTML 和设置 CSS 样式、从用户的摄像头采集处理视频流、生成 3D 图像与音频样本等等。
- 第三方 API —— 让开发者可以在自己的站点中整合其他内容提供者(Twitter、Facebook 等)提供的功能。
- 第三方框架和库 —— 用来快速构建网站和应用。
以下是 HTML+CSS+JavaScript 的实例:
1 |
|
3.1 引入方式
JavaScript 程序不能独立运行,它需要被嵌入 HTML 中,然后浏览器才能执行 JavaScript 代码。通过 script
标签将 JavaScript 代码引入到 HTML 中,有两种方式:
内部方式 - 标签引用:通过 script
标签包裹 JavaScript 代码
1 |
|
外部形式 - 文件引用:一般将 JavaScript 代码写在独立的以 .js 结尾的文件中,然后通过 script
标签的 src
属性引入。外部 js 标签中间不要写代码,否则会被忽略:
1 |
|
1 |
|
3.2 Input and Output
输出和输入也可理解为人和计算机的交互,用户通过键盘、鼠标等向计算机输入信息,计算机处理后再展示结果给用户,这便是一次输入和输出的过程。
举例说明:如按键盘上的方向键,向上/下键可以滚动页面,按向上/下键这个动作叫作输入,页面发生了滚动了这便叫输出。
Output: JavaScript 可以接收用户的输入,然后再将输入的结果输出:
document.wirte()
:向页面输出一句话alert()
:向弹出窗口输出一句话,以弹窗形式展示(输出)给用户。console.log()
:向控制台输出一句话,给程序员调试使用,用户页面看不到
Input: 向 prompt()
输入任意内容会以弹窗形式出现在浏览器中,一般提示用户输入一些内容。
1 |
|
3.3 Constant & Variable
Constant: 使用 const 声明的变量, 当某个变量永远不会改变的时候, 就可以使用 const 来声明,而不是let
Variable: 计算机存储数据的 “容器”,要声明一个变量,先输入关键字
let
或var
,然后输入合适的名称.
Constant 不允许重新赋值, 声明的时候必须赋值 (初始化)
1 |
|
Variable 命名规则与规范:
- 不能用关键字(有特殊含义的字符,JavaScript 内置的一些英语词汇。例如:let、var、if、for等)
- 只能用 下划线、字母、数字、$组成,且 数字不能开头,字母严格区分大小写,如 Age 和 age 是不同的变量
- 遵守小驼峰命名法,第一个单词首字母小写,后面每个单词首字母大写。例: userName
1 |
|
变量 | 解释 | 示例 |
---|---|---|
String | 字符串(一串文本):字符串的值必须用引号(单双均可,必须成对)括起来。 | let myVariable = '李雷'; |
Number | 数字:无需引号。 | let myVariable = 10; |
Boolean | 布尔值(真 / 假): true /false 是 JS 里的特殊关键字,无需引号。 |
let myVariable = true; |
Array | 数组:用于在单一引用中存储多个值的结构。 | let myVariable = [1, '李雷', '韩梅梅', 10]; 元素引用方法:myVariable[0] , myVariable[1] …… |
Object | 对象:JavaScript 里一切皆对象,一切皆可储存在变量里。这一点要牢记于心。 | let myVariable = document.querySelector('h1'); 以及上面所有示例都是对象。 |
变量是计算机存储数据的 “容器”,可以让计算机变得有记忆,通俗的理解变量就是使用【某个符号】来代表【某个具体的数值】
3.4 基本数据类型 & 类型转换
JavaScript 目前包含八种数据类型,其中可以分成两大类:
基本数据类型 (immutable)
Number (数值,包含NaN),有 3个函数可以把其他类型的值转换为数值 (显式转换),当转换失败时结果为
NaN
(Not a Number)即不是一个数字:- Number():把任何数据类型的值转换为数值
- parseInt():把字符串转换为整数值
- parseFloat():把字符串转换为浮点数值
String (字符串),转换为字符串:
- toString():这是一个方法,数值、布尔值、对象和字符串值都有toString()方法。
- String():这是一个全局函数,适用于所有数据类型
Boolean (布尔值),可以调用 Boolean() 函数来将其他类型转换为布尔值,不同类型转换为布尔值的规则如下表:
数据类型 转换为 true 的值 转换为 false 的值 Boolean true false String 非空字符串 “” (空字符串) Number 非零数值(包括无穷值) 0、NaN Object 任意对象 null Undefined 无 undefined Undefined (未定义/未初始化)
1
2var myName;
console.log(typeof myName); // "undefined"Null (空对象),null表示一个空对象指针,因此使用 typeof 操作符检测 null 值时会返回”object”
1
2let car = null;
console.log( typeof car ); // "object"Symbol (独一无二的值,ES6 新增),Symbol 值通过 Symbol() 函数生成。
1
2let s = Symbol();
console.log(typeof s) // "symbol"BigInt (大整数,能够表示超过 Number 类型大小限制的整数,ES 2020新增)
引用数据类型 (mutable)
Object(对象,Array/数组 和 function/函数 也属于对象的一种)可以通过创建 Object 实例来创建自己的对象
1
2
3
4
5
6
7
8
9
10
11// 方式有两种
// 第一种是使用 new 操作符和 Object 构造函数:
let person = new Object(); // 创建了一个空对象
person.name = "小明"; // 往对象中添加属性
person.age = 20;
// 第二种方式是使用对象字面量表示法,能够简化对包含大量属性的对象的创建,看起来也更加一目了然:
let person = {
name: "小明",
age: 20
};
隐式转换
某些运算符被执行时,系统内部自动将数据类型进行转换,这种转换称为隐式转换。
1 |
|
3.5 模版字符串 & 字符串内置方法
模板字符串:是允许嵌入表达式的字符串(可以使用多行字符串和字符串插值功能)
${name} 和 ${age} 是模板字符串的表达式部分,它们被包含在 ${} 内部,并在运行时求值。
1 |
|
模板字符串当作 HTML 模板使用:
1 |
|
特殊字符
代码 | 输出 |
---|---|
\‘ | 单引号 |
\“ | 双引号 |
\\ | 反斜杠 |
\n | 换行 |
\r | 回车 |
\t | tab(制表符) |
\b | 退格符 |
\f | 换页符 |
1 |
|
字符串属性
属性 | 描述 |
---|---|
constructor | 返回创建字符串属性的函数 |
length | 返回字符串的长度 |
prototype | 允许您向对象添加属性和方法 |
字符串方法
方法 | 描述 |
---|---|
charAt() | 返回指定索引位置的字符 |
charCodeAt() | 返回指定索引位置字符的 Unicode 值 |
concat() | 连接两个或多个字符串,返回连接后的字符串 |
fromCharCode() | 将 Unicode 转换为字符串 |
indexOf() | 返回字符串中检索指定字符第一次出现的位置 |
lastIndexOf() | 返回字符串中检索指定字符最后一次出现的位置 |
localeCompare() | 用本地特定的顺序来比较两个字符串 |
match() | 找到一个或多个正则表达式的匹配 |
replace() | 替换与正则表达式匹配的子串 |
search() | 检索与正则表达式相匹配的值 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
split() | 把字符串分割为子字符串数组 |
substr() | 从起始索引号提取字符串中指定数目的字符 |
substring() | 提取字符串中两个指定的索引号之间的字符 |
toLocaleLowerCase() | 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLocaleUpperCase() | 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射 |
toLowerCase() | 把字符串转换为小写 |
toString() | 返回字符串对象值 |
toUpperCase() | 把字符串转换为大写 |
trim() | 移除字符串首尾空白 |
valueOf() | 返回某个字符串对象的原始值 |
3.6 运算符 (operator)
算术运算符:在计算失败时,显示的结果是 NaN (not a number)
运算符 作用 + 求和 - 求差 * 求积 / 求商 % 取模(取余数),开发中经常用于作为某个数字是否被整除 赋值运算符:对变量进行赋值的运算符,将等号右边的值赋予给左边, 要求左边必须是一个容器
运算符 作用 += 加法赋值 -+ 减法赋值 *= 乘法赋值 /= 除法赋值 %= 取余赋值 自增/自减运算符
符号 作用 说明 ++ 自增 变量自身的值加1,例如: x++ – 自减 变量自身的值减1,例如: x– 比较运算符:比较两个数据大小、是否相等,根据比较结果返回一个布尔值(true / false)
运算符 作用 > 左边是否大于右边 < 左边是否小于右边 >= 左边是否大于或等于右边 <= 左边是否小于或等于右边 === 绝对等于 (左右两边是否 type
和value
都相等)== 左右两边 值
是否相等!= 左右值不相等 !== 左右两边是否不全等 逻辑运算符:可以把多个布尔值放到一起运算,最终返回一个布尔值
符号 名称 日常读法 特点 口诀 && 逻辑与 并且 符号两边有一个假的结果为假 一假则假 || 逻辑或 或者 符号两边有一个真的结果为真 一真则真 ! 逻辑非 取反 true变false false变true 真变假,假变真 A B A && B A || B !A false false false false true false true false true true true false false true false true true true true false
3.7 条件语句
if 分支语句(重点)
1
2
3
4
5
6
7
8
9
10
11<script>
// 1. 用户输入
let uname = prompt('请输入用户名:')
let pwd = prompt('请输入密码:')
// 2. 判断输出
if (uname === 'pink' && pwd === '123456') {
alert('恭喜登录成功')
} else {
alert('用户名或者密码错误')
}
</script>三元运算符
1
2
3
4
5
6
7
8
9
10// 条件 ? 表达式1 : 表达式2
// 如果条件为真,则执行表达式1
// 如果条件为假,则执行表达式2
// 1. 用户输入
let num = prompt('请您输入一个数字:')
// 2. 判断输出- 小于10才补0
// num = num < 10 ? 0 + num : num
num = num >= 10 ? num : 0 + num
alert(num)switch语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<script>
switch (2) {
case 1:
console.log('您选择的是1')
break // 退出switch
case 2:
console.log('您选择的是2')
break // 退出switch
case 3:
console.log('您选择的是3')
break // 退出switch
default:
console.log('没有符合条件的')
}
</script>
3.8 Loop
while 循环
break
中止整个循环,一般用于结果已经得到, 后续的循环不需要的时候可以使用(提高效率)continue
中止本次循环,一般用于排除或者跳过某一个选项的时候- while(true) 来构造 “无限循环”,需要使用
break
退出循环(常用)
1 |
|
for 循环
1 |
|
变化量和死循环,for
循环和 while
一样,如果不合理设置增量和终止条件,便会产生死循环。跳出和终止循环:
1 |
|
循环嵌套
外层循环循环一次,里层循环循环全部
1 |
|
3.9 数组 (Array)
一种可以按顺序保存数据的数据类型,如果有多个数据可以用数组保存起来,然后放到一个变量中,管理非常方便
使用对象创建
1
2
3
4
5
6
7
8
9var arr1 = new Array() // 同类型有序数组创建:
arr[0] = 1
arr[1] = 2
arr[2] = 3
var arr2 = new Array() // 不同类型有序数组创建:
arr[0] = 1
arr[1] = "2"
arr[2] = 3使用字面量创建
1
2var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] // 同类型有序数组创建
var arr2 = [1, "2", 3, "4", 5, "6", 7, "8", 9] // 不同类型有序数组创建length属性 & 遍历数组
1
2
3
4var arr = [1, "2", 3, "4", 5, "6", 7, "8", 9]
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
}操作数组:数组做为对象数据类型,不但有
length
属性可以使用,还提供了许多方法:- push 动态向数组的尾部添加一个单元
- unshit 动态向数组头部添加一个单元
- pop 删除最后一个单元
- shift 删除第一个单元
- splice 动态删除任意单元
使用以上4个方法时,都是直接在原数组上进行操作,即成功调任何一个方法,原数组都跟着发生相应的改变。并且在添加或删除单元时
length
并不会发生错乱。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<script>
// 定义一个数组
let arr = ['html', 'css', 'javascript']
// 1. push 动态向数组的尾部添加一个单元
arr.push('Nodejs')
console.log(arr)
arr.push('Vue')
// 2. unshit 动态向数组头部添加一个单元
arr.unshift('VS Code')
console.log(arr)
// 3. splice 动态删除任意单元
arr.splice(2, 1) // 从索引值为2的位置开始删除1个单元
console.log(arr)
// 4. pop 删除最后一个单元
arr.pop()
console.log(arr)
// 5. shift 删除第一个单元
arr.shift()
console.log(arr)
</script>
3.10 函数 (function)
- 声明(定义)函数时的形参没有数量限制,当有多个形参时使用
,
分隔 - 调用函数传递的实参要与形参的顺序一致
1 |
|
形参和实参
形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)实参可以理解为是给这个变量赋值
开发中尽量保持形参和实参个数一致
1 |
|
返回值
函数的本质是封装(包裹),函数体内的逻辑执行完毕后,函数外部如何获得函数内部的执行结果呢?要想获得函数内部逻辑的执行结果,需要通过 return
这个关键字,将内部执行结果传递到函数外部,这个被传递到外部的结果就是返回值。
1 |
|
总结:
- 在函数体中使用return 关键字能将内部的执行结果交给函数外部使用
- 函数内部只能出现1 次 return,并且 return 下一行代码不会再被执行,所以return 后面的数据不要换行写
- return会立即结束当前函数
- 函数可以没有return,这种情况默认返回值为 undefined
作用域
通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
- 全局作用域:作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件。处于全局作用域内的变量,称为全局变量。
- 局部作用域:作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。处于局部作用域内的变量称为局部变量
如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
但是有一种情况,函数内部的形参可以看做是局部变量。
匿名函数
函数可以分为具名函数和匿名函数
匿名函数:没有名字的函数,无法直接使用。
1 |
|
立即执行函数:
1 |
|
无需调用,立即执行,其实本质已经调用了
多个立即执行函数之间用分号隔开
3.11 对象
对象是 JavaScript 数据类型的一种,之前已经学习了数值类型、字符串类型、布尔类型、undefined。对象数据类型可以被理解成是一种数据集合。它由属性和方法两部分构成。
属性和访问
- 属性都是成 对出现的,包括属性名和值,它们之间使用英文
:
分隔 - 多个属性之间使用英文
,
分隔 - 属性就是依附在对象上的变量
- 属性名可以使用
""
或''
,一般情况下省略,除非名称遇到特殊符号如空格、中横线等
1 |
|
方法和调用
数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。
- 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
- 多个属性之间使用英文
,
分隔 - 方法是依附在对象中的函数
- 方法名可以使用
""
或''
,一般情况下省略,除非名称遇到特殊符号如空格、中横线等
声明对象,并添加了若干方法后,可以使用 .
或 []
调用对象中函数,我称之为方法调用。
1 |
|
注:无论是属性或是方法,同一个对象中出现名称一样的,后面的会覆盖前面的。
null
null 也是 JavaScript 中数据类型的一种,通常只用它来表示不存在的对象。使用 typeof 检测类型它的类型时,结果为 object
。
遍历对象:
1 |
|
for in 不提倡遍历数组 因为 k 是 字符串
3.10 JSON
JSON (JavaScript Object Notation): 一种轻量级的数据交换格式,是独立的语言,用于存储和传输数据的格式,通常用于服务端向网页传递数据 。JSON 格式在语法上与创建 JavaScript 对象代码是相同的。
JSON 是 JS 对象的字符串表示法。它使用文本表示一个 JS 对象的信息,(JSON)本质是一个字符串。
1 |
|
JSON(格式字符串) 和 JS 对象(也可以叫JSON对象 或 JSON 格式的对象)互转(JSON.parse 和 JSON.stringify)。
要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:
1 |
|
要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:
1 |
|
说句不严谨的话:JSON.parse() 就是字符串转 js 对象, JSON.stringify()就是 js 对象转字符串,它们前提是要 json 格式才有意义。
JSON语法支持表示3种类型的值:
简单值:字符串、数值、布尔值和null可以在JSON种出现,特殊值undefined不可以;例如,下面这个数值是有效的 JSON:
1
2"Hello World!" // JS 字符串与 JSON 字符串的主要区别: JSON 字符串必须使用双引号 (单引号会导致语法错误)
"name":"Runoob" // 数据为 键/值 对:键/值对包括字段名称(在双引号中),后面一个冒号,然后是值对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型;数据由逗号分隔:JSON 对象保存在大括号内:
1
{"name":"Runoob", "url":"www.runoob.com"}
数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。数组的值可以是任意类型,包括简单值、对象,甚至其他数组。方括号保存数组
1
2
3
4
5"sites":[
{"name":"Runoob", "url":"www.runoob.com"},
{"name":"Google", "url":"www.google.com"},
{"name":"Taobao", "url":"www.taobao.com"}
]
对象
对象使用与 JavaScript 对象字面量略为不同的方式表示。以下是 JavaScript 中的对象字面量:
1 |
|
虽然这对 JavaScript 开发者来说是标准的对象字面量,但 JSON 中的对象必须使用双引号把属性名包围起来,下面的代码与前面的代码是一样的:
1 |
|
而用 JSON 表示相同的对象的语法是:
1 |
|
与 JavaScript 对象字面量相比,JSON 主要有两处不同:
- 没有变量声明(JSON 中没有变量);
- 最后没有分号(不需要,因为不是 JavaScript 语句)。
属性的值可以是简单值或复杂数据类型值,后者可以在对象中再嵌入对象:
1 |
|
数组
JSON 的第二种复杂数据类型是数组。数组在 JSON 中使用 JavaScript 的数组字面量形式表示。例如,以下是一个 JavaScript 数组:
1 |
|
在 JSON 中可以使用类似语法表示相同的数组:
1 |
|
同样,这里没有变量,也没有分号。数组和对象可以组合使用,以表示更加复杂的数据结构,比如:
1 |
|
解析与序列化
JSON 的迅速流行并不仅仅因为其语法与 JavaScript 类似,很大程度上还因为 JSON 可以直接被解析成可用的 JavaScript 对象。
1. JSON对象
JSON对象有两个方法:
- stringify():将js序列化为JSON字符串;
- parse():将JSON解析为js值。
JSON.stringify() 把一个 JavaScript 对象序列化为一个 JSON 字符串:
1 |
|
默认情况下,JSON.stringify()会输出不包含空格或缩进的 JSON 字符串,jsonText 的值是这样的:
1 |
|
注意:在序列化 JavaScript 对象时,所有函数和原型成员都会有意地在结果中省略。此外,值为 undefined的任何属性也会被跳过。最终得到的就是所有实例属性均为有效 JSON 数据类型的表示。
JSON 字符串可以直接传给 JSON.parse(),然后得到相应的 JavaScript 值:
1 |
|
注意:book 和 bookCopy 是两个完全不同的对象,没有任何关系。但是它们拥有相同的属性和值。如果给 JSON.parse()传入的 JSON 字符串无效,则会导致抛出错误。
2. 序列化选项
JSON.stringify()方法除了要序列化的对象,还可以接收两个参数。这两个参数可以用于指定其他序列化 JavaScript 对象的方式:
- 第一个参数是过滤器,可以是数组或函数;
- 第二个参数是用于缩进结果 JSON 字符串的选项。
过滤结果
如果第二个参数是一个数组,那么JSON.stringify()返回的结果只会包含该数组中列出的对象属性:
1
2
3
4
5
6
7
8
9
10
11
12
13const book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"Matt Frisbie"
],
edition: 4,
year: 2017
};
let jsonText = JSON.stringify(book, ["title", "edition"]);
// jsonText: {"title":"Professional JavaScript","edition":4}如果第二个参数是一个函数,则行为又有不同。提供的函数接收两个参数:属性名(key)和属性
值(value)。可以根据这个 key 决定要对相应属性执行什么操作。这个 key 始终是字符串,只是在值不属于某个键/值对时会是空字符串(注意,返回 undefined 会导致属性被忽略。):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25const book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"Matt Frisbie"
],
edition: 4,
year: 2017
};
let jsonText = JSON.stringify(book, (key, value) => {
switch (key) {
case "authors":
return value.join(",");
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
// 结果如下
{"title":"Professional JavaScript","authors":"Nicholas C. Zakas,Matt Frisbie","year":5000}
字符串缩进
JSON.stringify()方法的第三个参数控制缩进和空格。在这个参数是数值时,表示每一级缩进的空格数。
例如,每级缩进 4 个空格,可以这样:
1 |
|
3. 解析选项
JSON.parse()方法也可以接收一个额外的参数,是一个函数,该函数也接收两个参数,属性名(key)和属性值(value),另外也
需要返回值。
如果此函数返回 undefined,则结果中就会删除相应的键。如果返回了其他任何值,则该值就会成为相应键的值插入到结果中。该函数经常被用于把日期字符串转换为 Date 对象。例如:
1 |
|