水韵东平 發表於 2021-4-28 00:23:00

前端开发基础 HTML+CSS+JS

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>HTML介绍</li><li>CSS介绍</li><li>JavaScript介绍</li><li>HTML、CSS和JavaScript之间的关系</li><li>HTML使用<ul><li>基本结构</li><li>常用标签</li></ul></li><li>CSS使用<ul><li>使用方法</li><li>常用属性</li><li>盒子模型</li><li>选择器</li><li>默认样式</li><li>定位</li></ul></li><li>Javascript使用<ul><li>使用方法</li><li>数据类型、运算符及常量变量</li><li>判断、循环、Map、Set及iterable</li><li>函数&amp;&amp;作用域</li><li>标准对象及面向对象编程</li><li>BOM及DOM及表单操作</li><li>jQuery</li><li>Node.js</li></ul></li></ul></div><p></p>
<h3 id="html介绍">HTML介绍</h3>
<p>HTML(Hyper Text Markup Language)是超文本标记语言,并不是编程语言,它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的网络资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令用来说明文字、图像、视频、表格、链接等,目前广泛使用的是<strong>HTML5</strong></p>
<h3 id="css介绍">CSS介绍</h3>
<p>CSS(Cascading Style Sheets)是层叠样式表,用来表现HTML文件样式的标准语言。CSS用于定义网页的样式,包括针对不同设备和屏幕尺寸的设计和布局,描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问题,通常保存在外部.css文件中,目前广泛使用的是<strong>CSS3</strong></p>
<p>CSS优先级:<br>
行内样式优先级最高,内部样式和外部样式为就近原则<br>
行内样式(写在html的标签里,即style属性)、内部样式(写在HTML的<code>head</code>标签内)、外部样式(独立的CSS文件)</p>
<h3 id="javascript介绍">JavaScript介绍</h3>
<p>JavaScript(简称“JS”)是一种解释性脚本语言,JS主要用来向HTML页面添加交互行为,通常通过嵌入HTML中来实现自身功能,但写成独立的JS文件更有利于结构和行为的分离</p>
<p>完整的 JavaScript包括以下三部分:<br>
ECMAScript,描述了该语言的语法和基本对象,JavaScript的语法标准,比如ES5、ES6、ES7等<br>
文档对象模型(DOM),描述处理网页内容的方法和接口,比如HTML各类标签<br>
浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口,比如浏览器前进、后退、刷新、关闭等</p>
<h3 id="htmlcss和javascript之间的关系">HTML、CSS和JavaScript之间的关系</h3>
<p>HTML、CSS和JavaScript三者被称为前端三要素,在一个基本的网站中包含许多网页,每个网页都是由HTML、CSS和JavaScript组成,三者相辅相成。HTML是结构层,从语义的角度去搭建网页结构;CSS是样式层,从美观的角度去修饰页面样式,JavaScript是行为层,从交互的角度去描述页面行为。举个栗子:HTML就像是一扇粗加工之后的门,CSS的作用是给门上油漆图案,JavaScript的作用是给门上锁和门把手</p>
<h3 id="html使用">HTML使用</h3>
<h4 id="基本结构">基本结构</h4>
<pre><code class="language-html">&lt;!--!DOCTYPE是文档声明,告诉浏览器要使用的规范--&gt;
&lt;!DOCTYPE html&gt;

&lt;!--html标签是告诉浏览器整个网页是从&lt;html&gt;这里开始的,到&lt;/html&gt;结束--&gt;
&lt;html lang="en"&gt;
   
&lt;!--head标签对表示网页头部信息--&gt;
&lt;head&gt;
&lt;!--meta描述性标签,用来简要描述网站的一些信息,通常用来做SEO,即搜索引擎优化--&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="keyword" content="小白典的博客"&gt;
    &lt;meta about="summary" content="这里是小白典的博客,欢迎您的到访!"&gt;

&lt;!--title标签表示网页标题信息--&gt;
    &lt;title&gt;小白典&lt;/title&gt;
&lt;/head&gt;
   
&lt;!--body标签对表示网页主体,网页内容都写在body内--&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h4 id="常用标签">常用标签</h4>
<p><strong>基本标签</strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;小白典&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
您好!
&lt;!--h1~h6标签表示HTML六个级别的标题--&gt;
&lt;h1&gt;一级标题&lt;/h1&gt;
&lt;h2&gt;二级标题&lt;/h2&gt;
&lt;h3&gt;三级标题&lt;/h3&gt;
&lt;h4&gt;四级标题&lt;/h4&gt;
&lt;h5&gt;五级标题&lt;/h5&gt;
&lt;h6&gt;六级标题&lt;/h6&gt;
&lt;!--div标签是块级元素,通常和CSS一起使用来布局网页--&gt;
&lt;div&gt;
    &lt;!--p标签表示段落--&gt;
    &lt;p&gt;对于某些事我们不在流泪了,是我们无情了还是坚强了?&lt;/p&gt;
    &lt;!--span通常与行内元素组合使用并添加样式,若没有样式,则视觉上与其他文本不会有任何差异--&gt;
    &lt;p&gt;在有能力,有时间在一起的时候,一定要好好珍惜,&lt;span style="color:blue"&gt;爱情&lt;/span&gt;也好,友情也罢!&lt;/p&gt;
&lt;/div&gt;
&lt;!--hr是水平线,是单标签,没有结束标签--&gt;
&lt;hr&gt;

&lt;!--br是换行符,也是单标签,没有结束标签--&gt;
微笑是改善容貌的简单方式。&lt;br&gt;

&lt;!--em标签表示字体为斜体--&gt;
&lt;em&gt;宁愿一个人呆着,也不愿跟不合拍的人呆一块!&lt;/em&gt;
&lt;br&gt;

&lt;!--strong标签表示字体加粗--&gt;
&lt;strong&gt; 念往昔,繁华竞逐!&lt;/strong&gt;
&lt;hr&gt;

&lt;!--&amp;nbsp表示空格,一个&amp;nbsp表示一个空格--&gt;
空&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;格
&lt;br&gt;
&amp;gt; 这是大于号 &amp;lt; 这是小于号 &amp;equals; 这是等号 &amp;copy; 版权符号 &amp;sdot; 这是实心点
&lt;hr&gt;
   
&lt;!--img标签,src是图片地址,分为相对路径和绝对路径,更推荐使用相对路径--&gt;
&lt;img src="../resource/image/8.jpg" alt="若图片获取失败则显示此信息" title="光标落在图片上则显示此信息" width="500" height="500"&gt;

&lt;!--视频标签--&gt;
&lt;video src="../resource/video/油菜花.mp4" controls autoplay height="200" width="300"&gt;&lt;/video&gt;
&lt;!--音频标签--&gt;
&lt;audio src="../resource/audio/I_lomo_you.mp3" controls &gt;&lt;/audio&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p><strong>超链接标签</strong></p>
<pre><code class="language-html">&lt;!--a标签是超链接,href指路径,target指链接打开位置,默认是当前页面,_blank表示在新窗口打开链接--&gt;
&lt;a href="https://www.cnblogs.com/dyd168/" target="_blank"&gt;百度&lt;/a&gt;&lt;br&gt;
&lt;a href="html0.html"&gt;点击跳转到html0网页&lt;/a&gt;&lt;br&gt;

&lt;!--图像链接--&gt;
&lt;a href="html0.html"&gt;
    &lt;img src="../resource/image/6.jpg" alt="图片获取失败" title="一个人说话" width="100" height="100"&gt;
&lt;/a&gt;&lt;br&gt;

&lt;!--锚链接,实现当前页面跳转,也可以实现页面间的跳转;1。先设置一个锚标记 2.点击链接跳转到标记处,页面超出屏幕才能显示出效果--&gt;
&lt;!--当前页面跳转,使用name做为标记--&gt;
&lt;a name="top"&gt;页面顶部&lt;/a&gt;
中间内容要足够多,出现滚动效果才能显示效果
&lt;a href="#top"&gt;回到顶部&lt;/a&gt;
&lt;!--页面间跳转--&gt;
&lt;!--在html0页面使用name做标记--&gt;
&lt;a name="bottom"&gt;页面底部&lt;/a&gt;
&lt;!--在其它页面设置跳转到html0页面标记的链接--&gt;
&lt;a href="HTML/html0.html#bottom"&gt;跳转到html0页面底部&lt;/a&gt;

&lt;!--功能性链接--&gt;
&lt;!--邮箱链接,点击会调出邮箱客户端--&gt;
&lt;a href="mailto:785288076@qq.com"&gt;发邮件给我&lt;/a&gt;
&lt;!--QQ推广的链接,有些网页右侧的QQ联系就是这种方式写的--&gt;
&lt;a target="_blank" href="http://wpa.qq.com/msgrd?v=3&amp;uin=788888888&amp;site=qq&amp;menu=yes"&gt;
    &lt;img border="0" src="http://wpa.qq.com/pa?p=2:788888888:53" alt="点击此处QQ联系我" title="点击此处QQ联系我"/&gt;&lt;/a&gt;
</code></pre>
<p><strong>内联框架</strong></p>
<pre><code class="language-html">&lt;!--iframe内联框架,是在当前网页打开另一个网页--&gt;
&lt;iframe src="https://www.baidu.com/" frameborder="0" name="baidu" width="800" height="500"&gt;&lt;/iframe&gt;
&lt;!--使用内联框架打开我的博客,target使用内联框架的name,也就是自定义了链接打开位置--&gt;
&lt;a href="https://blog.csdn.net/Q0717168" target="baidu"&gt;点击跳转&lt;/a&gt;
</code></pre>
<p><strong>列表标签</strong></p>
<pre><code class="language-html">&lt;!--有序列表--&gt;
&lt;ol&gt;
    &lt;li&gt;Java&lt;/li&gt;
    &lt;li&gt;Python&lt;/li&gt;
    &lt;li&gt;C&lt;/li&gt;
&lt;/ol&gt;
&lt;!--无序列表--&gt;
&lt;ul&gt;
    &lt;li&gt;Java&lt;/li&gt;
    &lt;li&gt;Python&lt;/li&gt;
    &lt;li&gt;C&lt;/li&gt;
&lt;/ul&gt;
&lt;!--自定义列表--&gt;
&lt;dl&gt;
    &lt;dt&gt;编程语言&lt;/dt&gt;
    &lt;dd&gt;Java&lt;/dd&gt;
    &lt;dd&gt;Python&lt;/dd&gt;
    &lt;dd&gt;C++&lt;/dd&gt;
&lt;/dl&gt;
</code></pre>
<p><strong>表格标签</strong></p>
<pre><code class="language-html">&lt;!--table表格标签,tr表示行,td表示列--&gt;
&lt;table border="3"&gt;
    &lt;tr&gt;
&lt;!--      colspan表示跨列,align表示对齐方式,左中右lift、center、right--&gt;
      &lt;td colspan="3" align="center"&gt;语言&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
&lt;!--      rowspan表示跨行--&gt;
      &lt;td rowspan="2"&gt;测试&lt;/td&gt;
      &lt;td&gt;Java&lt;/td&gt;
      &lt;td&gt;Python&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Go&lt;/td&gt;
      &lt;td&gt;Php&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
</code></pre>
<p><strong>表单</strong></p>
<pre><code class="language-html">&lt;!--表单--&gt;
&lt;!--action表单提交位置,可以是网站也可以是请求处理地址,method是提交方式--&gt;
&lt;form action="https://blog.csdn.net/Q0717168" method="post"&gt;
&lt;!--    文本输入框,value是添加默认值,readonly表示只读,hidden表示隐藏,disabled表示禁用--&gt;
    &lt;p&gt;登录账号:&lt;input type="text" name="username" value="guest" readonly&gt;&lt;/p&gt;
&lt;!--    密码输入框,placeholder是提示性信息--&gt;
    &lt;p&gt;登录密码:&lt;input type="password" name="passwd" placeholder="请输入密码"&gt;&lt;/p&gt;
    &lt;p&gt;性别:
&lt;!--      radio是单选类型,name一样表示为相同组的,checked表示默认选择项--&gt;
      &lt;input type="radio" name="Sex" value="boy" checked&gt;男
      &lt;input type="radio" name="Sex" value="girl"&gt;女
    &lt;/p&gt;
    &lt;p&gt;爱好:
&lt;!--      checkbox是多选类型--&gt;
      &lt;input type="checkbox" name="hobby" value="swim"&gt;游泳
      &lt;input type="checkbox" name="hobby" value="travel" checked&gt;旅行
      &lt;input type="checkbox" name="hobby" value="run"&gt;跑步
    &lt;/p&gt;
    &lt;p&gt;
&lt;!--      select是下拉框,selected表示默认选项--&gt;
      &lt;select name="cars"&gt;
            &lt;option value="LX"&gt;理想&lt;/option&gt;
            &lt;option value="XP"&gt;小鹏&lt;/option&gt;
            &lt;option value="WL" selected&gt;蔚来&lt;/option&gt;
            &lt;option value="XM"&gt;小米&lt;/option&gt;
      &lt;/select&gt;
    &lt;/p&gt;
    &lt;p&gt;
&lt;!--      textarea是文本域,required是非空判断,还有pattern是使用正在表达式判断,可以在所有文本框中使用--&gt;
      &lt;textarea name="textarea" cols="30" rows="10" placeholder="请输入内容" required&gt;&lt;/textarea&gt;
    &lt;/p&gt;
    &lt;p&gt;
&lt;!--      file是文件域--&gt;
      &lt;input type="file" name="file"&gt;
      &lt;input type="button" name="upload" value="上传"&gt;
    &lt;/p&gt;
    &lt;p&gt;
&lt;!--    button是普通按钮,submit是提交按钮,reset是重置按钮--&gt;
      &lt;input type="button" name="btn" value="登录"&gt;
      &lt;input type="submit" &gt;
      &lt;input type="" value="clean"&gt;
    &lt;/p&gt;
&lt;!--    type还有很多,除了以上列出的,还有search、url、email、date、range等请自行练习--&gt;
&lt;/form&gt;
</code></pre>
<h3 id="css使用">CSS使用</h3>
<h4 id="使用方法">使用方法</h4>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Title&lt;/title&gt;
&lt;!--内部样式--&gt;
&lt;style&gt;
    h1{
      color: blue;
    }
&lt;/style&gt;
&lt;!--外部样式,或称为外链式,推荐--&gt;
&lt;link rel="stylesheet" href="../CSS/style.css"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!--行内样式,也叫做内嵌式,不利于代码维护,不推荐--&gt;
&lt;h1 style="color: brown;font-size: 20px"&gt;这是使用了css的标题&lt;/h1&gt;
&lt;!--三种方式优先级是就近原则--&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h4 id="常用属性">常用属性</h4>
<p>本次CSS导入采用外部样式,已在HTML文件head中添加外部CSS文件,<code>&lt;link rel="stylesheet" href="../CSS/style.css"&gt;</code></p>
<pre><code class="language-CSS">#style p,a{
/*    字体颜色*/
    color: white;
/*    字体大小,常用单位有像素px,百分比%,em,也可以选择其它单位*/
    font-size: 20px;
/*    字体样式,默认正常(normal),如:文字斜体(italic)*/
    font-style: italic;
/*    为文本设置字体样式,多个样式是防止文本不支持时选择备用字体样式*/
    font-family: Arial,Consolas,'楷体','微软雅黑',serif;
/*    字体粗细,默认正常(normal),加粗bold,也可以使用数值表示加粗层度100~700,还有斜体之类的样式*/
    font-weight: bold;
/*    设置文字水平方向,有居中设置肯定也有靠左靠右left、right*/
    text-align: center;
/*    行高,让文字上下居中*/
    line-height: 25px;
/*    font属性综合写法:包含五个单一属性,字号和行高用斜杠分开,且字号行高及样式必须位于最后按序书写*/
    font: italic bold 20px/25px "宋体";
/*    文本修饰,通常用于去除a标签默认的下划线,可以添加上中下划线,overline、line-through、underline*/
    text-decoration: none;
/*    盒子长宽、颜色、线型及边框大小设置,常用单位是像素px,百分比%,em,也可以选择其它单位*/
    width: 300px;
    height: 50px;
/*    若希望盒子高度随内容多少而变化则,可以设置为auto*/
    height: auto;
    border-color: blue;
    border-style: solid;
    border-width: 5px;
/*          border属性综合写法:盒子边框是5px宽的蓝色实线*/
    border: 5px blue solid;
/*          设置盒子圆角大小,50%时盒子为圆形,属性值可以时百分比或者数值*/
    border-radius:10px;
/*          文本内容超出高度时默认可见(visible),隐藏(hidden),是否超出都显示滚动条(scroll),文本超出后显示滚动条(auto)*/   
    overflow: hidden;
/*    鼠标移上之后指针状态,pointer表示一只手*/
        cursor:pointer;
/*    背景色*/
    background-color: red;
/*    背景图,背景色和背景图同时设置时都会显示,只是图片会盖住背景色*/
    background-image: url("../resource/image/16.jpg");
/*    是否重复使用背景图进行渲染,默认重复,no-repeat表示不重复,repeat-x横向平铺,repeat-y纵向平铺*/
    background-repeat: no-repeat;
/*    背景定位,左中右(left/center/right),上中下(top/center/bottom),通常两个组合使用,也可以使用像素法或百分比表示法*/
    background-position: center top;
/*    设置背景图是否虽页面滚动,默认滚动(scroll),fixed表示将图片固定到浏览器左上顶点,不随页面滚动而滚动*/
    background-attachment: fixed;
/*    background属性综合写法:包含1~5个属性值,空格隔开,不指定顺序*/
    background: url("../resource/image/18.jpg") no-repeat left top fixed orange;
}
#float{
/*    浮动属性是用于网页并排布局的,它可以脱离标准文档流,不受元素等级限制,既可以并排显示,又可以设置宽高,属性值left、right*/
    float: right;
}
.display{
/*    显示模式,对应元素的三种类型,块元素(block)、行内元素(inline)、行内块元素(inline-block)*/
    display: block;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;div id="style"&gt;
    &lt;p&gt;我只是个普通人!&lt;br&gt; I'm just a ordinary people. &lt;/p&gt;
    &lt;a href="../resource/audio/I_lomo_you.mp3"&gt;一念清净,烈焰成池!&lt;/a&gt;
&lt;/div&gt;
&lt;div id="float"&gt;
    &lt;p&gt;世事茫茫难自料,春愁黯黯独成眠!&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;p class="display"&gt;无风杨柳漫天絮,不雨&lt;span style="color: aqua"&gt;棠梨&lt;/span&gt;满地花!&lt;/p&gt;
&lt;/div&gt;
&lt;span class="display"&gt;松月生夜凉,风泉满清听!&lt;/span&gt;
</code></pre>
<h4 id="盒子模型">盒子模型</h4>
<p>盒子模型是CSS的重要布局属性,是核心基础知识,理解了其概念才能更好的进行网页排版与布局,盒子模型包含五个属性,宽度(width)、高度(height)、内边距(padding)、边框(border)、外边距(margin)</p>
<pre><code class="language-css">/*在浏览器中通过通过F12查看盒子模型图*/
div {
    /*若盒子不设置宽度则默认撑满父盒子的宽度*/
    width: 200px;
    /*若盒子不设置高度则高度会跟随内容多少变更*/
    height: 100px;
    /*内边距指宽高到边框的间距,不能加载内容,但可以设置背景*/
    padding: 20px;
    /*border属性值有三个,上文已讲到,此处为综合写法*/
    border: 5px dashed #ce1212;
    margin: 30px;
}
.test0{
    width: 100px;
    /*内边距(padding)是一个综合属性,可以根据四个方向设置单一属性*/
    padding-top: 10px;
    padding-bottom: 20px;
    padding-left: 30px;
    padding-right: 40px;
    background-color: hotpink;
}
.test1{
    width: 50px;
    height: 100px;
    /*内边距(padding)使用综合属性写法,四个方向都设置时分别是上、右、下、左*/
    padding: 50px 60px 70px 80px;
}
.test2{
    width: 100px;
    height: 120px;
    /*内边距(padding)三值表示时分别是上、左右、下*/
    padding: 10px 5px 15px;
}
.test3{
    width: 100px;
    height: 120px;
    /*内边距(padding)二值表示时分别是上下、左右*/
    padding: 16px 18px;
}
#test{
    width: 80px;
    height: 100px;
    background-color: cyan;
    /*四条边的颜色,同padding一样有四值表示法*/
    border-color: red blue pink orange;
    /*四条边的边框宽度,同padding一样有四值表示法*/
    border-width: 10px 20px 30px 40px;
    /*边框样式,dashed指虚线,solid指实线,double指双线,dotted指点线,同padding一样有四值表示法*/
    border-style: dashed solid double dotted;
}
#test0{
    width: 200px;
    border: 5px dotted #ffe268;
    /*外边距(margin),同padding一样有四值表示法*/
    margin: 30px 40px;
}
</code></pre>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrELjYKIvSQVYnlN8wzLXNwaCr.KXV4HpsLgKAa2R1iyfAARKP0OtL1kLOqA7VhmH4lPVArar*U.RUr6WCg9Y3rTo!/r">
<p>外边距(margin)和内边距(padding)使用法师相同</p>
<h4 id="选择器">选择器</h4>
<p>选择器是CSS中的重点,选择器可以让网页代码更简洁,结构更清晰,能够避免起名重名的烦恼,选择器就是很明确地告诉浏览器要去渲染HTML节点中哪个位置的样式,可以理解为门牌号</p>
<p><strong>基本选择器</strong></p>
<p>三者优先级:id选择器 &gt; 类选择器 &gt; 标签选择器,多种选择器同时使用,形成复杂的选择器时,优先级会出现变化,对于复杂选择器,首先确认是否同时选择同一元素,若为同一元素则需要数权重,若层级不同则采取就近原则,若权重层级都相同则后书写的优先</p>
<p><strong>1. 标签选择器</strong></p>
<pre><code class="language-css">/*标签选择器会选择页面上所有的标签元素*/
h2{
    color: blueviolet;
    background: darkgrey;
    font-size: 20px;
}
p{
    color: blue;
    font-family: 华文行楷;
}
h3,em{
    color: rgb(255,0,0);
    height: 10px;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;h2&gt;这是经过修饰的二级标题&lt;/h2&gt;
&lt;p&gt;这是蓝色行楷字体&lt;/p&gt;
&lt;h3&gt;这是经过修饰的三级标题&lt;/h3&gt;
&lt;em&gt;这是经过修饰的斜体字&lt;/em&gt;
</code></pre>
<p><strong>2. 类选择器</strong></p>
<pre><code class="language-css">/*类选择器,可以多个标签归类*/
.test{
    color: #ff8882;
    font-style: normal;
}
.label,.title{
    color: #ce1212;
    font-size: small;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;p class="label"&gt;醉后不知天在水,满船清梦压星河!&lt;/p&gt;
&lt;p class="label"&gt;雪后燕瑶池,人间第一枝!&lt;/p&gt;
&lt;p class="test"&gt;半壕春水一城花,烟雨暗千家!&lt;/p&gt;
&lt;h3 class="title"&gt;若有清怀淡如水,便无浊念似墨浓!&lt;/h3&gt;
</code></pre>
<p><strong>3. id选择器</strong></p>
<pre><code class="language-css">/*id选择器,id不可重复,必须保证全局唯一*/
#name{
    color: #ffe268;
    font-weight: normal;
}
#title{
    font-family: 楷体;
    color: cyan;
}
#nickname{
    font-size: 2em;
    color: darkgoldenrod;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;p id="name"&gt;应是天仙狂醉,乱把白云揉碎!&lt;/p&gt;
&lt;p id="title"&gt;独出前门望野田,月明荞麦花如雪!&lt;/p&gt;
&lt;h4 id="nickname"&gt;清晓长歌何处去,武陵溪上看桃花!&lt;/h4&gt;
</code></pre>
<p><strong>层级选择器</strong></p>
<pre><code class="language-css">/*后代选择器(空格),所选body元素内的所有p元素都会变化*/
body p{
    color: #ce1212;
    font-size: 0.2in;
}
/*子选择器(&gt;),所选属于body元素的子元素中所有p元素都会变化*/
body&gt;p{
    background: blue;
    font-family: 华文行楷;
}
/*相邻兄弟选择器(+),仅指紧随其后的元素,*/
.section+p{
    color: fuchsia;
    background: darkgrey;
}
#summary+strong{
    font-size: larger;
    color: cyan;
    background: brown;
}
/*通用兄弟选择器(~),匹配指定元素紧随其后的所有同级元素*/
.section~p{
    color: darkorange;
    background: greenyellow;
    font-size: 10px;
}
#summary~p{
    color: #ff8882;
    background: #ffe268;
    font-family: 新宋体;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;p&gt;大鹏一日同风起,扶摇直上九万里!&lt;/p&gt;
&lt;p class="section"&gt;一身转战三千里,一剑曾当百万师!&lt;/p&gt;
&lt;p id="summary"&gt;寂寞空庭春欲晚,梨花满地不开门!&lt;/p&gt;
&lt;strong&gt;日暮北风吹雨去,数峰清瘦出云来!&lt;/strong&gt;
&lt;p&gt;满目山河空念远,不如怜取眼前人!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
    &lt;p&gt;唯有南风旧相识,偷开门户又翻书!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</code></pre>
<p><strong>伪类选择器</strong></p>
<pre><code class="language-css">/*选择ul的第一个子元素*/
ul li:first-child{
    color: #ce1212;
    font-size: 20px;
}
/*选择ul最后一个子元素*/
ul li:last-child{
    background: cyan;
}
/*选择所有p元素的父元素,根据顺序选择第二个p元素*/
p:nth-child(2){
    color: darkblue;
    font-size: 15px;
}
/*选择所有p元素中的第一个p元素*/
p:nth-of-type(1){
    color: hotpink;
    background: gainsboro;
    font-family: 新宋体;
}
/*光标落在文字上后字体颜色变化*/
p:hover{
    color: black;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;p class="name"&gt;别后相思空一水,重来回首已三生!&lt;/p&gt;
&lt;p id="title"&gt;连雨不知春去,一晴方觉夏深!&lt;/p&gt;
&lt;strong&gt;人间万事消磨尽,只有清香似旧识!&lt;/strong&gt;
&lt;p&gt;离恨恰如春草,更行更远还生!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;平芜尽处是春山,行人更在春山外!&lt;/li&gt;
&lt;li&gt;我来问道无余说,云在青天水在瓶!&lt;/li&gt;
&lt;li&gt;似此星辰非昨夜,为谁风露立中宵!&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p><strong>属性选择器</strong></p>
<pre><code class="language-css">/*使用class选择器,设置class="test"下所有a标签的样式*/
.test a{
    color: white;
    display: black;
    float: left;
    width: 100px;
    height: 100px;
    border-radius: 20px;
    text-decoration: none;
    text-align: center;
    font: bold 50px/100px '楷体';
    margin-left: 20px;
    background-image: url("../resource/image/15.jpg");
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
}
/*选择存在id属性的元素*/
a{
    background: cyan;
}
/*选择id="article"的元素*/
a{
    background: fuchsia;
}
/*选择class="name"的元素*/
a{
    background: yellow;
    color: black;
}
/*选择class中含有title的元素*/
a{
    background: blue;
}
/*选择href中以http开头的元素*/
a{
    background: darkorchid;
}
/*选择href中以html结尾的元素*/
a{
    background: hotpink;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;p class="test"&gt;
&lt;a href="https://blog.csdn.net/Q0717168" class="name nickname title" id="article"&gt;壹&lt;/a&gt;
&lt;a href="https://www.cnblogs.com/dyd168" class="name nickname title" id="content" target="_blank"&gt;贰&lt;/a&gt;
&lt;a href="../resource/image/6.jpg" class="name nickname"&gt;叁&lt;/a&gt;
&lt;a href="../resource/image/8.jpg" class="name nickname"&gt;肆&lt;/a&gt;
&lt;a href="index.html" class="name title"&gt;伍&lt;/a&gt;
&lt;a href="index2.html" class="name title"&gt;陆&lt;/a&gt;
&lt;a href="../resource/video/油菜花.mp4" class="nickname title"&gt;柒&lt;/a&gt;
&lt;a href="../resource/audio/I_lomo_you.mp3" class="nickname title"&gt;捌&lt;/a&gt;
&lt;a href="../CSS/style.css" class="title"&gt;玖&lt;/a&gt;
&lt;a href="../CSS/style1.css" class="name" id="describe"&gt;拾&lt;/a&gt;
&lt;/p&gt;
</code></pre>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrEMw64mx2AMmVzNHeFroHRfql3N33nZGp*EO8ddaImMcwvml3ArxJABXYBYbOcurhvOyNBBRRijXAr0eraokqN.M!/r">
<h4 id="默认样式">默认样式</h4>
<p>很多标签都有默认样式,比如标题h1~h6,div、p标签的默认边距,ul、li的默认小圆点等,由于开发者的目的是还原设计图上的功能,很多时候并不会使用默认样式,甚至默认样式影响到实际开发的效果,这时需要根据需求先清除不需要的默认样式,然后再自定义一些默认样式</p>
<pre><code class="language-css">/*清除默认样式,或者直接使用*号清除所有默认样式*/
body,div,span,p,h1,h2,h3,h4,h5,h6,ul,ol,li,dl,dt,dd,th,td,input{
    padding: 0;
    margin: 0;
}
h1,h2,h3,h4,h5,h6{
    font-weight: normal;
    font-size: 100%;
}
ul,ol{
    list-style: none;
}
/*设置网页默认样式*/
body{
    font-size: 20px;
    font-family: Arial, Consolas, '楷体', '微软雅黑', serif;
}
a{
    color: black;
    text-decoration: none;
}
/*自定义布局*/
.menu{
    width: 600px;
    height: 40px;
}
li{
    width: 100px;
    line-height: 40px;
    float: left;
    background-color: #FA8BFF;
    background-image: linear-gradient(45deg, #FA8BFF 0%, #2BD2FF 52%, #2BFF88 90%);
    border-right: 2px solid wheat;
    text-align: center;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;div class="menu"&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="https://www.baidu.com/"&gt;百度&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://blog.csdn.net/Q0717168/article/details/115449824"&gt;首页&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://www.cnblogs.com/dyd168/p/14603495.html"&gt;科技&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://blog.csdn.net/Q0717168"&gt;Blog&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://www.cnblogs.com/dyd168/"&gt;新闻&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</code></pre>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrEC*8iS3AcsgFm8bcRtRZydJQ.p5bqoH25fzqh3IVfwZtwsB4kcCOspPKk3FCKkor0KTt759v.aDe7oSfgrwJP04!/r">
<h4 id="定位">定位</h4>
<p>定位是让盒子模型在指定位置加载,属性是position,设置盒子模型针对某个参考元素进行位置偏移,常用的定位方式有三种:相对定位(relative)、绝对定位(absolute)、固定定位(fixed),相对定位不会脱离标准流,而绝对定位和固定定位是会脱离标准流的</p>
<p>想要让定位的元素发生位置偏移,必须搭配偏移量属性设置,水平方向:left、right;垂直方向:top、bottom,偏移量属性有正负之分,正数表示偏移方向和属性名意思正好相反,负数才表示偏移方向和属性名意思相同</p>
<p><strong>相对定位</strong></p>
<p>相对定位(relative)是不脱离标准流状态的,盒子在新的指定位置加载后也不会让出原始位置</p>
<pre><code class="language-css">div{
    width: 100px;
    height: 100px;
    background-color: red;
    margin: 5px auto;
}
.relative{
    background-color: blue;
    position: relative;
    left: 100px;
    top: 105px;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;div&gt;&lt;/div&gt;
&lt;div class="relative"&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
</code></pre>
<p>以自身为基准,向右移动100px,向下移动105px;向左移动100px,向上移动105px,移动后原位置还保留,下面的盒子并没有挤上去</p>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrEBoqIVPMvZYOo*mWoGyDeQCG5R*QOsJz3osMVJx7.qq0nk5300UIPHTdcWSWlhD5qyYhw**1AIE.6Pn5twh2VDY!/r">
<p><strong>绝对定位</strong></p>
<p>绝对定位(absolute)会脱离标准流,盒子在新的指定位置加载后原位置会被后面的标准流元素覆盖,绝对定位偏移参考的是距离最近的有定位的祖先元素,若祖先元素都没有设置定位则参考body</p>
<p>以body为参考时,参考点是根据偏移方向组成的body页面首屏的四个顶点</p>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrELR0jJe6h3LWGP.TyOt0FIzC3Lu9Dv43wz49SGkyBNyI06cSRKxj2O*Gp0n53Zj3yjwnH6v4qgz52nXCalIUw4M!/r">
<p>以祖先元素为参考时,参考点和body的类似,都是四个顶点,只是范围缩小到某个定位的元素上,祖先元素不区分类型,可以是相对定位、绝对定位或固定定位。后代和祖先组合方式有三种:子绝父相、子绝父绝、子绝父固,由于相对定位不脱离标准流,结构更加稳定,所以子绝父相的组合比较常用</p>
<pre><code class="language-css">#box0{
    width: 350px;
    height: 350px;
    border: #2BD2FF dotted 5px;
    margin: auto;
    position: relative;
    left: 100px;
    top: 100px;
}
#box1{
    width: 250px;
    height: 250px;
    border: 5px dashed blue;
    position: absolute;
    left: 100px;
    top: 100px;
}
#box2{
    width: 150px;
    height: 150px;
    border: 5px solid orange;
    position: absolute;
    left: 100px;
    top: 100px;
}
.block{
    width: 50px;
    height: 50px;
    background-color: purple;
    position: absolute;
    left: 100px;
    top: 100px;
}
</code></pre>
<p>HTML文件body中的内容</p>
<pre><code class="language-html">&lt;div id="box0"&gt;
&lt;div id="box1"&gt;
    &lt;div id="box2"&gt;
      &lt;div class="block"&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrEER8rik*FLT6w.K44nemNvLR0D.8lsn2zpNHynkC5KQvgvS27Jex.eKbnZMPpSmssFpoccTiO4gLfsHTaVdxH98!/r">
<p><strong>固定定位</strong></p>
<p>固定定位(fixed)也会脱离标准流并让出位置,可以设置宽高,它的参考点是浏览器窗口的四个顶点,具体位置根据偏移组合方向而定</p>
<pre><code class="language-css">.backup{
    width: 120px;
    height: 60px;
    background-image: url("../resource/image/17.jpg");
    background-size: 150px;
    background-position: center;
    border-radius: 15px;
    cursor: pointer;
    position: fixed;
    right: 50px;
    bottom: 50px;
}
</code></pre>
<img src="http://r.photo.store.qq.com/psc?/V54C2OLx3pQy8a0fgch71esxCP2J9hMe/TmEUgtj9EK6.7V8ajmQrECUcTI58gv5UckmjzcxOIi.j.6OCEoORn5wG0djCql1RMZI9mySpsnoFMVS5Oo0TwpwWGfXlEMMDbZtkiID83B8!/r">
<h3 id="javascript使用">Javascript使用</h3>
<p>本次使用ECMAScript 6标准(ES6),讲到JavaScript的版本,实际上就是说它实现了ECMAScript标准的哪个版本,由于JavaScript存在的缺陷,建议开启严格检查模式(strict模式),启用strict模式是在JavaScript代码的第一行写上<code>'use strict';</code></p>
<h4 id="使用方法-1">使用方法</h4>
<pre><code class="language-html">&lt;!doctype html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Document&lt;/title&gt;
    &lt;link rel="stylesheet" href="../CSS/style.css" type="text/css"&gt;
&lt;!--    外部引用方式--&gt;
    &lt;script src="../JavaScript/JS1.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;!--    内部引用方式,既可以在head中,也可以在body中--&gt;
    &lt;script&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!--    内部引用方式,既可以在body中,也可以在head中--&gt;
&lt;script&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h4 id="数据类型运算符及常量变量">数据类型、运算符及常量变量</h4>
<pre><code class="language-js">Number // 数值,在Javascript中,不区分整数和小数
123;      // 整数123
0.123;    // 浮点数0.123
1.23e3;   // 科学计数法表示1.23x1000,等同于1230
-100;   // 负数
NaN;      // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

String // 字符串
'abc' "abc" // 用''或""括起来的字符表示
`abcd`      // 多行字符串用反引号表示
'I\'m \"OK\"!'; // 若字符串内包含'和"时用转义字符\来标识

Boolean // 布尔值
true;   // 这是一个true值
false;// 这是一个false值
2 &gt; 1;// 这是一个true值
1 &gt; 2;// 这是一个false值

Array // 数组
; // JavaScript的数组可以包括任意数据类型
new Array('test',1,'数组');         // 创建数组['test", 1, "数组"]
let arr = ['test', 1, '数组'];      // 将数组赋值给变量arr
arr;            // 返回["test", 1, "数组"]
arr;         // 返回索引为1的元素,即1
arr;         // 索引超出了范围,返回undefined
arr = 'Array'; // 数组值变为["test", 1, "Array"]
arr.sort();       // 对当前数组进行排序
arr.reverse();    // 将当前排列反向排序
arr.indexOf('test');      // 元素"test"的索引为0
arr.indexOf(2);         // 元素2没有找到,返回-1
arr.slice(0, 3);          // 从索引0开始,到索引2结束,但不包括索引2,['test", 1]
arr.slice(3);             // 从索引1开始到结束,
let a = arr.slice();      // 不给slice()传递任何参数时会截取所有元素,此操作相当于复制了一个数组
arr.length;               // 返回数组的长度,3
arr.length = 5;         // 直接给数组的length赋值会导致数组变化,["test", 1, "数组", empty × 2]
arr.unshift('a','B');   // 向数组头部添加元素,返回Array新的长度: 4
arr.shift();            // 删除数组的最后一个元素,pop()返回"a",,连续删除多次就多写几次一起执行
arr.push('ab','CD');      // 向数组末尾添加元素,返回数组新的长度: 5
arr.pop();                // 删除数组的最后一个元素,pop()返回"CD",连续删除多次就多写几次一起执行
arr.splice(1,3,'测','E'); // 删除1~3的索引后从该位置添加元素,返回删除的元素["test", 1, "数组"]
arr.splice(0,1);          // 只删除,不添加,返回删除的元素["B"]
arr.splice(3,0,'F','g');// 只添加,不删除,返回[],因为没有删除任何元素
add.concat(3,4,);    // 把当前的数组与其它数组连接起来,并未修改当前数组,只是返回了一个新的数组
add;                      // 返回结果是["测", "E", "ab", "F", "g", 3, 4, 5, 6]
arr;                      // 返回结果是["测", "E", "ab", "F", "g"]
arr.join('→');            // 使用指定字符把当前数组元素连接起来,返回连接后的字符串,"测→E→ab→F→g"
let arr1 = [,['b',3],'c4']; // 将多维数组赋值给变量arr1
arr1;                        // 获取多维数组中的元素,返回"b"

Object // 对象,是一组由key-value组成的无序集合
let person = {
    name: 'yadian',
    age: 20,
    language: ['js','python','java'],
    'Mid-school':'No.3 Middle School', // 属性名包含特殊字符时必须用''括起来
    Car: true,
    Code: null
};
person.name;         // 获取对象属性,返回"yadian"
person['Mid-school'] // 获取对象属性,有特殊符号时不能使用.必须用[]括起来,返回"No.3 Middle School"

Symbol // 每个从Symbol()函数中返回的值都是唯一的,一个symbol值能作为对象属性的标识符,这是此类型仅有的作用
let s = Symbol();
let ss = Symbol();
s === ss; // 结果是false,每创建了一个Symbol数据都是独一无二的存在

null &amp; undefined
null       // 表示一个“空”的值,0是一个数值,''表示长度为0的字符串,而null表示“空”
undefined// 表示“未定义”,undefined应该只在判断函数参数是否传递的时候使用

typeof // 查看数据类型
typeof s;      // 结果"symbol"
typeof y;      // 结果"number"
typeof person; // 结果"object"

// 逻辑运算,与或非
true &amp;&amp; true;// 都为真结果为true
true || false; // 取最先计算的结果,此处结果为true
!true;         // 取反,结果为false

// 算术运算符(+,-,*,/,%,**)
1+1; // 2
1-1; // 0
2*3; // 6
4/2; // 2
5%3; // 2
2**3;// 8

// 比较运算符(==,===,!=,&gt;,&lt;,&gt;=,&lt;=)
1 &gt; 2;         // false
2 &gt;= 1;      // true
false == 0;    // true,==会自动转换数据类型
false === 0;   // false,强烈建议始终使用===进行比较
NaN === NaN;   // false,NaN与所有其他值都不相等
isNaN(NaN);    // true,唯一判断NaN的方法是通过isNaN()函数
1/3 === 1-2/3; // false, 比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值
Math.abs(1/3-1-2/3) &lt; 0.0000001; // true

// 常量,名称是大小写英文、数字、$和_的组合,且不能用数字开头,不得使用关键字,常量赋值后不可变更
const y = 1;         // 申明了常量y并赋值1
const z_008 = '008'; // z_008是一个字符串
const Abc = true;    // Abc是一个布尔值true
const def = null;    // def的值是null
const g = 123;       // g的值是整数123

// 变量,变量名是大小写英文、数字、$和_的组合,且不能用数字开头,不得使用关键字
let a;             // 申明了变量a,此时a的值为undefined
let $b = 1;      // 申明了变量$b,同时给$b赋值,此时$b的值为1
let c_007 = '007'; // c_007是一个字符串
let Answer = true; // Answer是一个布尔值true
let e = null;      // e的值是null
let a = 123; // a的值是整数123,可以把任意数据类型赋值给变量,同一变量可以反复赋值且可以是不同类型的变量
a = 'ABC';   // a变为字符串
</code></pre>
<h4 id="判断循环mapset及iterable">判断、循环、Map、Set及iterable</h4>
<pre><code class="language-js">// 条件判断
let salary=8000;
if (salary === 9000){
    console.log("平均数");      // 若salary &gt;= 9000为true,则执行if语句块
} else if (salary &gt; 10000){
    console.log("期望结果!");   // 若salary &gt;= 10000为true,则执行else if语句块
} else {
    console.log("继续加油吧!"); // 否则执行else语句块
}

// for循环,通过初始条件、结束条件和递增条件,循环执行语句块
let a=0;
let i;
for (i=0;i&lt;10;i++){
    a=a+i;
    if (i&lt;5){
      continue;
    }else if (i&gt;8){
      break;
    }
    console.log(a); // 打印计算结果 15 21 28 36
}
// for...in循环,把对象中所有属性依次循环出来
let b = {
    name: 'duan',
    age: 20,
    city: '苏州',
};
for (let key in b) {
    if (b.hasOwnProperty(key)) {// hasOwnProperty()的作用是过滤掉对象继承的属性
      console.log(key);         // 打印结果 name age city
    }
}
// 通过for...in循环出数组的索引,得到的是String类型,而非Number
let arr = [,['b',3],'c4'];
for (let c in arr) {
    console.log(c);               // 打印结果 0 1 2
    console.log(arr);          // 打印结果[ 1, 'a', 2 ] [ 'b', 3 ] c4
}

// while循环,只有一个判断条件,条件满足时不断循环,否则退出循环
let d = 0;
let e = 100;
while (e &gt; 0) {
    d = e + d;
    e = e - 2;// 变量e不断自减至结果为-1时,循环退出
}
console.log(d); // 打印结果2550

// Map,就是跟Python中的字典是一样
let sal = new Map([['小张',9000], ['小段',10000]]); // 设置Map
let sal = new Map();      // 设置空Map
sal.set('小红', 8000);   // 添加新的key-value,结果Map(1) { '小红' =&gt; 8000 }
sal.set('小红', 8500);   // 对同一个key放入值,前面的会被覆盖,结果Map(1) { '小红' =&gt; 8500 }
sal.has('小刘');         // 是否存在key,结果为false
sal.get('小红');         // 获取小红的值,结果8500
sal.delete('小红');      // 删除key,结果ture
sal.get('小红');         // 再次获取小红的值,结果undefined

// Set,只有Key,且key不会重复,需要数组作为输入或为空
let s = new Set([,['b',3],'c4']);
s.add(1);      // 添加元素1,结果Set(4) { [ 1, 'a', 2 ], [ 'b', 3 ], 'c4', 1 }
s.add(1);      // 再次添加元素1,结果不变,依然是Set(4) { [ 1, 'a', 2 ], [ 'b', 3 ], 'c4', 1 }
s.delete('c4') // 删除元素'c4',结果Set(3) { [ 1, 'a', 2 ], [ 'b', 3 ], 1 }

// iterable迭代,Array、Map和Set都属于iterable类型,用for ... of循环遍历集合
let f = ['A', 1, 'B'];
let g = new Set(['C', 2, '密码']);
let m = new Map([, , ]);
for (let h of f) {// 遍历Array
    console.log(h); // 打印结果为A 1 B
}
for (let h of g) {// 遍历Set
    console.log(h); // 打印结果为C 2 密码
}
for (let h of m) {// 遍历Map
    console.log(h + '=' + h); // 打印结果为1=D 2=小张 3=小刘
}
</code></pre>
<h4 id="函数作用域">函数&amp;&amp;作用域</h4>
<pre><code class="language-js">// 函数定义,方式一:普通函数
// function指出这是一个函数定义,abs是函数的名称,(x)括号内列出函数的形式参数,多个形参以,分隔
// {...}之间的代码是函数体,执行到return时函数执行完毕并返回结果,函数内部通过条件判断和循环实现非常复杂的逻辑
function abs(x) {
    if (typeof x !== 'number') {      // 实参数据类型判断
      throw '参数错误,不是Number类型';
    }
    if (x &gt; 10) {
      return x;
    } else {
      return -x;
    }
}
console.log(abs(8)); // 函数调用,传递实际参数,打印结果-8
abs(12);             // 函数调用,传递实参,结果返回12
abs(9,10,11);      // 函数调用,传递多个实参,因为形参只有一个,得到的结果是-9
abs();               // 函数调用,实参为空,结果返回NaN
abs('cs');         // 报错提示"参数错误,不是Number类型",若没有实参判断,结果返回NaN

// 函数定义,方式二:匿名函数
// function (x) {...}没有函数名,将匿名函数赋值给了变量fun,通过变量fun调用此函数
let fun = function (y) {
    if (y &gt;10) {
      return y;
    } else {
      return -y;
    }
};
console.log(fun(12)); // 函数调用,传递实参,结果返回12,两种方式等价,其它调用结果与方式一相同

// arguments参数,可以获得调用者传入的所有参数(包括未定义参数),常用于判断传入参数的个数
function f1(z) {
    console.log("打印Z→:"+z);    // 打印结果为打印Z→:1
    for (let k=0;k&lt;arguments.length;k++){
      console.log(arguments)// 打印结果为123456
    }
    if(z&gt;5){
      return ('编号:'+z);
    }else {
      return('编号:'+-z);
    }
}
console.log(f1(1,2,3,4,5,6));   // 打印结果为编号:-1

// rest参数,前面用...标识且只能写在最后
function foo(a, b, ...rest) {
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}
foo(1, 2, 3, 4, 5); // 函数调用,结果为 a = 1,b = 2,[ 3, 4, 5 ],实参先绑定a、b,多余参数以数组形式交给变量rest
foo(1);             // 函数调用,结果为 a = 1,b = undefined,[]

// map()方法,定义在数组中,调用数组的map()方法,传入自己的函数就会得到了一个新的数组作为结果
function product(x) {
    return x * x;
}
let num = ;
let results = num.map(product);
console.log(results);            // 打印结果[ 1, 4, 9 ]
console.log(num.map(String));    // 将number转换为字符串,打印结果[ '1', '2', '3' ]

// reduce()方法,此函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算
let numb = ;
let o;
numb.reduce(function (x, y) {
    return o= x + y;
});
console.log(o); // 打印结果6

// filter()方法,把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素
let p = ;
let r = p.filter(function (x) {
    return x % 2 === 0;
});
console.log(r); // 打印结果[ 2, 4, 6 ]
// sort()方法,用于排序,默认把所有元素先转换为String再排序,所以不要使用默认排序
let q=;
q.sort(function (x, y) {
    if (x &lt; y) {
      return -1;
    }
    if (x &gt; y) {
      return 1;
    }
    return 0;
});
console.log(q); // 打印结果[ -1, 2, 2, 3, 8, 10 ]

// find()方法,用于查找符合条件的第一个元素,若存在则返回此元素,否则返回undefined
let arr1 = ['Apple','orange','Banana'];
console.log(arr1.find(function (s) {
    return s.toLowerCase() === s;
}));                                  // 打印结果orange, 因为orange全部是小写
console.log(arr1.find(function (s) {
    return s.toUpperCase() === s;
}));                                  // 打印结果undefined, 因为没有全部是大写的元素

// forEach()方法,常用于遍历数组,依次打印每个元素
let j = ['小段',,'fg'];
j.forEach(function (value, index) {
    console.log(value+',index='+index); // 打印结果为小段,index=0 1,E,index=1 fg,index=2
})

// 作用域
// 若变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不能是引用
function foo1() {
    let x = 1;
    x = x + 1;
}
x = x + 1; //报引用错误,ReferenceError: x is not defined
// 若两个不同的函数各自申明了同一个变量,则该变量只在各自的函数体内起作用,不同函数内部的同名变量互相独立,互不影响
function foo1() {
    let m = 1;
    m = m + 1;
}
function foo2() {
    let m = 'A';
    m = m + 1;
}
// 为嵌套函数时,内部函数可以访问外部函数定义的变量,而外部不能访问内部定义的变量
function fo1() {
    let n = 1;
    function dyd() {
      let y = n + 1; // y=2
    }
   let z = y + 1; // ReferenceError: y is not defined!
}
// 函数查找变量时从自身函数定义开始,从“内”向“外”查找,若内部函数与外部函数变量重名,则取内部函数的变量值
function fo2() {
    let x = 6;
    function dyd() {
      let x = 'A';
      console.log('x in dyd() = ' + x); // 打印结果x in dyd() = A
    }
    console.log('x in fo2() = ' + x);   // 打印结果x in fo2() = 6
    dyd();
}
fo2();
// 应严格遵守在函数内部首先申明所有变量的规则
function foo() {
    let
      x = 1,   // x初始化为1
      y = x + 1, // y初始化为2
      z, i;      // z和i为undefined
                ...
    for (i=0;i&lt;100;i++) {
      ...
    }
}
// 不在任何函数内定义的变量具有全局作用域,JS默认有一个全局对象Window,全局作用域的变量实际上被绑定到Window的一个属性
function fo3() {
    alert('fo3');// 弹窗显示fo3
}
foo();                        // 直接调用fo3()
window.foo();    // 通过window.fo3()调用
// 把自己的所有变量和函数全部绑定到唯一的名字空间MYAPP中,可减少全局变量冲突的可能
let Myapp = {};      // 唯一的全局变量Myapp;
Myapp.name = 'myapp';// 其他变量;
Myapp.version = 1.0; // 其他函数;
Myapp.fo4 = function () {
    return 'foo';
};
// 局部作用域,用let申明一个块级作用域的变量
function fo4() {
    let sum = 0;
    for (let i=0; i&lt;100; i++) {
      sum += i;
    }
// 解构赋值,使用解构赋值可以减少代码量
let = ['Hello','JS','ES6'];
let ] = ['hello', ['JS', 'ES6']];
console.log('x = '+x+', y = '+y+', z = '+z); // x, y, z分别被赋值为数组对应元素

// 方法,在一个对象中绑定函数,称为这个对象的方法
let xd = {
    name: '小段',
    birth: 1996,
    age: function () {
      let age = this;         // this变量始终指向当前对象(xd),在方法内部一开始用age捕获this
      function getAge() {
            let y = new Date().getFullYear(); // 获取当前年份
            return y - age.birth; // this.birth可以拿到xd的birth属性,age已经捕获this,这里要用age
      }
      return getAge();
    }
};
console.log(xd.age());            // 获取年龄,结果25

//apply()方法,指定函数的this指向哪个对象,有两个参数,一个是需绑定的this变量,第二个是数组,指函数本身的参数
function getAge() {
    let y = new Date().getFullYear();
    return y - this.birth;
}
let xh = {
    name: '小红',
    birth: 1998,
    age: getAge
};
console.log(xh.age()); // 23
console.log(getAge.apply(xh, [])); // 23, this指向xh, 参数为空
console.log(getAge.call(xh, ));
// call()方法,与apply()类似
console.log(Math.min.call(null, 6, 7, 10));    // 结果6,call()把参数按顺序传入
console.log(Math.min.apply(null, )); // 结果6,apply()把参数打包成Array再传入

// 闭包,在函数中定义新函数,内部函数引用外部函数的参数和局部变量,当外部函数返回内部函数时,参数和变量保存在返回的函数中
function count() {
    let arr = [];
    for (let i=1; i&lt;=3; i++) {
      arr.push(function () {
            return i * i;
      });
    }
    return arr;
}
let result = count();
let t1 = result;
let t2 = result;
let t3 = result;
console.log(t1());// 打印结果1
console.log(t2());// 打印结果4
console.log(t3());// 打印结果9
   
// =&gt;箭头函数,相当于匿名函数
let v= u =&gt; u * u;      // 只有一条语句的箭头函数
console.log('箭头函数'+v); // 打印结果箭头函数u =&gt; u * u
x =&gt; {                   // 多条语句的箭头函数
    if (x &gt; 0) {
      return x * x;
    }
    else {
      return - x * x;
    }
}
(x, y) =&gt; x * x + y * y   // 两个参数
() =&gt; 3.14                // 无参数
(x, y, ...rest) =&gt; {      // 可变参数
    var i, sum = x + y;
    for (i=0; i&lt;rest.length; i++) {
      sum += rest;
    }
    return sum;
}
v =&gt; ({ foo: v })      // 使用箭头函数返回对象
// genetator函数,由function*定义,除了return语句,还可以用yield返回多次
function* foo(x) {
    yield x + 1;
    yield x + 2;
    return x + 3;
}
</code></pre>
<h4 id="标准对象及面向对象编程">标准对象及面向对象编程</h4>
<pre><code class="language-js">let now = new Date(2021, 3, 27, 22, 50, 58, 850); // 自定义时间
now;                               // Tue Apr 27 2021 22:50:58 GMT+0800 (中国标准时间)
now.getFullYear();               // 2021, 年份
now.getMonth();                  // 3, 月份,月份范围是0~11,3表示四月
now.getDate();                     // 27, 表示26号
now.getDay();                      // 2, 表示星期一
now.getHours();                  // 22, 24小时制
now.getMinutes();                  // 39, 分钟
now.getSeconds();                  // 38, 秒
now.getMilliseconds();             // 850, 毫秒数
now.getTime();                     // 1619535058850, 以number形式表示的时间戳
let aa = Date.parse('Tue Apr 27 2021 22:50:58 GMT+0800');
console.log(aa);                   // 转换为时间戳,打印结果1619535058000
let ab = new Date(1619437937000);
console.log(ab);                   // 时间戳转为UTC时间,打印结果Tue Apr 27 2021 22:50:58 GMT+0800
console.log(ab.toUTCString());   // UTC时间,与本地时间相差8小时,打印结果Tue, 27 Apr 2021 14:50:58 GMT
console.log(ab.toLocaleString());// 本地时间,打印结果2021/4/27下午10:50:58

// 正则表达式,正则表达式非常强大,这里简单记录下,用时网上查吧
*   // 表示任意个字符(包括0个)
+   // 表示至少一个字符
?   // 表示0个或1个字符
^   // 表示行的开头,^\d表示必须以数字开头。
$   // 表示行的结尾,\d$表示必须以数字结束。
{n}   // 表示n个字符
{n,m} // 表示n-m个字符
\d    // 可以匹配一个数字
\w    // 可以匹配一个字母或数字
\s    // 可以匹配至少一个空格
i   // 表示忽略大小写
m   // 表示执行多行匹配
g   // 表示全局匹配
/^1{9}$/ // 使用正则表达式进行简单的手机号检验

// JSON是JavaScript Object Notation的缩写,它是一种数据交换格式,如下,序列化后的JSON格式字符串,数据是键值对形式
{
"name": "小刘",
"age": 26,
"gender": true,
"height": 1.72,
"grade": null,
"middle-school": "\"No.1\" MIDDLE SCHOOL",
"skills": ["JS","JAVA","PYTHON"]
}

// JS通过原型(prototype)实现面向对象编程,原型继承
let dyd = {                      // 原型对象
    name: '小段',
    height: 1.7,
    doing: function () {
      console.log(this.name + '学习中……!');
    }
};
function creates(name) {      // 基于dyd原型创建一个新对象
    let ac = Object.create(dyd);// 初始化新对象
    ac.name = name;
    return ac;
}
let YD = creates('小段');
YD.doing();                        // 结果:小段学习中……!
console.log(YD.__proto__ === dyd); // 打印结果:true
// class继承,class的定义包含构造函数constructor和定义在原型对象上的函数hello(),没有function,让定义类更简单
class xb {
    constructor(name) {
      this.name = name;
    }
    hello() {
      console.log('Hello,' + this.name + '!');
    }
}
let yd = new xb('小贝');
yd.hello();                     // 结果:Hello,小贝!
</code></pre>
<h4 id="bom及dom及表单操作">BOM及DOM及表单操作</h4>
<p><strong>浏览器对象模型BOM</strong></p>
<pre><code class="language-js">// navigator对象表示浏览器的信息,最常用的属性如下
navigator.appName;   // 浏览器名称,Netscape
navigator.appVersion;// 浏览器版本,...Chrome/89.0.4389.114...
navigator.language;    // 浏览器设置的语言,zh-CN
navigator.platform;    // 操作系统类型,Win32
navigator.userAgent;   // 浏览器设定的User-Agent字符串,Mozilla/5.0 (Windows NT 10.0; Win64; x64...

// screen对象表示屏幕的信息,常用的属性如下
screen.width;          // 屏幕宽度,以像素为单位,1494
screen.height;         // 屏幕高度,以像素为单位,934
screen.colorDepth;   // 返回颜色位数,24

// location对象表示当前页面的URL信息,常用属性如下
// 比如此URL,http://localhost:63342/Web/HTML/javascript.html?_ijt=eefuqvildlmkfbrjo77n045lee
location.protocol;   // 协议,"http:"
location.host;         // 主机,"localhost:63342"
location.port;         // 端口,"63342"
location.pathname;   // 路径名,"/Web/HTML/javascript.html"
location.search;       // 搜索信息,"?_ijt=eefuqvildlmkfbrjo77n045lee"

// document对象表示当前页面,常用属性如下
document.URL;   // 当前页面URL,"https://blog.csdn.net/Q0717168?type=sub&amp;spm=1010.2135.3001.5348"
document.cookie   // 获取cookie,"uuid_tt_dd=10_188071950; dc_session_id=10_1619507552297.58...
document.title;   // 获取当前页面标题,"Q0717168的博客_小白典_CSDN博客-领域博主"
document.title="我的博客" // 修改当前页面标题,"我的博客"
</code></pre>
<p><strong>文档对象模型DOM</strong></p>
<p>更新DOM,使用<code>innerText</code>、<code>innerHTML</code>、<code>textContent</code>属性,也可以对样式进行修改</p>
<pre><code class="language-html">&lt;p id="b-id"&gt;这是一段文字!&lt;/p&gt;
</code></pre>
<pre><code class="language-js">let ap = document.getElementById('b-id'); // 获取元素id
ap.innerText = '将对应id的内容变为当前内容';
ap.innerHTML = '也是修改对应id内容为当前文本的作用';
ap.textContent= '同样修改对应id内容为当前文本内容的作用';
ap.style.color = 'red';      // 修改文本颜色
ap.style.fontSize = '20px';// 修改文本字体大小
</code></pre>
<p>插入DOM,使用<code>appendChild</code>属性插入最后,使用<code>insertBefore</code>插入到指定位置</p>
<pre><code class="language-html">&lt;p id="code"&gt;JS&lt;/p&gt;
&lt;div id="list"&gt;
    &lt;p id="python"&gt;Python&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-js">// 把&lt;p id="code"&gt;JS&lt;/p&gt;添加到&lt;div id="list"&gt;的最后一项
let ad = document.getElementById('code');
let list = document.getElementById('list');
list.appendChild(ad);
</code></pre>
<pre><code class="language-js">// 新增数据,并添加到最后一项
let list1 = document.getElementById('list');// 获取元素id
let ja = document.createElement('p');       // 创建p标签
ja.id = 'jav';                              // 为p标签添加id
ja.innerText = 'JAVA';                      // p标签内容为JAVA
list1.appendChild(ja);                      // 将新增的p元素内容添加到id为list元素下
</code></pre>
<pre><code class="language-js">// 在JAVA前插入C
let list2 = document.getElementById('list'),
    java = document.getElementById('jav'),
    c = document.createElement('p');
c.id = 'c';
c.innerText = 'C';
list2.insertBefore(c,java);
</code></pre>
<pre><code class="language-html">&lt;!--经过插入子节点后,HTML变为以下结构,并按此顺序排列--&gt;
&lt;div id="list"&gt;
    &lt;p id="python"&gt;Python&lt;/p&gt;
    &lt;p id="code"&gt;JS&lt;/p&gt;
    &lt;p id="c"&gt;C&lt;/p&gt;
    &lt;p id="ja"&gt;JAVA&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<p>删除DOM,获取该节点本身以及它的父节点,然后调用父节点的<code>removeChild</code>删掉自己</p>
<pre><code class="language-js">let self = document.getElementById('code'),   // 拿到待删除节点
    parent = self.parentElement;            // 拿到待删除节点的父节点
let remove = parent.removeChild(self);      // 删除子节点
console.log(remove);                        // 打印删除节点,&lt;p id="code"&gt;JS&lt;/p&gt;
</code></pre>
<p><strong>表单操作</strong></p>
<pre><code class="language-html">&lt;select&gt;               &lt;!--下拉框--&gt;
&lt;input type="text"&gt;      &lt;!--文本框--&gt;
&lt;input type="password"&gt;&lt;!--密码框--&gt;
&lt;input type="radio"&gt;   &lt;!--单选框--&gt;
&lt;input type="checkbox"&gt;&lt;!--多选框--&gt;
&lt;input type="hidden"&gt;    &lt;!--文本隐藏--&gt;
&lt;input type="text" id="area"&gt;
let input = document.getElementById('area'); &lt;!--获取id为area的输入框--&gt;
input.value;             &lt;!--获取输入框中的值--&gt;
input.value='abc';       &lt;!--也可以直接修改输入框中的值--&gt;

&lt;form id="login-form" method="post" onsubmit="form()"&gt; &lt;!--onsubmit表示当表单提交时执行JS--&gt;
    &lt;input type="text" id="username" name="username"&gt;
    &lt;input type="password" id="input-password"&gt;             &lt;!--此处因为没有name属性,输入的内容不会提交--&gt;
    &lt;input type="hidden" id="md5-password" name="password"&gt; &lt;!--隐藏用户输入的密码并提交此内容--&gt;
    &lt;button type="submit"&gt;提交&lt;/button&gt;
&lt;/form&gt;
&lt;script&gt;
    function form() {
      let input_pwd = document.getElementById('input-password');
      let md5_pwd = document.getElementById('md5-password');
      md5_pwd.value = toMD5(input_pwd.value); // 把用户输入的明文变为MD5
      return true;// 告诉浏览器继续提交,若输入有误,return false则不会继续提交表单
    }
&lt;/script&gt;
</code></pre>
<h4 id="jquery">jQuery</h4>
<p>jQuery是JavaScript中使用最广泛的一个库,里面存在大量的JS函数,它可以帮我们做以下的事情:</p>
<ul>
<li>消除浏览器差异:不再需要自己写冗长的代码来针对不同的浏览器来绑定事件,编写AJAX等代码</li>
<li>简洁的操作DOM的方法:写<code>$('#code')</code>肯定比<code>document.getElementById('code')</code>来得简洁</li>
<li>轻松实现动画、修改CSS等各种操作</li>
</ul>
<p>可以使用在线的,也可以下载后本地引用,首先搜索CDN jQuery,使用jQuery只需要在页面的<code>&lt;head&gt;</code>引入jQuery文件</p>
<pre><code class="language-html">&lt;script src="https://code.jquery.com/jquery-3.5.1.js"&gt;&lt;/script&gt;
&lt;script src="../lib/jquery-3.5.1.js"&gt;&lt;/script&gt;
</code></pre>
<p>主要记着一个公式<code>$('selector').action()</code>,$()是代表jQuery,selector表示选择器,action表示事件,举个栗子:</p>
<pre><code class="language-html">&lt;a href="" id="jQ-1"&gt;点我看弹窗&lt;/a&gt;
&lt;a href="" class="jQ-2"&gt;点我&lt;/a&gt;
&lt;script&gt;
$('#jQ-1').click( function () {
    alert('这是点我看弹窗!')
})
$('.jQ-2').click( function () {
    alert('这是点我!')
})
&lt;/script&gt;
</code></pre>
<p>更多教程请查看jQuery API中文文档</p>
<h4 id="nodejs">Node.js</h4>
<p>Node.js是一个开源与跨平台的 JavaScript 运行时环境,是底层平台,使用Node.js能够能够实现高性能的Web服务,具体还是看官方教程吧!点击查看Node.js中文教程文档</p><br><br>
来源:https://www.cnblogs.com/dyd168/p/14711360.html
頁: [1]
查看完整版本: 前端开发基础 HTML+CSS+JS