<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>YanChen</title>
  
  
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://xiaowuyoucy.github.io/"/>
  <updated>2025-07-21T21:05:14.475Z</updated>
  <id>https://xiaowuyoucy.github.io/</id>
  
  <author>
    <name>John Doe</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>c语言</title>
    <link href="https://xiaowuyoucy.github.io/2025/07/14/c%E8%AF%AD%E8%A8%80/"/>
    <id>https://xiaowuyoucy.github.io/2025/07/14/c语言/</id>
    <published>2025-07-13T19:46:33.000Z</published>
    <updated>2025-07-21T21:05:14.475Z</updated>
    
    <content type="html"><![CDATA[<h3 id="c语言的汇编表示方式"><a class="markdownIt-Anchor" href="#c语言的汇编表示方式"></a> C语言的汇编表示方式</h3><p>在C语言里插入汇编</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">__asm&#123;</span><br><span class="line">mov eax,<span class="number">1</span></span><br><span class="line">mov ecx,eax</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">add</span><span class="params">(<span class="keyword">int</span> a, <span class="keyword">int</span> b)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> a + b;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">__asm mov eax, <span class="number">1</span>;</span><br><span class="line">add(<span class="number">1</span>, <span class="number">2</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">00D71D90  push        ebp  </span><br><span class="line">00D71D91  mov         ebp,esp  </span><br><span class="line">00D71D93  sub         esp,0C0h  </span><br><span class="line">00D71D99  push        ebx  </span><br><span class="line">00D71D9A  push        esi  </span><br><span class="line">00D71D9B  push        edi  </span><br><span class="line">00D71D9C  lea         edi,[ebp+FFFFFF40h]  </span><br><span class="line">00D71DA2  mov         ecx,30h  </span><br><span class="line">00D71DA7  mov         eax,0CCCCCCCCh  </span><br><span class="line">00D71DAC  rep stos    dword ptr es:[edi]  </span><br><span class="line">__asm mov eax, 1;</span><br><span class="line">00D71DAE  mov         eax,1  </span><br><span class="line">00D71DB3  push        2  </span><br><span class="line">00D71DB5  push        1  </span><br><span class="line">00D71DB7  call        00D71370  </span><br><span class="line">00D71DBC  add         esp,8  </span><br><span class="line">add(1, 2);</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">00D71DBF  xor         eax,eax  </span><br><span class="line">&#125;</span><br><span class="line">00D71DC1  pop         edi  </span><br><span class="line">&#125;</span><br><span class="line">00D71DC2  pop         esi  </span><br><span class="line">00D71DC3  pop         ebx  </span><br><span class="line">00D71DC4  add         esp,0C0h  </span><br><span class="line">00D71DCA  cmp         ebp,esp  </span><br><span class="line">00D71DCC  call        00D7120D  </span><br><span class="line">00D71DD1  mov         esp,ebp  </span><br><span class="line">00D71DD3  pop         ebp  </span><br><span class="line">00D71DD4  ret  </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">int add(int a, int b)</span><br><span class="line">&#123;</span><br><span class="line">00D724B0  push        ebp  </span><br><span class="line">00D724B1  mov         ebp,esp  </span><br><span class="line">00D724B3  sub         esp,0C0h  </span><br><span class="line">00D724B9  push        ebx  </span><br><span class="line">00D724BA  push        esi  </span><br><span class="line">00D724BB  push        edi  </span><br><span class="line">00D724BC  lea         edi,[ebp+FFFFFF40h]  </span><br><span class="line">00D724C2  mov         ecx,30h  </span><br><span class="line">00D724C7  mov         eax,0CCCCCCCCh  </span><br><span class="line">00D724CC  rep stos    dword ptr es:[edi]  </span><br><span class="line">00D724CE  mov         ecx,0D7B003h  </span><br><span class="line">00D724D3  call        00D71203  </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">return a + b;;</span><br><span class="line">00D724D8  mov         eax,dword ptr [ebp+8]  </span><br><span class="line">00D724DB  add         eax,dword ptr [ebp+0Ch]  </span><br><span class="line">&#125;</span><br><span class="line">00D724DE  pop         edi  </span><br><span class="line">00D724DF  pop         esi  </span><br><span class="line">00D724E0  pop         ebx  </span><br><span class="line">00D724E1  add         esp,0C0h  </span><br><span class="line">00D724E7  cmp         ebp,esp  </span><br><span class="line">00D724E9  call        00D7120D  </span><br><span class="line">00D724EE  mov         esp,ebp  </span><br><span class="line">00D724F0  pop         ebp  </span><br><span class="line">00D724F1  ret</span><br></pre></td></tr></table></figure><h4 id="main函数入出栈图"><a class="markdownIt-Anchor" href="#main函数入出栈图"></a> main函数(入/出)栈图</h4><p><img src="../../themes/pure/source/images/javawz/image-20250715045027579.png" alt="image-20250715045027579"></p><p>函数返回结果一般存放在eax中</p><h3 id="参数传递与返回值"><a class="markdownIt-Anchor" href="#参数传递与返回值"></a> 参数传递与返回值</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">add(1, 2);</span><br><span class="line"></span><br><span class="line">int add(int a, int b)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">return a + b;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">//将2,1入栈,调用add函数,最后堆栈平衡</span><br><span class="line">00B21DB3  push        2  </span><br><span class="line">00B21DB5  push        1  </span><br><span class="line">00B21DB7  call        _add (0B21370h)  </span><br><span class="line">00B21DBC  add         esp,8  </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//将a的值放入eax中</span><br><span class="line">return a + b;;</span><br><span class="line">00B224D8  mov         eax,dword ptr [a]  </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">将a的值和b 的值相加,并且存入eax中</span><br><span class="line">return a + b;;</span><br><span class="line">00B224DB  add         eax,dword ptr [b]</span><br></pre></td></tr></table></figure><h3 id="变量"><a class="markdownIt-Anchor" href="#变量"></a> 变量</h3><p><img src="../../themes/pure/source/images/javawz/image-20250715202759494.png" alt="image-20250715202759494"></p><p>全局变量在CE中显示绿色</p><h3 id="变量与参数的内存布局"><a class="markdownIt-Anchor" href="#变量与参数的内存布局"></a> 变量与参数的内存布局</h3><p>函数参数存放在堆栈中,一般是以ebp-8开始</p><p>局部变量存放在堆栈红,一般是以ebp+8开始</p><p>返回值一般存放在eax中</p><h3 id="整数类型"><a class="markdownIt-Anchor" href="#整数类型"></a> 整数类型</h3><p><img src="../../themes/pure/source/images/javawz/image-20250715204603231.png" alt="image-20250715204603231"></p><p>数据溢出是把高位舍弃掉</p><p>有符号和无符号的区别:</p><p>拓展时与比较时才有区别</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">拓展:</span><br><span class="line">有符号拓展</span><br><span class="line">char c = 1;//c=00000001</span><br><span class="line">int b = c; //b = 00000000 00000000 00000000 00000001</span><br><span class="line"></span><br><span class="line">char  c = -1;//c = 11111111</span><br><span class="line">b本来是 00000000 00000000 00000000 00000000</span><br><span class="line">赋值后 00000000 00000000 00000000 11111111</span><br><span class="line">因为c是有符号类型且最高位是1,所以前面的0都用c的符号位去填充</span><br><span class="line">int b = c;b = 11111111 11111111 11111111 11111111</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">无符号拓展</span><br><span class="line"></span><br><span class="line">unsigned char c = -1;//c = 11111111</span><br><span class="line">无符号号数扩展直接填充0,不需要看符号位填充</span><br><span class="line">int b = c;// b = 00000000 00000000 00000000 11111111</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">unsigned char i = -1;</span><br><span class="line">unsigned char j = 1;</span><br><span class="line"></span><br><span class="line">if(i&gt;j)</span><br><span class="line">&#123;</span><br><span class="line">printf(&quot;i&gt;j&quot;);</span><br><span class="line">&#125;</span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">printf(&quot;i&lt;j&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">i = -1 = FFFFFFFF</span><br><span class="line"></span><br><span class="line">j = 1 = 00000001</span><br><span class="line"></span><br><span class="line">因为都是无符号类型,所以i&gt;j</span><br></pre></td></tr></table></figure><h3 id="浮点类型"><a class="markdownIt-Anchor" href="#浮点类型"></a> 浮点类型</h3><p><img src="../../themes/pure/source/images/javawz/image-20250716001433833.png" alt="image-20250716001433833"></p><p><img src="../../themes/pure/source/images/javawz/image-20250716003754128.png" alt="image-20250716003754128"></p><p><img src="../../themes/pure/source/images/javawz/image-20250716005210806.png" alt="image-20250716005210806"></p><p>也就是8.25用float或double类型,有效数字是包含整数部分的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line">比如 8.25</span><br><span class="line">先将整数部分转换为二进制</span><br><span class="line">8 == 1000</span><br><span class="line"></span><br><span class="line">0.25转换小数部分</span><br><span class="line">0.25 == 0.01(二进制)</span><br><span class="line">0  1</span><br><span class="line">0.25*2 = 0.5</span><br><span class="line">0.5 * 2 = 1</span><br><span class="line"></span><br><span class="line">小数部分0.4 == 0.1100转成二进制：</span><br><span class="line">0.4 == 0.1100(二进制)</span><br><span class="line">0.4*2 = 0.8</span><br><span class="line">0.8*2 = 1.6</span><br><span class="line">0.6*2 = 1.2</span><br><span class="line">0.2*2 = 0.4</span><br><span class="line">0.4*2 = 0.8</span><br><span class="line">...</span><br><span class="line"></span><br><span class="line">8.25 == 1000.01(二进制)</span><br><span class="line">转换为科学计数法 1000.01 == 1.00001 * 2^3</span><br><span class="line"></span><br><span class="line">符号位是0 (正数是0,负数是1)</span><br><span class="line">指数符号位是1 (小数点向左移就填1,向右移就填0)</span><br><span class="line">指数位是 3 所以3-1 = 2 == 10 ==0000010(10二进制写后面,前面部分用0 补)</span><br><span class="line">尾数部分是 1 从左往右写入内存不够用0补(10000000000000000000000)</span><br><span class="line"></span><br><span class="line">8.25的内存存储形式:</span><br><span class="line">符号位  指数符号位指数移动数二进制小数部分</span><br><span class="line">0 1      00001010000000000000000000000</span><br><span class="line">0100 0001 0000 0100 0000 0000 0000</span><br><span class="line">转换为16进制</span><br><span class="line">4     1    0    4   0     0    0</span><br><span class="line">小数转换到二进制是不完全精确的</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">0.25转换为二进制小数</span><br><span class="line">整数部分 0</span><br><span class="line">小数部分 01</span><br><span class="line">0.25 == 0.01</span><br><span class="line">0.01转换为科学计数法 == 1 * 2^-2</span><br><span class="line"></span><br><span class="line">实数是正数所以是0</span><br><span class="line">指数符号 0(因为是向右移动得到的)</span><br><span class="line">指数位 1111101</span><br><span class="line">步骤:</span><br><span class="line">2 == 0000010</span><br><span class="line">按位取反==1111101</span><br><span class="line">尾数部分是0(因为1 *2%-2,1后面没有小数)</span><br><span class="line"></span><br><span class="line">0.25的内存存储形式:</span><br><span class="line">符号位指数符号位指数移动数二进制小数部分</span><br><span class="line">0 0  1111101  00000000000000000000000</span><br><span class="line">0011 1110 1000 0000 0000 0000 0000 0000</span><br><span class="line">3  E    8    0    0    0    0    0</span><br></pre></td></tr></table></figure><h3 id="movss指令"><a class="markdownIt-Anchor" href="#movss指令"></a> movss指令</h3><p>移动一个标量的单精度浮点数（float）值。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">movss xmm1, xmm2/m32  ; 从另一个 XMM 寄存器或内存中复制一个 float 到 xmm1</span><br><span class="line">movss xmm2/m32, xmm1  ; 把 xmm1 中的 float 值写到另一个 xmm 或内存中</span><br></pre></td></tr></table></figure><h3 id="字符与字符串"><a class="markdownIt-Anchor" href="#字符与字符串"></a> 字符与字符串</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">//编译器会将&apos;a&apos;拿去ASCII表中查找对应&apos;a&apos;的数值</span><br><span class="line">char c = &apos;a&apos;;</span><br><span class="line">//因为c存放的是&apos;a&apos;的数值所以putchar会用c的数值去ASCII表中查找,最后输&apos;a&apos;</span><br><span class="line">putchar(c);</span><br><span class="line"></span><br><span class="line">//str存放的是&quot;abcd&quot;中的第一个字符的地址(指针)</span><br><span class="line"></span><br><span class="line">char str[] = &quot;abcd&quot;</span><br></pre></td></tr></table></figure><h3 id="中文字符"><a class="markdownIt-Anchor" href="#中文字符"></a> 中文字符</h3><p>一个中文字符用两个127以上的数值表示</p><p>一个字节是一个中文字体的一半,所以要两个字节存放一个汉字</p><p>中文字符编码GB2312或GB2312-80</p><p><img src="../../themes/pure/source/images/javawz/image-20250716034413184.png" alt="image-20250716034413184"></p><p>比如D0D6在中国代表中字,在韩国可能就是另外一种字体.这样的软件是不通用的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">char str[] = &quot;我&quot;;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="../../themes/pure/source/images/javawz/image-20250716034351828.png" alt="image-20250716034351828"></p><h3 id="运算符与表达式"><a class="markdownIt-Anchor" href="#运算符与表达式"></a> 运算符与表达式</h3><p>不同数据类型运算时会进行扩展</p><p>比如一个int类型，一个float类型做运算时，会提升为float类型或double类型</p><p><img src="../../themes/pure/source/images/javawz/image-20250717000105492.png" alt="image-20250717000105492"></p><h4 id="setg和setl"><a class="markdownIt-Anchor" href="#setg和setl"></a> setg和setl</h4><p>它们用于将 <strong>标志寄存器的结果（ZF、SF、OF 等）转换为布尔值（0 或 1）</strong> 存入目标寄存器或内存中。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">指令含义条件通常用于比较（cmp）后</span><br><span class="line">setgSet if GreaterZF=0 且 SF=OF有符号大于（&gt;）</span><br><span class="line"></span><br><span class="line">setlSet if LessSF≠OF有符号小于（&lt;）</span><br></pre></td></tr></table></figure><p>用法</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">setg  reg/mem8   ; 如果比较结果为 &quot;greater&quot;，则设置为 1，否则为 0</span><br><span class="line"></span><br><span class="line">setl  reg/mem8   ; 如果比较结果为 &quot;less&quot;，则设置为 1，否则为 0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">mov eax, 10</span><br><span class="line">mov ebx, 5</span><br><span class="line">cmp eax, ebx    ; 相当于 10 - 5</span><br><span class="line">setg al         ; 因为 10 &gt; 5，al = 1</span><br><span class="line">setl bl         ; 因为 10 &lt; 5 不成立，bl = 0</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">setg / setl 是 有符号数比较</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">指令有符号/无符号等价条件说明</span><br><span class="line">seta无符号(CF = 0) &amp;&amp; (ZF = 0)无符号 a &gt; b</span><br><span class="line">setb无符号CF = 1无符号 a &lt; b</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">指令条件有符号含义</span><br><span class="line">seteZF == 1无关相等（==）</span><br><span class="line">setneZF == 0无关不等（!=）</span><br><span class="line">setgZF == 0 &amp;&amp; SF == OF✅大于（&gt;）</span><br><span class="line">setgeSF == OF✅大于等于（&gt;=）</span><br><span class="line">setlSF != OF✅小于（&lt;）</span><br><span class="line">setle小于或等于(ZF = 1) or (SF ≠ OF)a &lt;= b</span><br><span class="line">setaCF == 0 &amp;&amp; ZF == 0❌无符号大于</span><br><span class="line">setbCF == 1❌无符号小于</span><br></pre></td></tr></table></figure><p><img src="../../themes/pure/source/images/javawz/image-20250717000856364.png" alt="image-20250717000856364"></p><h4 id="shrsarshl"><a class="markdownIt-Anchor" href="#shrsarshl"></a> shr,sar,shl</h4><p><code>shr</code>、<code>sar</code>、<code>shl</code> 是 <strong>x86/x64 汇编指令</strong>中用于**移位操作（bit shift）**的指令，用于对寄存器或内存中的数据执行按位左移或右移。</p><p><img src="../../themes/pure/source/images/javawz/image-20250717000931078.png" alt="image-20250717000931078"></p><h3 id="分支语句"><a class="markdownIt-Anchor" href="#分支语句"></a> 分支语句</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">#include&lt;stdio.h&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">int add(int a, int b)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">return a + b;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">int x, y;</span><br><span class="line">x = 10;</span><br><span class="line">y = 20;</span><br><span class="line"></span><br><span class="line">if (x &gt; y)</span><br><span class="line">&#123;</span><br><span class="line">printf(&quot;x &gt; y&quot;);</span><br><span class="line">&#125;</span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">printf(&quot;x &lt; y&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">int x, y;</span><br><span class="line">x = 10;</span><br><span class="line">00194F18  mov         dword ptr [ebp-8],0Ah  </span><br><span class="line">y = 20;</span><br><span class="line">00194F1F  mov         dword ptr [ebp-14h],14h  </span><br><span class="line"></span><br><span class="line">if (x &gt; y)</span><br><span class="line">00194F26  mov         eax,dword ptr [ebp-8]  </span><br><span class="line">00194F29  cmp         eax,dword ptr [ebp-14h]  </span><br><span class="line">00194F2C  jle         00194F3D  //如果x&lt;=y就会跳转</span><br><span class="line">&#123;</span><br><span class="line">printf(&quot;x &gt; y&quot;);</span><br><span class="line">00194F2E  push        197B30h  </span><br><span class="line">00194F33  call        0019104B  </span><br><span class="line">00194F38  add         esp,4  </span><br><span class="line">&#125;</span><br><span class="line">00194F3B  jmp         00194F4A  </span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">printf(&quot;x &lt; y&quot;);</span><br><span class="line">00194F3D  push        197BD4h  </span><br><span class="line">00194F42  call        0019104B  </span><br><span class="line">00194F47  add         esp,4  </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">00194F4A  xor         eax,eax  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="movzxmovsx指令"><a class="markdownIt-Anchor" href="#movzxmovsx指令"></a> movzx/movsx指令</h3><table><thead><tr><th>指令</th><th>含义</th><th>高位如何填充</th><th>用于哪种数？</th></tr></thead><tbody><tr><td><code>movsx</code></td><td>带符号扩展的移动</td><td>补符号位（最高位）</td><td>✅ 有符号数</td></tr><tr><td><code>movzx</code></td><td>带<strong>零扩展</strong>的移动指令</td><td>全部补 0</td><td>✅ 无符号数</td></tr></tbody></table><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">movzx destination_reg, source_reg/mem</span><br><span class="line">movsx destination_reg, source_reg/mem</span><br></pre></td></tr></table></figure><p><strong>destination_reg</strong>：目标寄存器，必须是 16 位或 32 位或 64 位</p><p><strong>source_reg/mem</strong>：源寄存器或内存，必须是 8 位或 16 位</p><p>会把低位的值复制过来，并将高位 <strong>补 0</strong>或<strong>补符号位</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mov al, 0xFF        ; al = 11111111b = 255</span><br><span class="line">movzx eax, al       ; eax = 000000FFh = 255（32位）</span><br></pre></td></tr></table></figure><h3 id="switch"><a class="markdownIt-Anchor" href="#switch"></a> SWITCH</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">#include&lt;stdio.h&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">int add(int a, int b)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">return a + b;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">int x = 5;</span><br><span class="line"></span><br><span class="line">switch (2)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">case 3:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">break;</span><br><span class="line">case 1:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">break;</span><br><span class="line">case 2:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">break;</span><br><span class="line"></span><br><span class="line">case 4:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">break;</span><br><span class="line">case 100:</span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">break;</span><br><span class="line">default:</span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">break;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="case-数量小于4的时候没有索引表"><a class="markdownIt-Anchor" href="#case-数量小于4的时候没有索引表"></a> case 数量小于4的时候没有索引表</h4><p><img src="../../themes/pure/source/images/javawz/image-20250717021157459.png" alt="image-20250717021157459"></p><h4 id="case数量大于3就会用索引表"><a class="markdownIt-Anchor" href="#case数量大于3就会用索引表"></a> case数量大于3就会用索引表</h4><p>这里减1是因为case数值最小的就是1，如果case最小是100，那么减的就是一百</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">006A189E  sub         ecx,1</span><br></pre></td></tr></table></figure><h5 id="索引表的顺序与case存放的顺序无关索引表的顺序取决于case数值的大小一般数值最小的放在最前面从小到大写入"><a class="markdownIt-Anchor" href="#索引表的顺序与case存放的顺序无关索引表的顺序取决于case数值的大小一般数值最小的放在最前面从小到大写入"></a> 索引表的顺序与case存放的顺序无关，索引表的顺序取决于case数值的大小，一般数值最小的放在最前面，从小到大写入</h5><p>索引值从0开始</p><p>这个程序的索引表是006A192Ch</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">006A18B6  jmp         dword ptr [edx*4+006A192Ch]</span><br></pre></td></tr></table></figure><p><img src="../../themes/pure/source/images/javawz/image-20250717022032412.png" alt="image-20250717022032412"></p><p>case断层也会从最小数值到最大数值按顺序填充索引表</p><p>比如case最小是1,最大是5,中间有2,3,没有4,也会写将4写入索引表中,4的索引表内容是default的地址</p><h4 id="记录索引的索引表"><a class="markdownIt-Anchor" href="#记录索引的索引表"></a> 记录索引的索引表</h4><p>如果case断层距离相差很大,比如有case1,2,3,4,100；5-99都是不存在的，那么会建立一个记录索引的索引表，通过这个记录索引的索引表来查询对应的索引的值，5-99的记录索引的索引表内容就会用default的索引值填充。</p><p>这里的05就是default的索引值。</p><p><img src="../../themes/pure/source/images/javawz/image-20250717025403181.png" alt="image-20250717025403181"></p><p>这个就是索引值表，然后通过索引值去访问跳转索引表</p><p>这个程序一共有两个表，一个是记录索引值的表，一个是索引表</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">movzx       edx,byte ptr [ecx+00C34FDCh]//查找对应的索引值</span><br><span class="line">jmp         dword ptr [edx*4+00C34FC4h]  //通过索引值*4+00C34FC4h找到具体跳转的位置</span><br></pre></td></tr></table></figure><p>这是跳转索引表</p><p><img src="../../themes/pure/source/images/javawz/image-20250717030323733.png" alt="image-20250717030323733"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><span class="line">int x = 5;</span><br><span class="line">00C34F18  mov         dword ptr [ebp-8],5  </span><br><span class="line"></span><br><span class="line">switch (2)</span><br><span class="line">00C34F1F  mov         dword ptr [ebp+FFFFFF30h],2  </span><br><span class="line">00C34F29  mov         eax,dword ptr [ebp+FFFFFF30h]  </span><br><span class="line">00C34F2F  sub         eax,1  </span><br><span class="line">00C34F32  mov         dword ptr [ebp+FFFFFF30h],eax  </span><br><span class="line">00C34F38  cmp         dword ptr [ebp+FFFFFF30h],63h  </span><br><span class="line">00C34F3F  ja          00C34FA0  </span><br><span class="line">00C34F41  mov         ecx,dword ptr [ebp+FFFFFF30h]  </span><br><span class="line">00C34F47  movzx       edx,byte ptr [ecx+00C34FDCh]  </span><br><span class="line">00C34F4E  jmp         dword ptr [edx*4+00C34FC4h]  </span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">case 3:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34F55  push        0C37B30h  </span><br><span class="line">00C34F5A  call        00C3104B  </span><br><span class="line">00C34F5F  add         esp,4  </span><br><span class="line">break;</span><br><span class="line">00C34F62  jmp         00C34FAD  </span><br><span class="line">case 1:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34F64  push        0C37B30h  </span><br><span class="line">00C34F69  call        00C3104B  </span><br><span class="line">00C34F6E  add         esp,4  </span><br><span class="line">break;</span><br><span class="line">00C34F71  jmp         00C34FAD  </span><br><span class="line">case 2:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34F73  push        0C37B30h  </span><br><span class="line">case 2:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34F78  call        00C3104B  </span><br><span class="line">00C34F7D  add         esp,4  </span><br><span class="line">break;</span><br><span class="line">00C34F80  jmp         00C34FAD  </span><br><span class="line"></span><br><span class="line">case 4:</span><br><span class="line"></span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34F82  push        0C37B30h  </span><br><span class="line">00C34F87  call        00C3104B  </span><br><span class="line">00C34F8C  add         esp,4  </span><br><span class="line">break;</span><br><span class="line">00C34F8F  jmp         00C34FAD  </span><br><span class="line">case 100:</span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34F91  push        0C37B30h  </span><br><span class="line">00C34F96  call        00C3104B  </span><br><span class="line">00C34F9B  add         esp,4  </span><br><span class="line">break;</span><br><span class="line">00C34F9E  jmp         00C34FAD  </span><br><span class="line">default:</span><br><span class="line">printf(&quot;1111&quot;);</span><br><span class="line">00C34FA0  push        0C37B30h  </span><br><span class="line">00C34FA5  call        00C3104B  </span><br><span class="line">00C34FAA  add         esp,4  </span><br><span class="line">break;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="循环语句"><a class="markdownIt-Anchor" href="#循环语句"></a> 循环语句</h3><p>在汇编中只要往回跳的大部分都是循环。</p><h4 id="while循环"><a class="markdownIt-Anchor" href="#while循环"></a> while循环</h4><p><img src="../../themes/pure/source/images/javawz/image-20250717054246373.png" alt="image-20250717054246373"></p><h4 id="do-while循环"><a class="markdownIt-Anchor" href="#do-while循环"></a> do while循环</h4><p><img src="../../themes/pure/source/images/javawz/image-20250717054453245.png" alt="image-20250717054453245"></p><p>.</p><h4 id="for循环"><a class="markdownIt-Anchor" href="#for循环"></a> for循环</h4><p><img src="../../themes/pure/source/images/javawz/image-20250717054839328.png" alt="image-20250717054839328"></p><h3 id="windows自动启动注册表"><a class="markdownIt-Anchor" href="#windows自动启动注册表"></a> windows自动启动注册表</h3><table><thead><tr><th>路径</th><th>说明</th><th>适用范围</th></tr></thead><tbody><tr><td><code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</code></td><td><strong>系统级（所有用户）</strong> 开机启动</td><td>对所有用户生效</td></tr><tr><td><code>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run</code></td><td><strong>当前用户</strong> 开机启动</td><td>仅当前登录用户</td></tr><tr><td><code>HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run</code></td><td><strong>32 位程序的启动项（64 位系统上）</strong></td><td>针对 32 位程序</td></tr></tbody></table><table><thead><tr><th>路径</th><th>用途说明</th></tr></thead><tbody><tr><td><code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce</code></td><td>仅在下一次开机时启动一次（常用于安装器）</td></tr><tr><td><code>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce</code></td><td>同上，作用于当前用户</td></tr><tr><td><code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run</code></td><td>管理策略强制启动，较少见</td></tr><tr><td><code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services</code></td><td>注册服务（比启动项更早启动）</td></tr><tr><td><code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components</code></td><td>某些程序开机初始化使用</td></tr><tr><td><code>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit</code></td><td>控制用户登录后启动的程序，常用于系统级后门</td></tr></tbody></table><h2 id="数组"><a class="markdownIt-Anchor" href="#数组"></a> 数组</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">#include&lt;stdio.h&gt;</span><br><span class="line">#include&lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">char c[10] = &#123; &apos;1&apos; &#125;;</span><br><span class="line"></span><br><span class="line">printf(&quot;%d&quot;,sizeof c);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>申请10个字节的数组分配了12个字节,是因为内存默认是以4字节对齐的12是4的倍数。</p><p><img src="../../themes/pure/source/images/javawz/image-20250720014141813.png" alt="image-20250720014141813"></p><p>局部变量数组是从右到左入栈的，数值10放在栈底，数值1放在栈顶。</p><p><img src="../../themes/pure/source/images/javawz/image-20250720014515937.png" alt="image-20250720014515937"></p><h4 id="缓冲区溢出"><a class="markdownIt-Anchor" href="#缓冲区溢出"></a> 缓冲区溢出</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">#include&lt;stdio.h&gt;</span><br><span class="line">#include&lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">void Fun()</span><br><span class="line">&#123;</span><br><span class="line">while (1) &#123;</span><br><span class="line">printf(&quot;111\n&quot;);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">int yichu() &#123;</span><br><span class="line"></span><br><span class="line">int a[8] = &#123; 1,2 &#125;;</span><br><span class="line"></span><br><span class="line">a[9] = (int)Fun;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">yichu();</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>因为a[7]==ebp-4,a[8] ==ebp,a[9] == ebp+4。刚刚好ebp+4等于返回地址，所以a[9] = (int)Fun覆盖原来的返回地址</p><p><img src="../../themes/pure/source/images/javawz/image-20250720015306862.png" alt="image-20250720015306862"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">a[9] = (int)Fun;</span><br></pre></td></tr></table></figure><h4 id="imul"><a class="markdownIt-Anchor" href="#imul"></a> imul</h4><table><thead><tr><th>用法形式</th><th>示例</th><th>说明</th></tr></thead><tbody><tr><td><code>imul r/m32</code></td><td><code>imul eax</code></td><td>隐式用 <code>eax</code> 和 <code>r/m32</code> 相乘，结果在 <code>edx:eax</code></td></tr><tr><td><code>imul reg32, r/m32</code></td><td><code>imul eax, ebx</code></td><td><code>eax = eax * ebx</code></td></tr><tr><td><code>imul reg32, r/m32, imm</code></td><td><code>imul eax, ebx, 10</code></td><td><code>eax = ebx * 10</code></td></tr></tbody></table><h5 id="单操作数形式"><a class="markdownIt-Anchor" href="#单操作数形式"></a> 单操作数形式</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mov eax, 3</span><br><span class="line">imul dword ptr [ebx] ; eax * [ebx]，结果在 edx:eax</span><br></pre></td></tr></table></figure><p><code>imul</code> 自动使用 <code>eax</code> 和操作数相乘，结果 64 位存在 <code>edx:eax</code>。</p><h5 id="双操作数形式"><a class="markdownIt-Anchor" href="#双操作数形式"></a> 双操作数形式</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">imul eax, ebx ; eax = eax * ebx</span><br></pre></td></tr></table></figure><p>只保留 32 位结果，溢出会导致结果错误，但不会引发异常。</p><h5 id="三操作数形式"><a class="markdownIt-Anchor" href="#三操作数形式"></a> 三操作数形式</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">imul eax, ebx, 100 ; eax = ebx * 100</span><br></pre></td></tr></table></figure><p>常用于计算偏移量，例如数组索引乘元素大小。</p><h5 id="标志位影响"><a class="markdownIt-Anchor" href="#标志位影响"></a> 标志位影响</h5><ul><li><strong>OF（溢出标志）</strong> 和 <strong>CF（进位标志）</strong>：<ul><li>如果结果超出目标寄存器大小，这两个标志会被置位。</li></ul></li><li><strong>ZF/SF/PF</strong>：不受影响。</li></ul><h2 id="结构体"><a class="markdownIt-Anchor" href="#结构体"></a> 结构体</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">#include&lt;stdio.h&gt;</span><br><span class="line">#include&lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">struct MY &#123;</span><br><span class="line">char a;</span><br><span class="line">char b;</span><br><span class="line">int c;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">struct MY m = &#123; &apos;a&apos;,&apos;b&apos;,123 &#125;;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>结构体的局部变量也是从右到左入栈的</p><p><img src="../../themes/pure/source/images/javawz/image-20250720022159025.png" alt="image-20250720022159025"></p><h2 id="字节对齐"><a class="markdownIt-Anchor" href="#字节对齐"></a> 字节对齐</h2><p>什么是字节对齐?</p><p><img src="../../themes/pure/source/images/javawz/image-20250720021205296.png" alt="image-20250720021205296"></p><h4 id="pragma-pack字节对齐数"><a class="markdownIt-Anchor" href="#pragma-pack字节对齐数"></a> #pragma pack(字节对齐数)</h4><p><img src="../../themes/pure/source/images/javawz/image-20250720021520579.png" alt="image-20250720021520579"></p><p>结构体的总大小: Min(某个成员的最大字节数,对齐参数)的倍数</p><p>例如</p><p>MY结构体的总大小是Min(4,1)的倍数,也就是1的倍数,因为最大是int 4个字节,对齐参数是1</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">#pragma pack(1)</span><br><span class="line">struct MY &#123;</span><br><span class="line">char a;</span><br><span class="line">char b;</span><br><span class="line">int c;</span><br><span class="line">&#125;;</span><br><span class="line">#pragma pack()</span><br></pre></td></tr></table></figure><p><img src="../../themes/pure/source/images/javawz/image-20250720024627330.png" alt="image-20250720024627330"></p><h2 id="结构体数组"><a class="markdownIt-Anchor" href="#结构体数组"></a> 结构体数组</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">#include&lt;stdio.h&gt;</span><br><span class="line">#include&lt;windows.h&gt;</span><br><span class="line">#pragma pack(1)</span><br><span class="line">struct MY &#123;</span><br><span class="line">char a;</span><br><span class="line">char b;</span><br><span class="line">int c;</span><br><span class="line">&#125;;</span><br><span class="line">#pragma pack()</span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">struct MY m[3] = &#123;</span><br><span class="line">&#123;&apos;a&apos;,&apos;b&apos;,123&#125;,</span><br><span class="line">&#123;&apos;a&apos;,&apos;b&apos;,123&#125;,</span><br><span class="line">&#123;&apos;a&apos;,&apos;b&apos;,123&#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="../../themes/pure/source/images/javawz/image-20250720025036339.png" alt="image-20250720025036339"></p><h2 id="指针类型"><a class="markdownIt-Anchor" href="#指针类型"></a> 指针类型</h2><h4 id="指针宽度"><a class="markdownIt-Anchor" href="#指针宽度"></a> 指针宽度</h4><p>如果是64位程序,指针类型的宽度是8字节,如果是32位程序,指针类型的宽度是4字节</p><p><img src="../../themes/pure/source/images/javawz/image-20250722041819898.png" alt="image-20250722041819898"></p><p><img src="../../themes/pure/source/images/javawz/image-20250722041914159.png" alt="image-20250722041914159"></p><p><img src="../../themes/pure/source/images/javawz/image-20250722042001400.png" alt="image-20250722042001400"></p><h2 id="取地址符"><a class="markdownIt-Anchor" href="#取地址符"></a> 取地址符</h2><p>1、&amp;是取地址符，任何变量都可以使用&amp;来获取地址，但不能用在常量上。</p><p>2、探测&amp;变量 的类型</p><p><img src="../../themes/pure/source/images/javawz/image-20250722042414001.png" alt="image-20250722042414001"></p><h2 id="取值运算符"><a class="markdownIt-Anchor" href="#取值运算符"></a> 取值运算符</h2><p><img src="../../themes/pure/source/images/javawz/image-20250722043358070.png" alt="image-20250722043358070"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">*加指针类型的类型是指针类型减去一个*</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;c语言的汇编表示方式&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#c语言的汇编表示方式&quot;&gt;&lt;/a&gt; C语言的汇编表示方式&lt;/h3&gt;
&lt;p&gt;在C语言里插入汇编&lt;/p&gt;
&lt;figure class=&quot;highlight c&quot;&gt;&lt;table
      
    
    </summary>
    
      <category term="逆向工程" scheme="https://xiaowuyoucy.github.io/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>PE文件格式</title>
    <link href="https://xiaowuyoucy.github.io/2024/12/22/PE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F/"/>
    <id>https://xiaowuyoucy.github.io/2024/12/22/PE文件格式/</id>
    <published>2024-12-22T10:36:53.000Z</published>
    <updated>2024-12-24T16:00:38.675Z</updated>
    
    <content type="html"><![CDATA[<p>PE文件是Windows操作系统下使用的可执行文件格式。</p><p>PE文件是指32位的可执行文件，也称为PE32，64位的可执行文件称为PE+或PE32+，是PE（PE32）文件的一种扩展形式（请注意不是PE64）</p><p><img src="../../themes/pure/source/images/javawz/image-20241222184954829.png" alt="image-20241222184954829"></p><h3 id="基本结构"><a class="markdownIt-Anchor" href="#基本结构"></a> 基本结构</h3><p>从DOS头（DOS header ）到节区头（Section header）是PE头部分，其下的节区合称PE体。文件中使用偏移（offset），内存中使用VA （Virtual Address，虚拟地址）来表示位置。文件加载到内存时，情况就会发生变化（节区的大小、位置等）。文件的内容一般可分为代码（.text）、数据（.data）、资源（.rsrc）节，分别保存。</p><p>PE头与各节区的尾部存在一个区域，称为NULL填充（NULL padding）。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222185736379.png" alt="image-20241222185736379"></p><h3 id="varva"><a class="markdownIt-Anchor" href="#varva"></a> VA&amp;RVA</h3><p>VA指的是进程虚拟内存的绝对地址， RVA （ Relative Virtual Address，相对虚拟地址）指从某个基准位置（ImageBase ）开始的相对地址。VA与RVA满足下面的换算关系。</p><h4 id="rvaimagebaseva"><a class="markdownIt-Anchor" href="#rvaimagebaseva"></a> RVA+ImageBase=VA</h4><h4 id="rva-va-imagebase"><a class="markdownIt-Anchor" href="#rva-va-imagebase"></a> RVA = VA - ImageBase</h4><h4 id="提示"><a class="markdownIt-Anchor" href="#提示"></a> 提示</h4><p>32位Windows OS中，各进程分配有4GB的虚拟内存，因此进程中VA值的范围是00000000-FFFFFFFF。</p><h3 id="dos-头"><a class="markdownIt-Anchor" href="#dos-头"></a> DOS 头</h3><h4 id="image_dos_header结构体"><a class="markdownIt-Anchor" href="#image_dos_header结构体"></a> IMAGE_DOS_HEADER结构体</h4><p><img src="../../themes/pure/source/images/javawz/image-20241222190312521.png" alt="image-20241222190312521"></p><p>IMAGE_DOS_HEADER结构体的大小为40个字节。</p><p>2个重要成员：e_magic与e_lfanew。</p><p>e-magic：DOS签名（signature，4D5A=&gt;ASCII值&quot;MZ&quot;）。<br>e_lfanew：指示NT头的偏移（根据不同文件拥有可变值）。</p><h3 id="nt-头"><a class="markdownIt-Anchor" href="#nt-头"></a> NT 头</h3><h4 id="nt头image_nt_headers"><a class="markdownIt-Anchor" href="#nt头image_nt_headers"></a> NT头IMAGE_NT_HEADERS。</h4><p><img src="../../themes/pure/source/images/javawz/image-20241222190650117.png" alt="image-20241222190650117"></p><p>IMAGE_NT_HEADERS结构体由3个成员组成，</p><p>第一个成员为签名（Signature）结构体，其值为50450000h（&quot;PE&quot;00）。</p><p>另外两个成员分别为文件头（File Header）与可选头（Optional Header）结构体。</p><p>IMAGE_NT_HEADERS结构体的大小为F8</p><h3 id="文件头"><a class="markdownIt-Anchor" href="#文件头"></a> 文件头</h3><p>文件头是表现文件大致属性的IMAGE_FILE_HEADER结构体。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222191805080.png" alt="image-20241222191805080"></p><p>IMAGE_FILE_HEADERS结构体中有如下4个重要成员（若它们设置不正确，将导致文件无法正常运行）。</p><p>#1.Machine</p><p>每个CPU都拥有唯一的Machine码，兼容32位Intel x86芯片的Machine码为14C，以下是定义在winnt.h文件中的Machine码。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222192006695.png" alt="image-20241222192006695"><img src="../../themes/pure/source/images/javawz/image-20241222192019054.png" alt="image-20241222192019054"></p><p>#2.NumberOfSections<br>NumberOfSections用来指出文件中存在的节区数量。该值一定要大于0，且当定义的节区数量与实际节区不同时，将发生运行错误。</p><p>#3.SizeOfOptionalHeader</p><p>SizeOfOptionalHeader成员用来指出IMAGE_OPTIONAL_HEADER32或IMAGE_OPTIONAL_HEADER64结构体的长度。</p><p>#4.Characteristics</p><p>该字段用于标识文件的属性，文件是否是可运行的形态、是否为DLL文件等信息，以bit OR形式组合起来。<br>以下是定义在winnt.h文件中的Characteristics值（请记住0002h与2000h这两个值）。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222192512799.png" alt="image-20241222192512799"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222192531671.png" alt="image-20241222192531671"></p><p>IMAGE_FILE_HEADER的TimeDateStamp成员。该成员的值不影响文件运行，用来记录编译器创建此文件的时间。</p><h3 id="可选头"><a class="markdownIt-Anchor" href="#可选头"></a> 可选头</h3><p>IMAGE_OPTIONAL_HEADER32是PE头结构体中最大的。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222195047222.png" alt="image-20241222195047222"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222195116000.png" alt="image-20241222195116000"></p><p>下面这些值是文件运行必需的，设置错误将导致文件无法正常运行。</p><h4 id="1magic"><a class="markdownIt-Anchor" href="#1magic"></a> #1.Magic</h4><p>为IMAGE_OPTIONAL_HEADER32结构体时，Magic码为10B；为IMAGE_OPTIONAL_<br>HEADER64结构体时，Magic码为20B。</p><h5 id="2addressofentrypoint"><a class="markdownIt-Anchor" href="#2addressofentrypoint"></a> #2.AddressOfEntryPoint</h5><p>AddressOfEntryPoint持有EP的RVA值。该值指出程序最先执行的代码起始地址，相当重要。</p><h5 id="3imagebase"><a class="markdownIt-Anchor" href="#3imagebase"></a> #3.ImageBase</h5><p>进程虚拟内存的范围是0-FFFFFFFF（32位系统）。PE文件被加载到如此大的内存中时，ImageBase指出文件的优先装入地址。<br>EXE、DLL文件被装载到用户内存的0-7FFFFFFF中，SYS文件被载入内核内存的80000000-FFFFFFFF中。一般而言，使用开发工具（VB/VC++/Delphi）创建好EXE文件后，其ImageBase的值为00400000，DLL文件的ImageBase值为10000000（当然也可以指定为其他值）。<br>执行PE文件时，PE装载器先创建进程，再将文件载入内存，然后把EIP寄存器的值设置为ImageBase+AddressOfEntryPoint。</p><h5 id="4sectionalignmentfilealignment"><a class="markdownIt-Anchor" href="#4sectionalignmentfilealignment"></a> #4.SectionAlignment，FileAlignment</h5><p>FileAlignment指定了节区在磁盘文件中的最小单位，而SectionAlignment则指定了节区在内存中的最小单位（一个文件中，FileAlignment与SectionAlignment的值可能相同，也可能不同）。磁盘文件或内存的节区大小必定为FileAlignment或SectionAlignment值的整数倍。</p><h5 id="5sizeoflmage"><a class="markdownIt-Anchor" href="#5sizeoflmage"></a> #5.SizeOflmage</h5><p>加载PE文件到内存时，SizeOfImage指定了PE Image在虚拟内存中所占空间的大小。</p><p>它表示PE文件加载到内存时占用的虚拟内存空间的总大小。</p><p>该大小是从<strong>ImageBase</strong>（PE文件加载的基地址）开始，涵盖文件所有加载到内存的部分，包括所有节（Sections）以及对齐到内存页的额外空间。</p><h5 id="6sizeofheader"><a class="markdownIt-Anchor" href="#6sizeofheader"></a> #6.SizeOfHeader</h5><p>SizeOfHeader用来指出整个PE头的大小。该值也必须是FileAlignment的整数倍。</p><h5 id="7subsystem"><a class="markdownIt-Anchor" href="#7subsystem"></a> #7.Subsystem</h5><p>该Subsystem值用来区分系统驱动文件（<em>.sys）与普通的可执行文件（</em>.exe，*.dll）。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222201436438.png" alt="image-20241222201436438"></p><h5 id="8numberofrvaandsizes"><a class="markdownIt-Anchor" href="#8numberofrvaandsizes"></a> #8.NumberOfRvaAndSizes</h5><p>NumberOfRvaAndSizes用来指定DataDirectory（IMAGE_OPTIONAL_HEADER32结构体的最后一个成员）数组的个数。</p><p>#9.DataDirectory</p><p>DataDirectory是由IMAGE_DATA_DIRECTORY结构体组成的数组，数组的每项都有被定义的值。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222202640512.png" alt="image-20241222202640512"></p><h5 id="计算-datadirectory-的偏移"><a class="markdownIt-Anchor" href="#计算-datadirectory-的偏移"></a> <strong>计算 <code>DataDirectory</code> 的偏移</strong></h5><ul><li>在可选头中：<ul><li>如果是 32 位文件，<code>IMAGE_OPTIONAL_HEADER32</code> 的 <code>DataDirectory</code> 起始位置是结构体的第 96 字节处。</li><li>如果是 64 位文件，<code>IMAGE_OPTIONAL_HEADER64</code> 的 <code>DataDirectory</code> 起始位置是结构体的第 112 字节处。</li></ul></li></ul><h3 id="节区头"><a class="markdownIt-Anchor" href="#节区头"></a> 节区头</h3><p>节区头中定义了各节区属性。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222222230122.png" alt="image-20241222222230122"></p><p>IMAGE_SECTION_HEADER节区头是由IMAGE_SECTION_HEADER结构体组成的数组，每个结构体对应一个节区。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222222324949.png" alt="image-20241222222324949"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222222344290.png" alt="image-20241222222344290"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222222548982.png" alt="image-20241222222548982"></p><p>Name成员不像C语言中的字符串一样以NULL结束，并且没有“必须使用ASCII值”的限制。</p><h3 id="rva-to-raw"><a class="markdownIt-Anchor" href="#rva-to-raw"></a> RVA to RAW</h3><p>PE文件加载到内存时，每个节区都要能准确完成内存地址与文件偏移间的映射。这种映射一般称为RVA to RAW，方法如下。<br>（1）查找RVA所在节区。<br>（2）使用简单的公式计算文件偏移（RAW）。<br>根据IMAGE_SECTION_HEADER结构体，换算公式如下：</p><p><img src="../../themes/pure/source/images/javawz/image-20241222223132866.png" alt="image-20241222223132866"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222223543781.png" alt="image-20241222223543781"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222223414043.png" alt="image-20241222223414043"></p><h3 id="iat"><a class="markdownIt-Anchor" href="#iat"></a> IAT</h3><p>IAT（Import Address Table，导入地址表）。</p><p>IAT是一种表格，用来记录程序正在使用哪些库中的哪些函数。</p><h3 id="dll"><a class="markdownIt-Anchor" href="#dll"></a> DLL</h3><p>DLL（Dynamic Linked Library）</p><p>DLL翻译成中文为“动态链接库”</p><p>DLL文件的ImageBase值一般为10000000。</p><p>加载DLL的方式实际有两种：一种是“显式链接”（Explicit Linking），程序使用DLL时加载，使用完毕后释放内存；另一种是“隐式链接”（Implicit Linking），程序开始时即一同加载DLL，程序终止时再释放占用的内存。</p><p>IAT提供的机制即与隐式链接有关。</p><p>实际操作中无法保证DLL一定会被加载到PE头内指定的ImageBase处。但是EXE文件（生成进程的主体）却能准确加载到自身的ImageBase中，因为它拥有自已的虚拟空间。</p><h3 id="image_import_descriptor"><a class="markdownIt-Anchor" href="#image_import_descriptor"></a> IMAGE_IMPORT_DESCRIPTOR</h3><p>IMAGE_IMPORT_DESCRIPTOR结构体中记录着PE文件要导入哪些库文件。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222225123884.png" alt="image-20241222225123884"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222225146644.png" alt="image-20241222225146644"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222225432947.png" alt="image-20241222225432947"></p><p>执行一个普通程序时往往需要导入多个库，导入多少库就存在多少个IMAGE_IMPORT_DESCRIPTOR结构体，这些结构体形成了数组，且结构体数组最后以NULL结构体结束。</p><p>PE头中提到的“Table”即指数组。<br>INT与IAT是长整型（4个字节数据类型）数组，以NULL结束（未另外明确指出大小）。<br>INT中各元素的值为IMAGE_IMPORT_BY_NAME结构体指针（有时IAT也拥有相同的值）。<br>INT与IAT的大小应相同。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222232418916.png" alt="image-20241222232418916"></p><p><img src="../../themes/pure/source/images/javawz/image-20241222232502792.png" alt="image-20241222232502792"></p><p>IMAGE_IMPORT_DESCRIPTOR结构体数组位于IMAGE-OPTIONAL_HEADER32.DataDirectory[1].VirtualAddress的值即是IMAGE_IMPORT_DESCRIPTOR结构体数组的起始地址（RVA值），IMAGE_IMPORT_DESCRIPTOR结构体数组也被称为IMPORT Directory Table（了解上述全部称谓，与他人交流时才能没有障碍）。</p><p>IMAGE_OPTIONAL_HEADER32.DataDirectory[1]结构体的值如图13-12所示（第一个4字节为虚拟地址，第二个4字节为Size成员）。</p><p><img src="../../themes/pure/source/images/javawz/image-20241222232846688.png" alt="image-20241222232846688"></p><p><img src="../../themes/pure/source/images/javawz/image-20241224234117804.png" alt="image-20241224234117804"></p><p>阴影部分即为全部的IMAGE_IMPORT_DESCRIPTOR结构体数组，粗线框内的部分是结构体数组的第一个元素（也可以看到数组的最后是由NULL结构体组成的）。</p><p><img src="../../themes/pure/source/images/javawz/image-20241224234204502.png" alt="image-20241224234204502"></p><h5 id="1库名称name"><a class="markdownIt-Anchor" href="#1库名称name"></a> 1.库名称（Name）</h5><p>Name是一个字符串指针，它指向导入函数所属的库文件名称。</p><p><img src="../../themes/pure/source/images/javawz/image-20241224234322508.png" alt="image-20241224234322508"></p><h5 id="2originalfirstthunk-int"><a class="markdownIt-Anchor" href="#2originalfirstthunk-int"></a> 2.OriginalFirstThunk-INT</h5><p>INT是一个包含导入函数信息（Ordinal，Name）的结构体指针数组。只有获得了这些信息，才能在加载到进程内存的库中准确求得相应函数的起始地址</p><p>INT由地址数组形式组成（数组尾部以NULL结束）。每个地址值分别指向IMAGE_IMPORT_BY_NAME结构体</p><p><img src="../../themes/pure/source/images/javawz/image-20241224234448401.png" alt="image-20241224234448401"></p><h5 id="3image_import_by_name"><a class="markdownIt-Anchor" href="#3image_import_by_name"></a> 3.IMAGE_IMPORT_BY_NAME</h5><p>文件偏移6E7A最初的2个字节值（000F）为Ordinal，是库中函数的固有编号。Ordinal的后面为函数名称字符串PageSetupDigW（同C语言一样，字符串末尾以<code>'\0'</code>结束）。</p><p>数组的第一个元素指向函数的Ordinal值000F，函数的名称为PageSetupDigW。</p><p><img src="../../themes/pure/source/images/javawz/image-20241224234909644.png" alt="image-20241224234909644"></p><h5 id="4-firstthunk-iat-import-address-table"><a class="markdownIt-Anchor" href="#4-firstthunk-iat-import-address-table"></a> 4. FirstThunk -IAT (Import Address Table)</h5><p><img src="../../themes/pure/source/images/javawz/image-20241224235327970.png" alt="image-20241224235327970"></p><p>文件偏移6C4-6EB区域即为IAT数组区域，对应于comdlg32.d11库。它与INT类似，由结构体指针数组组成，且以NULL结尾。<br>IAT的第一个元素值被硬编码为76324906，该值无实际意义，notepad.exe文件加载到内存时，准确的地址值会取代该值。</p><p><img src="../../themes/pure/source/images/javawz/image-20241224235517816.png" alt="image-20241224235517816"></p><p>notepad.exe的ImageBase值为01000000。所以comdlg32.dll!PageSetupDlgW函数的IAT地址为010012C4，其值为76324906，它是API准确的起始地址值。</p><p>进入76324906地址中</p><p><img src="../../themes/pure/source/images/javawz/image-20241225000021700.png" alt="image-20241225000021700"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;PE文件是Windows操作系统下使用的可执行文件格式。&lt;/p&gt;
&lt;p&gt;PE文件是指32位的可执行文件，也称为PE32，64位的可执行文件称为PE+或PE32+，是PE（PE32）文件的一种扩展形式（请注意不是PE64）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../the
      
    
    </summary>
    
      <category term="逆向工程核心原理" scheme="https://xiaowuyoucy.github.io/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B%E6%A0%B8%E5%BF%83%E5%8E%9F%E7%90%86/"/>
    
    
  </entry>
  
  <entry>
    <title>day1</title>
    <link href="https://xiaowuyoucy.github.io/2024/10/22/JS00025day1/"/>
    <id>https://xiaowuyoucy.github.io/2024/10/22/JS00025day1/</id>
    <published>2024-10-21T20:42:40.000Z</published>
    <updated>2026-03-14T09:07:33.935Z</updated>
    
    <content type="html"><![CDATA[<h2 id="运算符的优先级"><a class="markdownIt-Anchor" href="#运算符的优先级"></a> 运算符的优先级</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * , 运算符</span><br><span class="line"> * 使用,可以分割多个语句，一般可以在声明多个变量时使用,</span><br><span class="line"> */</span><br><span class="line">//使用,运算符同时声明多个变量</span><br><span class="line">//var a , b , c;</span><br><span class="line"></span><br><span class="line">//可以同时声明多个变量并赋值</span><br><span class="line">//var a=1 , b=2 , c=3;</span><br><span class="line">//alert(b);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 就和数学中一样，在JS中运算符也有优先级，</span><br><span class="line"> * 比如：先乘除 后加减</span><br><span class="line"> * 在JS中有一个运算符优先级的表，</span><br><span class="line"> * 在表中越靠上优先级越高，优先级越高越优先计算，</span><br><span class="line"> * 如果优先级一样，则从左往右计算。</span><br><span class="line"> * 但是这个表我们并不需要记忆，如果遇到优先级不清楚</span><br><span class="line"> * 可以使用()来改变优先级</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//var result = 1 + 2 * 3;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 如果||的优先级高，或者两个一样高，则应该返回3</span><br><span class="line"> * 如果与的优先级高，则应该返回1</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">var result = 1 || 2 &amp;&amp; 3;</span><br><span class="line"></span><br><span class="line">console.log(&quot;result = &quot;+result);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="代码块"><a class="markdownIt-Anchor" href="#代码块"></a> 代码块</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 我们的程序是由一条一条语句构成的</span><br><span class="line"> * 语句是按照自上向下的顺序一条一条执行的</span><br><span class="line"> * 在JS中可以使用&#123;&#125;来为语句进行分组,</span><br><span class="line"> * 同一个&#123;&#125;中的语句我们称为是一组语句，</span><br><span class="line"> * 它们要么都执行，要么都不执行，</span><br><span class="line"> * 一个&#123;&#125;中的语句我们也称为叫一个代码块</span><br><span class="line"> * 在代码块的后边就不用再编写;了</span><br><span class="line"> * </span><br><span class="line"> * JS中的代码块，只具有分组的的作用，没有其他的用途</span><br><span class="line"> * 代码块内容的内容，在外部是完全可见的</span><br><span class="line"> */</span><br><span class="line">&#123;</span><br><span class="line">var a = 10;</span><br><span class="line">alert(&quot;hello&quot;);</span><br><span class="line">console.log(&quot;你好&quot;);</span><br><span class="line">document.write(&quot;语句&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">console.log(&quot;a = &quot;+a);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="流程控制语句"><a class="markdownIt-Anchor" href="#流程控制语句"></a> 流程控制语句</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 流程控制语句</span><br><span class="line"> * - JS中的程序是从上到下一行一行执行的</span><br><span class="line"> * - 通过流程控制语句可以控制程序执行流程，</span><br><span class="line"> * 使程序可以根据一定的条件来选择执行</span><br><span class="line"> *  - 语句的分类：</span><br><span class="line"> * 1.条件判断语句</span><br><span class="line"> * 2.条件分支语句</span><br><span class="line"> * 3.循环语句</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> * 条件判断语句：</span><br><span class="line"> * - 使用条件判断语句可以在执行某个语句之前进行判断，</span><br><span class="line"> * 如果条件成立才会执行语句，条件不成立则语句不执行。</span><br><span class="line"> *  - if语句</span><br><span class="line"> * - 语法一：</span><br><span class="line"> * if(条件表达式)&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;</span><br><span class="line"> * </span><br><span class="line"> * if语句在执行时，会先对条件表达式进行求值判断，</span><br><span class="line"> * 如果条件表达式的值为true，则执行if后的语句，</span><br><span class="line"> * 如果条件表达式的值为false，则不会执行if后的语句。</span><br><span class="line"> * if语句只能控制紧随其后的那个语句,</span><br><span class="line"> * 如果希望if语句可以控制多条语句，</span><br><span class="line"> * 可以将这些语句统一放到代码块中</span><br><span class="line"> * if语句后的代码块不是必须的，但是在开发中尽量写上代码块，即使if后只有一条语句</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var a = 25;</span><br><span class="line"></span><br><span class="line">if(a &gt; 10 &amp;&amp; a &lt;= 20)&#123;</span><br><span class="line">alert(&quot;a大于10，并且 a小于等于20&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="if语句"><a class="markdownIt-Anchor" href="#if语句"></a> if语句</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * if语句</span><br><span class="line"> * 语法二:</span><br><span class="line"> * if(条件表达式)&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;else&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;</span><br><span class="line"> * </span><br><span class="line"> * if...else...语句</span><br><span class="line"> * 当该语句执行时，会先对if后的条件表达式进行求值判断，</span><br><span class="line"> * 如果该值为true，则执行if后的语句</span><br><span class="line"> * 如果该值为false，则执行else后的语句</span><br><span class="line"> * </span><br><span class="line"> * 语法三：</span><br><span class="line"> * if(条件表达式)&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;else if(条件表达式)&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;else if(条件表达式)&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;else&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;</span><br><span class="line"> * </span><br><span class="line"> * if...else if...else</span><br><span class="line"> * 当该语句执行时，会从上到下依次对条件表达式进行求值判断</span><br><span class="line"> * 如果值为true，则执行当前语句。</span><br><span class="line"> * 如果值为false，则继续向下判断。</span><br><span class="line"> * 如果所有的条件都不满足，则执行最后一个else后的语句</span><br><span class="line"> * 该语句中，只会有一个代码块被执行，一旦代码块执行了，则直接结束语句</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var age = 50;</span><br><span class="line"></span><br><span class="line">/*if(age &gt;= 60)&#123;</span><br><span class="line">alert(&quot;你已经退休了~~&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">alert(&quot;你还没退休~~~&quot;);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">age = 200;</span><br><span class="line"></span><br><span class="line">/*if(age &gt; 100)&#123;</span><br><span class="line">alert(&quot;活着挺没意思的~~&quot;);</span><br><span class="line">&#125;else if(age &gt; 80)&#123;</span><br><span class="line">alert(&quot;你也老大不小的了~~&quot;);</span><br><span class="line">&#125;else if(age &gt; 60)&#123;</span><br><span class="line">alert(&quot;你也退休了~~&quot;);</span><br><span class="line">&#125;else if(age &gt; 30)&#123;</span><br><span class="line">alert(&quot;你已经中年了~~&quot;);</span><br><span class="line">&#125;else if(age &gt; 17)&#123;</span><br><span class="line">alert(&quot;你已经成年了&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">alert(&quot;你还是个小孩子~~&quot;);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">age = 90;</span><br><span class="line"></span><br><span class="line">if(age &gt; 17 &amp;&amp; age &lt;= 30)&#123;</span><br><span class="line">alert(&quot;你已经成年了&quot;);</span><br><span class="line">&#125;else if(age &gt; 30 &amp;&amp; age &lt;= 60)&#123;</span><br><span class="line">alert(&quot;你已经中年了&quot;);</span><br><span class="line">&#125;else if(age &gt; 60 &amp;&amp; age &lt;= 80)&#123;</span><br><span class="line">alert(&quot;你已经退休了&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">alert(&quot;你岁数挺大的了~~&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="条件分支语句"><a class="markdownIt-Anchor" href="#条件分支语句"></a> 条件分支语句</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 条件分支语句也叫switch语句</span><br><span class="line"> * 语法：</span><br><span class="line"> * switch(条件表达式)&#123;</span><br><span class="line"> * case 表达式:</span><br><span class="line"> * 语句...</span><br><span class="line"> * break;</span><br><span class="line"> *  case 表达式:</span><br><span class="line"> * 语句...</span><br><span class="line"> * break;</span><br><span class="line"> * default:</span><br><span class="line"> * 语句...</span><br><span class="line"> * break;</span><br><span class="line"> * &#125;</span><br><span class="line"> * </span><br><span class="line"> * 执行流程：</span><br><span class="line"> * switch...case..语句</span><br><span class="line"> * 在执行时会依次将case后的表达式的值和switch后的条件表达式的值进行全等比较，</span><br><span class="line"> * 如果比较结果为true，则从当前case处开始执行代码。</span><br><span class="line"> * 当前case后的所有的代码都会执行，我们可以在case的后边跟着一个break关键字，</span><br><span class="line"> * 这样可以确保只会执行当前case后的语句，而不会执行其他的case</span><br><span class="line"> * 如果比较结果为false，则继续向下比较</span><br><span class="line"> * 如果所有的比较结果都为false，则只执行default后的语句</span><br><span class="line"> * </span><br><span class="line"> * switch语句和if语句的功能实际上有重复的，使用switch可以实现if的功能，</span><br><span class="line"> * 同样使用if也可以实现switch的功能，所以我们使用时，可以根据自己的习惯选择。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//根据num的值，输出对应的中文</span><br><span class="line"></span><br><span class="line">var num = 3;</span><br><span class="line"></span><br><span class="line">/*if(num == 1)&#123;</span><br><span class="line">console.log(&quot;壹&quot;);</span><br><span class="line">&#125;else if(num == 2)&#123;</span><br><span class="line">console.log(&quot;贰&quot;);</span><br><span class="line">&#125;else if(num == 3)&#123;</span><br><span class="line">console.log(&quot;叁&quot;);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">num = &quot;hello&quot;;</span><br><span class="line"></span><br><span class="line">switch(num)&#123;</span><br><span class="line">case 1:</span><br><span class="line">console.log(&quot;壹&quot;);</span><br><span class="line">//使用break可以来退出switch语句</span><br><span class="line">break;</span><br><span class="line">case 2:</span><br><span class="line">console.log(&quot;贰&quot;);</span><br><span class="line">break;</span><br><span class="line">case 3:</span><br><span class="line">console.log(&quot;叁&quot;);</span><br><span class="line">break;</span><br><span class="line">default:</span><br><span class="line">console.log(&quot;非法数字~~&quot;);</span><br><span class="line">break;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="循环语句"><a class="markdownIt-Anchor" href="#循环语句"></a> 循环语句</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 向页面中输出连续的数字</span><br><span class="line"> */</span><br><span class="line">/*var n = 1;</span><br><span class="line">document.write(n++ +&quot;&lt;br /&gt;&quot;);*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 循环语句：</span><br><span class="line"> * 通过循环语句可以反复的执行一段代码多次</span><br><span class="line"> * </span><br><span class="line"> * while循环</span><br><span class="line"> * - 语法：</span><br><span class="line"> * while(条件表达式)&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;</span><br><span class="line"> * </span><br><span class="line"> * - while语句在执行时，</span><br><span class="line"> * 先对条件表达式进行求值判断，</span><br><span class="line"> * 如果值为true，则执行循环体，</span><br><span class="line"> * 循环体执行完毕以后，继续对表达式进行判断</span><br><span class="line"> * 如果为true，则继续执行循环体，以此类推</span><br><span class="line"> * 如果值为false，则终止循环</span><br><span class="line"> * </span><br><span class="line"> * do...while循环</span><br><span class="line"> * - 语法：</span><br><span class="line"> * do&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;while(条件表达式)</span><br><span class="line"> * </span><br><span class="line"> * - 执行流程：</span><br><span class="line"> * do...while语句在执行时，会先执行循环体，</span><br><span class="line"> * 循环体执行完毕以后，在对while后的条件表达式进行判断，</span><br><span class="line"> * 如果结果为true，则继续执行循环体，执行完毕继续判断以此类推</span><br><span class="line"> * 如果结果为false，则终止循环</span><br><span class="line"> * </span><br><span class="line"> * 实际上这两个语句功能类似，不同的是while是先判断后执行，</span><br><span class="line"> * 而do...while会先执行后判断，</span><br><span class="line"> * do...while可以保证循环体至少执行一次，</span><br><span class="line"> * 而while不能</span><br><span class="line"> */</span><br><span class="line">var n = 1;</span><br><span class="line"></span><br><span class="line">//向这种将条件表达式写死为true的循环，叫做死循环</span><br><span class="line">//该循环不会停止，除非浏览器关闭，死循环在开发中慎用</span><br><span class="line">//可以使用break，来终止循环</span><br><span class="line">/*while(true)&#123;</span><br><span class="line">alert(n++);</span><br><span class="line"></span><br><span class="line">//判断n是否是10</span><br><span class="line">if(n == 10)&#123;</span><br><span class="line">//退出循环</span><br><span class="line">break;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">//创建一个循环，往往需要三个步骤</span><br><span class="line"></span><br><span class="line">//1.创初始化一个变量</span><br><span class="line">var i = 11;</span><br><span class="line"></span><br><span class="line">//2.在循环中设置一个条件表达式</span><br><span class="line">/*while(i &lt;= 10)&#123;</span><br><span class="line">//3.定义一个更新表达式，每次更新初始化变量</span><br><span class="line">document.write(i++ +&quot;&lt;br /&gt;&quot;)</span><br><span class="line"></span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">/*do&#123;</span><br><span class="line">document.write(i++ +&quot;&lt;br /&gt;&quot;);</span><br><span class="line">&#125;while(i &lt;= 10);*/</span><br><span class="line"></span><br><span class="line">/*while(true)&#123;</span><br><span class="line">alert(1);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="while练习"><a class="markdownIt-Anchor" href="#while练习"></a> while练习</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 假如投资的年利率为5%，试求从1000块增长到5000块，需要花费多少年</span><br><span class="line"> * </span><br><span class="line"> * 1000 1000*1.05</span><br><span class="line"> * 1050 1050*1.05</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//定义一个变量，表示当前的钱数</span><br><span class="line">var money = 1000;</span><br><span class="line"></span><br><span class="line">//定义一个计数器</span><br><span class="line">var count = 0;</span><br><span class="line"></span><br><span class="line">//定义一个while循环来计算每年的钱数</span><br><span class="line">while(money &lt; 5000)&#123;</span><br><span class="line">money *= 1.05;</span><br><span class="line"></span><br><span class="line">//使count自增</span><br><span class="line">count++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//console.log(money);</span><br><span class="line">console.log(&quot;一共需要&quot;+count+&quot;年&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="while练习2"><a class="markdownIt-Anchor" href="#while练习2"></a> while练习2</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;if练习1&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 从键盘输入小明的期末成绩:</span><br><span class="line"> *当成绩为100时，&apos;奖励一辆BMW&apos;</span><br><span class="line"> *当成绩为[80-99]时，&apos;奖励一台iphone15s&apos;</span><br><span class="line"> *当成绩为[60-80]时，&apos;奖励一本参考书&apos;</span><br><span class="line"> *其他时，什么奖励也没有</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * prompt()可以弹出一个提示框，该提示框中会带有一个文本框，</span><br><span class="line"> * 用户可以在文本框中输入一段内容，该函数需要一个字符串作为参数，</span><br><span class="line"> * 该字符串将会作为提示框的提示文字</span><br><span class="line"> * </span><br><span class="line"> * 用户输入的内容将会作为函数的返回值返回，可以定义一个变量来接收该内容</span><br><span class="line"> */</span><br><span class="line">//将prompt放入到一个循环中</span><br><span class="line">while(true)&#123;</span><br><span class="line">//score就是小明的期末成绩</span><br><span class="line">var score = prompt(&quot;请输入小明的期末成绩(0-100):&quot;);</span><br><span class="line">//判断用户输入的值是否合法</span><br><span class="line">if(score &gt;= 0 &amp;&amp; score &lt;= 100)&#123;</span><br><span class="line">//满足该条件则证明用户的输入合法，退出循环</span><br><span class="line">break;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">alert(&quot;请输入有效的分数！！！&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//判断值是否合法</span><br><span class="line">if(score &gt; 100 || score &lt; 0 || isNaN(score))&#123;</span><br><span class="line">alert(&quot;拉出去毙了~~~&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">//根据score的值来决定给小明什么奖励</span><br><span class="line">if(score == 100)&#123;</span><br><span class="line">//奖励一台宝马</span><br><span class="line">alert(&quot;宝马，拿去~~~&quot;);</span><br><span class="line">&#125;else if(score &gt;= 80)&#123;</span><br><span class="line">//奖励一个手机</span><br><span class="line">alert(&quot;手机，拿去玩~~~&quot;);</span><br><span class="line">&#125;else if(score &gt;= 60)&#123;</span><br><span class="line">//奖励一本参考书</span><br><span class="line">alert(&quot;参考书，拿去看~~~&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">alert(&quot;棍子一根~~&quot;);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="for循环"><a class="markdownIt-Anchor" href="#for循环"></a> for循环</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * for语句，也是一个循环语句，也称为for循环</span><br><span class="line"> * 在for循环中，为我们提供了专门的位置用来放三个表达式：</span><br><span class="line"> * 1.初始化表达式</span><br><span class="line"> * 2.条件表达式</span><br><span class="line"> * 3.更新表达式</span><br><span class="line"> * </span><br><span class="line"> *  for循环的语法：</span><br><span class="line"> * for(①初始化表达式;②条件表达式;④更新表达式)&#123;</span><br><span class="line"> * ③语句...</span><br><span class="line"> * &#125;</span><br><span class="line"> * </span><br><span class="line"> * for循环的执行流程：</span><br><span class="line"> * ①执行初始化表达式，初始化变量（初始化表达式只会执行一次）</span><br><span class="line"> * ②执行条件表达式，判断是否执行循环。</span><br><span class="line"> * 如果为true，则执行循环③</span><br><span class="line"> * 如果为false，终止循环</span><br><span class="line"> * ④执行更新表达式，更新表达式执行完毕继续重复②</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建一个执行10次的while循环</span><br><span class="line">//初始化表达式</span><br><span class="line">/*var i = 0;</span><br><span class="line"></span><br><span class="line">//创建一个循环，定义条件表达式</span><br><span class="line">while(i &lt; 10)&#123;</span><br><span class="line">//设置更新表达式</span><br><span class="line">alert(i++);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">for(var i = 0 ; i &lt; 10 ; i++ )&#123;</span><br><span class="line">alert(i);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * for循环中的三个部分都可以省略，也可以写在外部</span><br><span class="line"> * 如果在for循环中不写任何的表达式，只写两个;</span><br><span class="line"> * 此时循环是一个死循环会一直执行下去，慎用</span><br><span class="line"> * for(;;)&#123;</span><br><span class="line">alert(&quot;hello&quot;);</span><br><span class="line">&#125;</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="for循环练习1"><a class="markdownIt-Anchor" href="#for循环练习1"></a> for循环练习1</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 打印1-100之间所有奇数之和</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建一个变量，用来保存奇数之和</span><br><span class="line">//var sum = 0;</span><br><span class="line"></span><br><span class="line">//打印1-100之间的数</span><br><span class="line">for(var i=1 , sum=0 ; i&lt;=100 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">//判断i是否是奇数</span><br><span class="line">//不能被2整除的数就是奇数</span><br><span class="line">if(i%2 != 0)&#123;</span><br><span class="line">//如果i除以2有余数则证明i是奇数</span><br><span class="line">//console.log(i);</span><br><span class="line">sum = sum+i;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">console.log(&quot;奇数之和为 : &quot;+sum);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="for循环练习2"><a class="markdownIt-Anchor" href="#for循环练习2"></a> for循环练习2</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 打印1-100之间所有7的倍数的个数及总和</span><br><span class="line"> */</span><br><span class="line">//定义一个变量，来保存总和</span><br><span class="line">var sum = 0;</span><br><span class="line">//定义一个计数器，来记录数量</span><br><span class="line">var count = 0;</span><br><span class="line"></span><br><span class="line">//打印1-100之间所有的数</span><br><span class="line">for(var i=1 ; i&lt;=100 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">//判断i是否是7的倍数</span><br><span class="line">if(i % 7 == 0)&#123;</span><br><span class="line">//console.log(i);</span><br><span class="line">sum += i;</span><br><span class="line">//使计数器自增1</span><br><span class="line">count++;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//输出总和</span><br><span class="line">console.log(&quot;总和为:&quot;+sum);</span><br><span class="line">//输出总数</span><br><span class="line">console.log(&quot;总数量为:&quot;+count);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="for循环练习3"><a class="markdownIt-Anchor" href="#for循环练习3"></a> for循环练习3</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 水仙花数是指一个3位数，它的每个位上的数字的3 次幂之和等于它本身。</span><br><span class="line">（例如：1^3 + 5^3 + 3^3 = 153）,请打印所有的水仙花数。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//打印所有的三位数</span><br><span class="line">for(var i=100 ; i&lt;1000 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">//获取i的百位 十位 个位的数字</span><br><span class="line">//获取百位数字</span><br><span class="line">var bai = parseInt(i/100);</span><br><span class="line"></span><br><span class="line">//获取十位的数字</span><br><span class="line">var shi = parseInt((i-bai*100)/10);</span><br><span class="line"></span><br><span class="line">//获取个位数字</span><br><span class="line">var ge = i % 10;</span><br><span class="line"></span><br><span class="line">//判断i是否是水仙花数</span><br><span class="line">if(bai*bai*bai + shi*shi*shi + ge*ge*ge == i)&#123;</span><br><span class="line">console.log(i);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="for练习4"><a class="markdownIt-Anchor" href="#for练习4"></a> for练习4</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 在页面中接收一个用户输入的数字，并判断该数是否是质数。</span><br><span class="line">质数：只能被1和它自身整除的数，1不是质数也不是合数，质数必须是大于1的自然数。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var num = prompt(&quot;请输入一个大于1的整数:&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//判断这个值是否合法</span><br><span class="line">if(num &lt;= 1)&#123;</span><br><span class="line">alert(&quot;该值不合法！&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line"></span><br><span class="line">//创建一个变量来保存当前的数的状态</span><br><span class="line">//默认当前num是质数</span><br><span class="line">var flag = true;</span><br><span class="line"></span><br><span class="line">//判断num是否是质数</span><br><span class="line">//获取2-num之间的数</span><br><span class="line">for(var i=2 ; i&lt;num ; i++)&#123;</span><br><span class="line">//console.log(i);</span><br><span class="line">//判断num是否能被i整除</span><br><span class="line">if(num % i == 0)&#123;</span><br><span class="line">//如果num能被i整除，则说明num一定不是质数</span><br><span class="line">//设置flag为false</span><br><span class="line">flag = false;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//如果num是质数则输出</span><br><span class="line">if(flag)&#123;</span><br><span class="line">alert(num + &quot;是质数！！！&quot;);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">alert(&quot;这个不是质数&quot;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="嵌套的for循环"><a class="markdownIt-Anchor" href="#嵌套的for循环"></a> 嵌套的for循环</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> </span><br><span class="line"> 通过程序，在页面中输出如下的图形：</span><br><span class="line"> </span><br><span class="line"> *      1   &lt;1   i=0</span><br><span class="line"> **     2   &lt;2   i=1</span><br><span class="line"> ***    3   &lt;3   i=2</span><br><span class="line"> ****   4   &lt;4   i=3</span><br><span class="line"> *****  5   &lt;5   i=4</span><br><span class="line"> </span><br><span class="line"> *****</span><br><span class="line"> *****</span><br><span class="line"> *****</span><br><span class="line"> *****</span><br><span class="line"> *****</span><br><span class="line"> </span><br><span class="line"> ***** 1   j&lt;5(5-0)  i=0</span><br><span class="line"> ****  2  j&lt;4(5-1)  i=1</span><br><span class="line"> ***   3   j&lt;3(5-2)  i=2</span><br><span class="line"> **    4   j&lt;2(5-3)  i=3</span><br><span class="line"> *     5   j&lt;1(5-4)  i=4</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//向body中输出一个内容</span><br><span class="line">//document.write(&quot;*****&lt;br /&gt;&quot;);</span><br><span class="line"></span><br><span class="line">//通过一个for循环来输出图形</span><br><span class="line">//这个for循环执行几次，图形的高度就是多少</span><br><span class="line">//它可以用来控制图形的高度</span><br><span class="line">for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在循环的内部再创建一个循环，用来控制图形的宽度</span><br><span class="line"> * 目前我们的外部的for循环执行1次，内部的就会执行5次</span><br><span class="line"> * 内层循环可以来决定图形的宽度，执行几次图形的宽度就是多少</span><br><span class="line"> */</span><br><span class="line">/*for(var j=0 ; j&lt;i+1 ; j++)&#123;</span><br><span class="line">document.write(&quot;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;);</span><br><span class="line">&#125;*/</span><br><span class="line">for(var j=0 ; j&lt;5-i ; j++)&#123;</span><br><span class="line">document.write(&quot;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//输出一个换行</span><br><span class="line">document.write(&quot;&lt;br /&gt;&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="99乘法表"><a class="markdownIt-Anchor" href="#99乘法表"></a> 99乘法表</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 1.打印99乘法表</span><br><span class="line"> *  1*1=1</span><br><span class="line"> *  1*2=2 2*2=4</span><br><span class="line"> *  1*3=3 2*3=6 3*3=9</span><br><span class="line"> *  1*4=4 2*4=8 3*4=12 4*4=16</span><br><span class="line"> * ....9*9=81</span><br><span class="line"> * </span><br><span class="line"> * 2.打印出1-100之间所有的质数</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建外层循环，用来控制乘法表的高度</span><br><span class="line">for(var i=1 ; i&lt;=9 ; i++ )&#123;</span><br><span class="line">//创建一个内层循环来控制图形的宽度</span><br><span class="line">for(var j=1 ; j&lt;=i ; j++)&#123;</span><br><span class="line">document.write(&quot;&lt;span&gt;&quot;+j+&quot;*&quot;+i+&quot;=&quot;+i*j+&quot;&lt;/span&gt;&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//输出一个换行</span><br><span class="line">document.write(&quot;&lt;br /&gt;&quot;);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">body&#123;</span><br><span class="line">width: 2000px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">span&#123;</span><br><span class="line">display: inline-block;</span><br><span class="line">width: 80px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="质数练习"><a class="markdownIt-Anchor" href="#质数练习"></a> 质数练习</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 打印出1-100之间所有的质数</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//打印2-100之间所有的数</span><br><span class="line">for(var i=2 ; i&lt;=100 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">//创建一个布尔值，用来保存结果，默认i是质数</span><br><span class="line">var flag = true;</span><br><span class="line"></span><br><span class="line">//判断i是否是质数</span><br><span class="line">//获取到2-i之间的所有的数</span><br><span class="line">for(var j=2 ; j&lt;i ; j++)&#123;</span><br><span class="line"></span><br><span class="line">//判断i是否能被j整除</span><br><span class="line">if(i%j == 0)&#123;</span><br><span class="line">//如果进入判断则证明i不是质数,修改flag值为false</span><br><span class="line">flag = false;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//如果是质数，则打印i的值</span><br><span class="line">if(flag)&#123;</span><br><span class="line">console.log(i);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="break和continue"><a class="markdownIt-Anchor" href="#break和continue"></a> break和continue</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * break关键字可以用来退出switch或循环语句</span><br><span class="line"> * 不能在if语句中使用break和continue</span><br><span class="line"> * break关键字，会立即终止离他最近的那个循环语句</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line">console.log(i);</span><br><span class="line"></span><br><span class="line">if(i == 2)&#123;</span><br><span class="line">break;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line">console.log(&quot;@外层循环&quot;+i)</span><br><span class="line">for(var j=0 ; j&lt;5; j++)&#123;</span><br><span class="line">break;</span><br><span class="line">console.log(&quot;内层循环:&quot;+j);</span><br><span class="line">&#125;</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 可以为循环语句创建一个label，来标识当前的循环</span><br><span class="line"> * label:循环语句</span><br><span class="line"> * 使用break语句时，可以在break后跟着一个label，</span><br><span class="line"> * 这样break将会结束指定的循环，而不是最近的</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*outer:</span><br><span class="line">for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line">console.log(&quot;@外层循环&quot;+i)</span><br><span class="line">for(var j=0 ; j&lt;5; j++)&#123;</span><br><span class="line">break outer;</span><br><span class="line">console.log(&quot;内层循环:&quot;+j);</span><br><span class="line">&#125;</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * continue关键字可以用来跳过当次循环</span><br><span class="line"> * 同样continue也是默认只会对离他最近的循环循环起作用</span><br><span class="line"> */</span><br><span class="line">/*for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">if(i==2)&#123;</span><br><span class="line">continue;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">console.log(i);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">outer:</span><br><span class="line">for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line"></span><br><span class="line">for(var j=0 ; j&lt;5 ; j++)&#123;</span><br><span class="line"></span><br><span class="line">continue;</span><br><span class="line"></span><br><span class="line">console.log(&quot;--&gt;&quot;+j);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">console.log(&quot;@---&gt;&quot;+i);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="质素练习补充"><a class="markdownIt-Anchor" href="#质素练习补充"></a> 质素练习补充</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//测试如下的程序的性能</span><br><span class="line">//在程序执行前，开启计时器</span><br><span class="line">//console.time(&quot;计时器的名字&quot;)可以用来开启一个计时器</span><br><span class="line">//它需要一个字符串作为参数，这个字符串将会作为计时器的标识</span><br><span class="line">console.time(&quot;test&quot;);</span><br><span class="line"></span><br><span class="line">//打印2-100之间所有的数</span><br><span class="line">for(var i=2 ; i&lt;=100000 ; i++)&#123;</span><br><span class="line">var flag = true;</span><br><span class="line">for(var j=2 ; j&lt;=Math.sqrt(i) ; j++)&#123;</span><br><span class="line">if(i%j == 0)&#123;</span><br><span class="line">//如果进入判断则证明i不是质数,修改flag值为false</span><br><span class="line">flag = false;</span><br><span class="line">//一旦进入判断，则证明i不可能是质数了，此时循环再执行已经没有任何意义了</span><br><span class="line">//使用break来结束循环</span><br><span class="line">break;</span><br><span class="line"></span><br><span class="line">//不加break 215ms</span><br><span class="line">//加break 25ms</span><br><span class="line">//修改j&lt;=后 2.6</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">//如果是质数，则打印i的值</span><br><span class="line">if(flag)&#123;</span><br><span class="line">//console.log(i);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//终止计时器</span><br><span class="line">//console.timeEnd()用来停止一个计时器，需要一个计时器的名字作为参数</span><br><span class="line">console.timeEnd(&quot;test&quot;); //在浏览器控制台显示</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 36</span><br><span class="line"> * 1 36</span><br><span class="line"> * 2 18</span><br><span class="line"> * 3 12</span><br><span class="line"> * 4 9</span><br><span class="line"> * 6 6</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//可以通过Math.sqrt()对一个数进行开方</span><br><span class="line">//var result = Math.sqrt(97);</span><br><span class="line"></span><br><span class="line">//console.log(&quot;result = &quot;+result)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="对象"><a class="markdownIt-Anchor" href="#对象"></a> 对象</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * JS中数据类型</span><br><span class="line"> * - String 字符串</span><br><span class="line"> *  - Number 数值</span><br><span class="line"> * - Boolean 布尔值</span><br><span class="line"> * - Null 空值</span><br><span class="line"> * - Undefined 未定义</span><br><span class="line"> * - 以上这五种类型属于基本数据类型，以后我们看到的值</span><br><span class="line"> * 只要不是上边的5种，全都是对象</span><br><span class="line"> * - Object 对象</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> * 基本数据类型都是单一的值&quot;hello&quot; 123 true,</span><br><span class="line"> * 值和值之间没有任何的联系。</span><br><span class="line"> * </span><br><span class="line"> * 在JS中来表示一个人的信息（name gender age）：</span><br><span class="line"> * var name = &quot;孙悟空&quot;;</span><br><span class="line"> * var gender = &quot;男&quot;;</span><br><span class="line"> * var age = 18;</span><br><span class="line"> * 如果使用基本数据类型的数据，我们所创建的变量都是独立，不能成为一个整体。</span><br><span class="line"> * </span><br><span class="line"> * 对象属于一种复合的数据类型，在对象中可以保存多个不同数据类型的属性。</span><br><span class="line"> * </span><br><span class="line"> * 对象的分类：</span><br><span class="line"> * 1.内建对象</span><br><span class="line"> * - 由ES标准中定义的对象，在任何的ES的实现中都可以使用</span><br><span class="line"> * - 比如：Math String Number Boolean Function Object....</span><br><span class="line"> * </span><br><span class="line"> * 2.宿主对象</span><br><span class="line"> * - 由JS的运行环境提供的对象，目前来讲主要指由浏览器提供的对象</span><br><span class="line"> * - 比如 BOM DOM</span><br><span class="line"> * </span><br><span class="line"> * 3.自定义对象</span><br><span class="line"> * - 由开发人员自己创建的对象</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建对象</span><br><span class="line">/*</span><br><span class="line"> * 使用new关键字调用的函数，是构造函数constructor</span><br><span class="line"> * 构造函数是专门用来创建对象的函数</span><br><span class="line"> * 使用typeof检查一个对象时，会返回object</span><br><span class="line"> */</span><br><span class="line">var obj = new Object();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在对象中保存的值称为属性</span><br><span class="line"> * 向对象添加属性</span><br><span class="line"> * 语法：对象.属性名 = 属性值;</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//向obj中添加一个name属性</span><br><span class="line">obj.name = &quot;孙悟空&quot;;</span><br><span class="line">//向obj中添加一个gender属性</span><br><span class="line">obj.gender = &quot;男&quot;;</span><br><span class="line">//向obj中添加一个age属性</span><br><span class="line">obj.age = 18;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 读取对象中的属性</span><br><span class="line"> * 语法：对象.属性名</span><br><span class="line"> * </span><br><span class="line"> * 如果读取对象中没有的属性，不会报错而是会返回undefined</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//console.log(obj.gender);</span><br><span class="line">//console.log(obj.hello);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 修改对象的属性值</span><br><span class="line"> * 语法：对象.属性名 = 新值</span><br><span class="line"> */</span><br><span class="line">obj.name = &quot;tom&quot;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 删除对象的属性</span><br><span class="line"> * 语法：delete 对象.属性名</span><br><span class="line"> */</span><br><span class="line">delete obj.name;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">console.log(obj.age);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="属性名和属性值"><a class="markdownIt-Anchor" href="#属性名和属性值"></a> 属性名和属性值</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">var obj = new Object();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 向对象中添加属性</span><br><span class="line"> * 属性名：</span><br><span class="line"> * - 对象的属性名不强制要求遵守标识符的规范</span><br><span class="line"> * 什么乱七八糟的名字都可以使用</span><br><span class="line"> * - 但是我们使用是还是尽量按照标识符的规范去做</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">obj.name = &quot;孙悟空&quot;;</span><br><span class="line"></span><br><span class="line">//obj.var = &quot;hello&quot;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 如果要使用特殊的属性名，不能采用.的方式来操作</span><br><span class="line"> * 需要使用另一种方式：</span><br><span class="line"> * 语法：对象[&quot;属性名&quot;] = 属性值</span><br><span class="line"> * 读取时也需要采用这种方式</span><br><span class="line"> * </span><br><span class="line"> * 使用[]这种形式去操作属性，更加的灵活，</span><br><span class="line"> * 在[]中可以直接传递一个变量，这样变量值是多少就会读取那个属性</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">obj[&quot;123&quot;] = 789;</span><br><span class="line">obj[&quot;nihao&quot;] = &quot;你好&quot;;</span><br><span class="line">var n = &quot;nihao&quot;;</span><br><span class="line">//console.log(obj[&quot;123&quot;]);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 属性值</span><br><span class="line"> * JS对象的属性值，可以是任意的数据类型</span><br><span class="line"> * 甚至也可以是一个对象</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">obj.test = true;</span><br><span class="line">obj.test = null;</span><br><span class="line">obj.test = undefined;</span><br><span class="line"></span><br><span class="line">//创建一个对象</span><br><span class="line">var obj2 = new Object();</span><br><span class="line">obj2.name = &quot;猪八戒&quot;;</span><br><span class="line"></span><br><span class="line">//将obj2设置为obj的属性</span><br><span class="line">obj.test = obj2;</span><br><span class="line"></span><br><span class="line">//console.log(obj.test.name);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * in 运算符</span><br><span class="line"> * - 通过该运算符可以检查一个对象中是否含有指定的属性</span><br><span class="line"> * 如果有则返回true，没有则返回false</span><br><span class="line"> *  - 语法：</span><br><span class="line"> * &quot;属性名&quot; in 对象</span><br><span class="line"> */</span><br><span class="line">//console.log(obj.test2);</span><br><span class="line"></span><br><span class="line">//检查obj中是否含有test2属性</span><br><span class="line">//console.log(&quot;test2&quot; in obj);</span><br><span class="line">//console.log(&quot;test&quot; in obj);</span><br><span class="line">console.log(&quot;name&quot; in obj);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="基本和引用类型"><a class="markdownIt-Anchor" href="#基本和引用类型"></a> 基本和引用类型</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 基本数据类型</span><br><span class="line"> * String Number Boolean Null Undefined</span><br><span class="line"> * </span><br><span class="line"> * 引用数据类型</span><br><span class="line"> * Object</span><br><span class="line"> * </span><br><span class="line"> * JS中的变量都是保存到栈内存中的，</span><br><span class="line"> * 基本数据类型的值直接在栈内存中存储，</span><br><span class="line"> * 值与值之间是独立存在，修改一个变量不会影响其他的变量</span><br><span class="line"> * </span><br><span class="line"> * 对象是保存到堆内存中的，每创建一个新的对象，就会在堆内存中开辟出一个新的空间，</span><br><span class="line"> * 而变量保存的是对象的内存地址（对象的引用），如果两个变量保存的是同一个对象引用，</span><br><span class="line"> * 当一个通过一个变量修改属性时，另一个也会受到影响</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var a = 123;</span><br><span class="line">var b = a;</span><br><span class="line">a++;</span><br><span class="line"></span><br><span class="line">/*console.log(&quot;a = &quot;+a);</span><br><span class="line">console.log(&quot;b = &quot;+b);*/</span><br><span class="line"></span><br><span class="line">var obj = new Object();</span><br><span class="line">obj.name = &quot;孙悟空&quot;;</span><br><span class="line"></span><br><span class="line">var obj2 = obj;</span><br><span class="line"></span><br><span class="line">//修改obj的name属性</span><br><span class="line">obj.name = &quot;猪八戒&quot;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*console.log(obj.name);</span><br><span class="line">console.log(obj2.name);*/</span><br><span class="line"></span><br><span class="line">//设置obj2为null</span><br><span class="line">obj2 = null;</span><br><span class="line"></span><br><span class="line">/*console.log(obj);</span><br><span class="line">console.log(obj2);*/</span><br><span class="line"></span><br><span class="line">var c = 10;</span><br><span class="line">var d = 10;</span><br><span class="line">//console.log(c == d);</span><br><span class="line"></span><br><span class="line">var obj3 = new Object();</span><br><span class="line">var obj4 = new Object();</span><br><span class="line">obj3.name = &quot;沙和尚&quot;;</span><br><span class="line">obj4.name = &quot;沙和尚&quot;;</span><br><span class="line"></span><br><span class="line">/*console.log(obj3);</span><br><span class="line">console.log(obj4);*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 当比较两个基本数据类型的值时，就是比较值。</span><br><span class="line"> * 而比较两个引用数据类型时，它是比较的对象的内存地址，</span><br><span class="line"> * 如果两个对象是一摸一样的，但是地址不同，它也会返回false</span><br><span class="line"> */</span><br><span class="line">console.log(obj3 == obj4);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="对象字面量"><a class="markdownIt-Anchor" href="#对象字面量"></a> 对象字面量</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">//创建一个对象</span><br><span class="line">//var obj = new Object();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用对象字面量来创建一个对象</span><br><span class="line"> */</span><br><span class="line">var obj = &#123;&#125;;</span><br><span class="line"></span><br><span class="line">//console.log(typeof obj);</span><br><span class="line"></span><br><span class="line">obj.name = &quot;孙悟空&quot;;</span><br><span class="line"></span><br><span class="line">//console.log(obj.name);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用对象字面量，可以在创建对象时，直接指定对象中的属性</span><br><span class="line"> * 语法：&#123;属性名:属性值,属性名:属性值....&#125;</span><br><span class="line"> * 对象字面量的属性名可以加引号也可以不加，建议不加,</span><br><span class="line"> * 如果要使用一些特殊的名字，则必须加引号</span><br><span class="line"> * </span><br><span class="line"> * 属性名和属性值是一组一组的名值对结构，</span><br><span class="line"> * 名和值之间使用:连接，多个名值对之间使用,隔开</span><br><span class="line"> * 如果一个属性之后没有其他的属性了，就不要写,</span><br><span class="line"> */</span><br><span class="line">var obj2 = &#123;</span><br><span class="line"></span><br><span class="line">name:&quot;猪八戒&quot;,</span><br><span class="line">age:13,</span><br><span class="line">gender:&quot;男&quot;,</span><br><span class="line">test:&#123;name:&quot;沙僧&quot;&#125;</span><br><span class="line"></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">console.log(obj2.test);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="函数"><a class="markdownIt-Anchor" href="#函数"></a> 函数</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 函数 function</span><br><span class="line"> * - 函数也是一个对象</span><br><span class="line"> * - 函数中可以封装一些功能（代码），在需要时可以执行这些功能（代码）</span><br><span class="line"> * - 函数中可以保存一些代码在需要的时候调用</span><br><span class="line"> * - 使用typeof检查一个函数对象时，会返回function</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//我们在实际开发中很少使用构造函数来创建一个函数对象</span><br><span class="line">//创建一个函数对象</span><br><span class="line">//可以将要封装的代码以字符串的形式传递给构造函数</span><br><span class="line">//var fun = new Function(&quot;console.log(&apos;Hello 这是我的第一个函数&apos;);&quot;);</span><br><span class="line"></span><br><span class="line">//封装到函数中的代码不会立即执行</span><br><span class="line">//函数中的代码会在函数调用的时候执行</span><br><span class="line">//调用函数 语法：函数对象()</span><br><span class="line">//当调用函数时，函数中封装的代码会按照顺序执行</span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用 函数声明 来创建一个函数</span><br><span class="line"> * 语法：</span><br><span class="line"> * function 函数名([形参1,形参2...形参N])&#123;</span><br><span class="line"> * 语句...</span><br><span class="line"> * &#125;</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function fun2()&#123;</span><br><span class="line">console.log(&quot;这是我的第二个函数~~~&quot;);</span><br><span class="line">alert(&quot;哈哈哈哈哈&quot;);</span><br><span class="line">document.write(&quot;~~~~(&gt;_&lt;)~~~~&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//console.log(fun2);</span><br><span class="line">//调用fun2</span><br><span class="line">//fun2();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用 函数表达式 来创建一个函数</span><br><span class="line"> * var 函数名  = function([形参1,形参2...形参N])&#123;</span><br><span class="line"> *  语句....</span><br><span class="line"> *  &#125;</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var fun3 = function()&#123;</span><br><span class="line">console.log(&quot;我是匿名函数中封装的代码&quot;);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">fun3();</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="函数的参数"><a class="markdownIt-Anchor" href="#函数的参数"></a> 函数的参数</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 定义一个用来求两个数和的函数</span><br><span class="line"> * 可以在函数的()中来指定一个或多个形参（形式参数）</span><br><span class="line"> * 多个形参之间使用,隔开，声明形参就相当于在函数内部声明了对应的变量</span><br><span class="line"> * 但是并不赋值</span><br><span class="line"> */</span><br><span class="line">function sum(a,b)&#123;</span><br><span class="line">console.log(&quot;a = &quot;+a);</span><br><span class="line">console.log(&quot;b = &quot;+b);</span><br><span class="line">console.log(a+b);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在调用函数时，可以在()中指定实参（实际参数）</span><br><span class="line"> * 实参将会赋值给函数中对应的形参</span><br><span class="line"> */</span><br><span class="line">/*sum(1,2);</span><br><span class="line">sum(123,456);*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 调用函数时解析器不会检查实参的类型,</span><br><span class="line"> * 所以要注意，是否有可能会接收到非法的参数，如果有可能则需要对参数进行类型的检查</span><br><span class="line"> * 函数的实参可以是任意的数据类型</span><br><span class="line"> */</span><br><span class="line">//sum(123,&quot;hello&quot;);</span><br><span class="line">//sum(true , false);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 调用函数时，解析器也不会检查实参的数量</span><br><span class="line"> * 多余实参不会被赋值</span><br><span class="line"> * 如果实参的数量少于形参的数量，则没有对应实参的形参将是undefined</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">//sum(123,456,&quot;hello&quot;,true,null);</span><br><span class="line">sum(123);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="返回值"><a class="markdownIt-Anchor" href="#返回值"></a> 返回值</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个函数，用来计算三个数的和</span><br><span class="line"> * </span><br><span class="line"> * 可以使用 return 来设置函数的返回值</span><br><span class="line"> * 语法：</span><br><span class="line"> * return 值</span><br><span class="line"> * </span><br><span class="line"> * return后的值将会会作为函数的执行结果返回，</span><br><span class="line"> * 可以定义一个变量，来接收该结果</span><br><span class="line"> * </span><br><span class="line"> *  在函数中return后的语句都不会执行</span><br><span class="line"> * </span><br><span class="line"> * 如果return语句后不跟任何值就相当于返回一个undefined，</span><br><span class="line"> * 如果函数中不写return，则也会返回undefined</span><br><span class="line"> * </span><br><span class="line"> * return后可以跟任意类型的值</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">function sum(a , b , c)&#123;</span><br><span class="line">//alert(a + b +c);</span><br><span class="line"></span><br><span class="line">var d = a + b + c;</span><br><span class="line"></span><br><span class="line">return d;</span><br><span class="line"></span><br><span class="line">//return undefined;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//调用函数</span><br><span class="line">//变量result的值就是函数的执行结果</span><br><span class="line">//函数返回什么result的值就是什么</span><br><span class="line">var result = sum(4,7,8);</span><br><span class="line"></span><br><span class="line">//var result = alert(&quot;hello&quot;);</span><br><span class="line"></span><br><span class="line">console.log(&quot;result = &quot;+result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="练习"><a class="markdownIt-Anchor" href="#练习"></a> 练习</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 定义一个函数，判断一个数字是否是偶数，如果是返回true，否则返回false</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function isOu(num)&#123;</span><br><span class="line"></span><br><span class="line">return num % 2 == 0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var result = isOu(15);</span><br><span class="line"></span><br><span class="line">//console.log(&quot;result = &quot;+result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 定义一个函数，可以根据半径计算一个圆的面积，并返回计算结果</span><br><span class="line"> * 3.14*r*r</span><br><span class="line"> */</span><br><span class="line">function mianji(r)&#123;</span><br><span class="line"></span><br><span class="line">return 3.14*r*r;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">result = mianji(5);</span><br><span class="line"></span><br><span class="line">//console.log(&quot;result = &quot;+result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个函数，可以在控制台中输出一个人的信息</span><br><span class="line"> * 可以输出人的 name age gender address</span><br><span class="line"> * </span><br><span class="line"> * 实参可以是任意的数据类型，也可以是一个对象</span><br><span class="line"> * 当我们的参数过多时，可以将参数封装到一个对象中，然后通过对象传递</span><br><span class="line"> */</span><br><span class="line">function sayHello(o)&#123;</span><br><span class="line"></span><br><span class="line">//console.log(&quot;o = &quot;+o);</span><br><span class="line">console.log(&quot;我是&quot;+o.name+&quot;,今年我&quot;+o.age+&quot;岁了,&quot;+&quot;我是一个&quot;+o.gender+&quot;人&quot;+&quot;,我住在&quot;+o.address);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//sayHello(&quot;猪八戒&quot;,28,&quot;高老庄&quot;,&quot;男&quot;);</span><br><span class="line">//创建一个对象</span><br><span class="line">var obj = &#123;</span><br><span class="line">name:&quot;孙悟空&quot;,</span><br><span class="line">age:18,</span><br><span class="line">address:&quot;花果山&quot;,</span><br><span class="line">gender:&quot;男&quot;</span><br><span class="line"></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">//sayHello(obj);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 实参可以是一个对象，也可以是一个函数</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function fun(a)&#123;</span><br><span class="line">console.log(&quot;a = &quot;+a);</span><br><span class="line">//a(obj);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//fun(sayHello);</span><br><span class="line"></span><br><span class="line">//fun(function()&#123;alert(&quot;hello&quot;)&#125;);</span><br><span class="line"></span><br><span class="line">fun(mianji(10));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * mianji()</span><br><span class="line"> * - 调用函数</span><br><span class="line"> * - 相当于使用的函数的返回值</span><br><span class="line"> * </span><br><span class="line"> * mianji</span><br><span class="line"> * - 函数对象</span><br><span class="line"> * - 相当于直接使用函数对象</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="返回值类型"><a class="markdownIt-Anchor" href="#返回值类型"></a> 返回值类型</h2><h5 id="在js中可以在函数内部再定义一个函数"><a class="markdownIt-Anchor" href="#在js中可以在函数内部再定义一个函数"></a> 在JS中可以在函数内部再定义一个函数。</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">function fun()&#123;</span><br><span class="line">alert(&quot;函数要执行了~~~~&quot;);</span><br><span class="line"></span><br><span class="line">for(var i=0 ; i&lt;5 ; i++)&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">if(i == 2)&#123;</span><br><span class="line">//使用break可以退出当前的循环</span><br><span class="line">//break;</span><br><span class="line"></span><br><span class="line">//continue用于跳过当次循环</span><br><span class="line">//continue;</span><br><span class="line"></span><br><span class="line">//使用return可以结束整个函数</span><br><span class="line">//return;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">console.log(i);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">alert(&quot;函数执行完了~~~~&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 返回值可以是任意的数据类型</span><br><span class="line"> * 也可以是一个对象，也可以是一个函数</span><br><span class="line"> */</span><br><span class="line">function fun2()&#123;</span><br><span class="line"></span><br><span class="line">//返回一个对象</span><br><span class="line">return &#123;name:&quot;沙和尚&quot;&#125;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var a = fun2();</span><br><span class="line"></span><br><span class="line">//console.log(&quot;a = &quot;+a);</span><br><span class="line"></span><br><span class="line">function fun3()&#123;</span><br><span class="line">//在函数内部再声明一个函数</span><br><span class="line">function fun4()&#123;</span><br><span class="line">alert(&quot;我是fun4&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//将fun4函数对象作为返回值返回</span><br><span class="line">return fun4;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">a = fun3();</span><br><span class="line">//console.log(a);</span><br><span class="line">//a();</span><br><span class="line">fun3()(); //调用fun4</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="立即执行函数"><a class="markdownIt-Anchor" href="#立即执行函数"></a> 立即执行函数</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//函数对象()</span><br><span class="line">/*</span><br><span class="line"> * 立即执行函数</span><br><span class="line"> * 函数定义完，立即被调用，这种函数叫做立即执行函数</span><br><span class="line"> * 立即执行函数往往只会执行一次</span><br><span class="line"> */</span><br><span class="line">/*(function()&#123;</span><br><span class="line">alert(&quot;我是一个匿名函数~~~&quot;);</span><br><span class="line">&#125;)();*/</span><br><span class="line"></span><br><span class="line">(function(a,b)&#123;</span><br><span class="line">console.log(&quot;a = &quot;+a);</span><br><span class="line">console.log(&quot;b = &quot;+b);</span><br><span class="line">&#125;)(123,456);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="对象方法"><a class="markdownIt-Anchor" href="#对象方法"></a> 对象方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个对象</span><br><span class="line"> */</span><br><span class="line">var obj = new Object();</span><br><span class="line"></span><br><span class="line">//向对象中添加属性</span><br><span class="line">obj.name = &quot;孙悟空&quot;;</span><br><span class="line">obj.age = 18;</span><br><span class="line"></span><br><span class="line">//对象的属性值可以是任何的数据类型，也可以是个函数</span><br><span class="line">obj.sayName = function()&#123;</span><br><span class="line">console.log(obj.name);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">function fun()&#123;</span><br><span class="line">console.log(obj.name);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">//console.log(obj.sayName);</span><br><span class="line">//调方法</span><br><span class="line">obj.sayName();</span><br><span class="line">//调函数</span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 函数也可以称为对象的属性，</span><br><span class="line"> * 如果一个函数作为一个对象的属性保存，</span><br><span class="line"> * 那么我们称这个函数时这个对象的方法</span><br><span class="line"> * 调用这个函数就说调用对象的方法（method）</span><br><span class="line"> * </span><br><span class="line"> * 但是它只是名称上的区别没有其他的区别</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var obj2 = &#123;</span><br><span class="line"></span><br><span class="line">name:&quot;猪八戒&quot;,</span><br><span class="line">age:18,</span><br><span class="line">sayName:function()&#123;</span><br><span class="line">console.log(obj2.name);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">obj2.sayName();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="枚举对象中的属性"><a class="markdownIt-Anchor" href="#枚举对象中的属性"></a> 枚举对象中的属性</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">var obj = &#123;</span><br><span class="line">name:&quot;孙悟空&quot;,</span><br><span class="line">age:18,</span><br><span class="line">gender:&quot;男&quot;,</span><br><span class="line">address:&quot;花果山&quot;</span><br><span class="line"> &#125;;</span><br><span class="line"> </span><br><span class="line">//枚举对象中的属性</span><br><span class="line">//使用for ... in 语句</span><br><span class="line">/*</span><br><span class="line"> * 语法：</span><br><span class="line"> * for(var 变量 in 对象)&#123;</span><br><span class="line"> * </span><br><span class="line"> *  &#125;</span><br><span class="line"> * </span><br><span class="line"> * for...in语句 对象中有几个属性，循环体就会执行几次</span><br><span class="line"> * 每次执行时，会将对象中的一个属性的名字赋值给变量</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">for(var n in obj)&#123;</span><br><span class="line">console.log(&quot;属性名:&quot;+n);</span><br><span class="line"></span><br><span class="line">console.log(&quot;属性值:&quot;+obj[n]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="作用域scope"><a class="markdownIt-Anchor" href="#作用域scope"></a> 作用域(Scope)</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 作用域</span><br><span class="line"> * - 作用域指一个变量的作用的范围</span><br><span class="line"> * - 在JS中一共有两种作用域：</span><br><span class="line"> * 1.全局作用域</span><br><span class="line"> * - 直接编写在script标签中的JS代码，都在全局作用域</span><br><span class="line"> * - 全局作用域在页面打开时创建，在页面关闭时销毁</span><br><span class="line"> * - 在全局作用域中有一个全局对象window，</span><br><span class="line"> * 它代表的是一个浏览器的窗口，它由浏览器创建我们可以直接使用</span><br><span class="line"> * - 在全局作用域中：</span><br><span class="line"> * 创建的变量都会作为window对象的属性保存</span><br><span class="line"> * 创建的函数都会作为window对象的方法保存</span><br><span class="line"> * - 全局作用域中的变量都是全局变量，</span><br><span class="line"> * 在页面的任意的部分都可以访问的到</span><br><span class="line"> * </span><br><span class="line"> * 2.函数作用域</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var a = 10;</span><br><span class="line">var b = 20;</span><br><span class="line">//var c = &quot;hello&quot;;</span><br><span class="line"></span><br><span class="line">//console.log(window.c);</span><br><span class="line"></span><br><span class="line">function fun()&#123;</span><br><span class="line">console.log(&quot;我是fun函数&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//window.fun();</span><br><span class="line"></span><br><span class="line">//window.alert(&quot;hello&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="变量的声明提前"><a class="markdownIt-Anchor" href="#变量的声明提前"></a> 变量的声明提前</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 变量的声明提前</span><br><span class="line"> * - 使用var关键字声明的变量，会在所有的代码执行之前被声明（但是不会赋值），</span><br><span class="line"> * 但是如果声明变量时不适用var关键字，则变量不会被声明提前</span><br><span class="line"> * </span><br><span class="line"> * 函数的声明提前</span><br><span class="line"> * - 使用函数声明形式创建的函数 function 函数()&#123;&#125;</span><br><span class="line"> * 它会在所有的代码执行之前就被创建，所以我们可以在函数声明前来调用函数</span><br><span class="line"> *    使用函数表达式创建的函数，不会被声明提前，所以不能在声明前调用</span><br><span class="line"> */</span><br><span class="line">/*console.log(&quot;a = &quot;+a);</span><br><span class="line"></span><br><span class="line">var a = 123;*/</span><br><span class="line"></span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//函数声明，会被提前创建</span><br><span class="line">function fun()&#123;</span><br><span class="line">console.log(&quot;我是一个fun函数&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//函数表达式，不会被提前创建</span><br><span class="line">var fun2 = function()&#123;</span><br><span class="line">console.log(&quot;我是fun2函数&quot;);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">fun2();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h5 id="因为用var声明了所以不会报错但是没有赋值赋值要执行到var-a-10这里才会赋值"><a class="markdownIt-Anchor" href="#因为用var声明了所以不会报错但是没有赋值赋值要执行到var-a-10这里才会赋值"></a> 因为用var声明了,所以不会报错,但是没有赋值,赋值要执行到<code>var a =10;</code>这里才会赋值</h5><p><img src="/images/javawz/image-20260307190300860.png" alt="image-20260307190300860"></p><h5 id="没有var所以变量没有被声明就会报错"><a class="markdownIt-Anchor" href="#没有var所以变量没有被声明就会报错"></a> 没有var所以变量没有被声明就会报错</h5><p><img src="/images/javawz/image-20260307190344791.png" alt="image-20260307190344791"></p><h2 id="函数作用域"><a class="markdownIt-Anchor" href="#函数作用域"></a> 函数作用域</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 函数作用域</span><br><span class="line"> * - 调用函数时创建函数作用域，函数执行完毕以后，函数作用域销毁</span><br><span class="line"> * - 每调用一次函数就会创建一个新的函数作用域，他们之间是互相独立的</span><br><span class="line"> * - 在函数作用域中可以访问到全局作用域的变量</span><br><span class="line"> * 在全局作用域中无法访问到函数作用域的变量</span><br><span class="line"> * - 当在函数作用域操作一个变量时，它会先在自身作用域中寻找，如果有就直接使用</span><br><span class="line"> * 如果没有则向上一级作用域中寻找，直到找到全局作用域，</span><br><span class="line"> * 如果全局作用域中依然没有找到，则会报错ReferenceError</span><br><span class="line"> * - 在函数中要访问全局变量可以使用window对象</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建一个变量</span><br><span class="line">var a = 10;</span><br><span class="line"></span><br><span class="line">function fun()&#123;</span><br><span class="line"></span><br><span class="line">var a = &quot;我是fun函数中的变量a&quot;;</span><br><span class="line">var b = 20;</span><br><span class="line"></span><br><span class="line">//console.log(&quot;a = &quot;+a);</span><br><span class="line"></span><br><span class="line">function fun2()&#123;</span><br><span class="line">console.log(&quot;a = &quot;+window.a);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">fun2();</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//fun();</span><br><span class="line">//console.log(&quot;b = &quot;+b); //无法访问到函数里面定义的变量</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在函数作用域也有声明提前的特性，</span><br><span class="line"> * 使用var关键字声明的变量，会在函数中所有的代码执行之前被声明</span><br><span class="line"> * 函数声明也会在函数中所有的代码执行之前执行</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function fun3()&#123;</span><br><span class="line"></span><br><span class="line">fun4();</span><br><span class="line"></span><br><span class="line">//console.log(a);</span><br><span class="line"></span><br><span class="line">var a = 35;</span><br><span class="line"></span><br><span class="line">function fun4()&#123;</span><br><span class="line">alert(&quot;I&apos;m fun4&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//fun3();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">var c = 33;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在函数中，不使用var声明的变量都会成为全局变量</span><br><span class="line"> */</span><br><span class="line">function fun5()&#123;</span><br><span class="line">//console.log(&quot;c = &quot;+c);</span><br><span class="line">//c = 10;</span><br><span class="line"></span><br><span class="line">//d没有使用var关键字，则会设置为全局变量</span><br><span class="line">d = 100;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">fun5();</span><br><span class="line"></span><br><span class="line">//在全局输出c</span><br><span class="line">//console.log(&quot;d = &quot;+d);</span><br><span class="line"></span><br><span class="line">var e = 23;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 定义形参就相当于在函数作用域中声明了变量</span><br><span class="line"> */</span><br><span class="line">function fun6(e)&#123;</span><br><span class="line">alert(e);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">fun6();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h2 id="debug"><a class="markdownIt-Anchor" href="#debug"></a> debug</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">alert(d);</span><br><span class="line"></span><br><span class="line">var a = 10;</span><br><span class="line"></span><br><span class="line">var b = &quot;hello&quot;;</span><br><span class="line"></span><br><span class="line">c = true;</span><br><span class="line"></span><br><span class="line">function fun()&#123;</span><br><span class="line">alert(&quot;hello&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var d = 35;</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h2 id="this"><a class="markdownIt-Anchor" href="#this"></a> this</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 解析器在调用函数每次都会向函数内部传递进一个隐含的参数,</span><br><span class="line"> * 这个隐含的参数就是this，this指向的是一个对象，</span><br><span class="line"> * 这个对象我们称为函数执行的 上下文对象，</span><br><span class="line"> * 根据函数的调用方式的不同，this会指向不同的对象</span><br><span class="line"> * 1.以函数的形式调用时，this永远都是window</span><br><span class="line"> * 2.以方法的形式调用时，this就是调用方法的那个对象</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function fun()&#123;</span><br><span class="line">//console.log(&quot;a = &quot;+a+&quot;, b = &quot;+b);</span><br><span class="line">console.log(this.name);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line">//创建一个对象</span><br><span class="line">var obj = &#123;</span><br><span class="line">name:&quot;孙悟空&quot;,</span><br><span class="line">sayName:fun</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">var obj2 = &#123;</span><br><span class="line">name:&quot;沙和尚&quot;,</span><br><span class="line">sayName:fun</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">//console.log(obj.sayName == fun);</span><br><span class="line">var name = &quot;全局的name属性&quot;;</span><br><span class="line">//obj.sayName();</span><br><span class="line">//以函数形式调用，this是window</span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line">//以方法的形式调用，this是调用方法的对象</span><br><span class="line">//obj.sayName();</span><br><span class="line">obj2.sayName();</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h2 id="this-2"><a class="markdownIt-Anchor" href="#this-2"></a> this</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">//创建一个name变量</span><br><span class="line">var name = &quot;全局&quot;;</span><br><span class="line"></span><br><span class="line">//创建一个fun()函数</span><br><span class="line">function fun()&#123;</span><br><span class="line">console.log(this.name);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//创建两个对象</span><br><span class="line">var obj = &#123;</span><br><span class="line">name:&quot;孙悟空&quot;,</span><br><span class="line">sayName:fun</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">var obj2 = &#123;</span><br><span class="line">name:&quot;沙和尚&quot;,</span><br><span class="line">sayName:fun</span><br><span class="line">&#125;;</span><br><span class="line">fun()</span><br><span class="line">//我们希望调用obj.sayName()时可以输出obj的名字</span><br><span class="line">obj.sayName();</span><br><span class="line"></span><br><span class="line">obj2.sayName();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h2 id="对象-2"><a class="markdownIt-Anchor" href="#对象-2"></a> 对象</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个对象</span><br><span class="line"> */</span><br><span class="line">var obj = &#123;</span><br><span class="line">name:&quot;孙悟空&quot;,</span><br><span class="line">age:18,</span><br><span class="line">gender:&quot;男&quot;,</span><br><span class="line">sayName:function()&#123;</span><br><span class="line">alert(this.name);</span><br><span class="line">&#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用工厂方法创建对象</span><br><span class="line"> * 通过该方法可以大批量的创建对象</span><br><span class="line"> */</span><br><span class="line">function createPerson(name , age ,gender)&#123;</span><br><span class="line">//创建一个新的对象 </span><br><span class="line">var obj = new Object();</span><br><span class="line">//向对象中添加属性</span><br><span class="line">obj.name = name;</span><br><span class="line">obj.age = age;</span><br><span class="line">obj.gender = gender;</span><br><span class="line">obj.sayName = function()&#123;</span><br><span class="line">alert(this.name);</span><br><span class="line">&#125;;</span><br><span class="line">//将新的对象返回</span><br><span class="line">return obj;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 用来创建狗的对象</span><br><span class="line"> */</span><br><span class="line">function createDog(name , age)&#123;</span><br><span class="line">var obj = new Object();</span><br><span class="line">obj.name = name;</span><br><span class="line">obj.age = age;</span><br><span class="line">obj.sayHello = function()&#123;</span><br><span class="line">alert(&quot;汪汪~~&quot;);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">return obj;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var obj2 = createPerson(&quot;猪八戒&quot;,28,&quot;男&quot;);</span><br><span class="line">var obj3 = createPerson(&quot;白骨精&quot;,16,&quot;女&quot;);</span><br><span class="line">var obj4 = createPerson(&quot;蜘蛛精&quot;,18,&quot;女&quot;);</span><br><span class="line">/*</span><br><span class="line"> * 使用工厂方法创建的对象，使用的构造函数都是Object</span><br><span class="line"> * 所以创建的对象都是Object这个类型，</span><br><span class="line"> * 就导致我们无法区分出多种不同类型的对象</span><br><span class="line"> */</span><br><span class="line">//创建一个狗的对象</span><br><span class="line">var dog = createDog(&quot;旺财&quot;,3);</span><br><span class="line"></span><br><span class="line">console.log(dog);</span><br><span class="line">console.log(obj4);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h2 id="构造函数"><a class="markdownIt-Anchor" href="#构造函数"></a> 构造函数</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个构造函数，专门用来创建Person对象的</span><br><span class="line"> * 构造函数就是一个普通的函数，创建方式和普通函数没有区别,</span><br><span class="line"> * 不同的是构造函数习惯上首字母大写</span><br><span class="line"> * </span><br><span class="line"> * 构造函数和普通函数的区别就是调用方式的不同</span><br><span class="line"> * 普通函数是直接调用，而构造函数需要使用new关键字来调用</span><br><span class="line"> * </span><br><span class="line"> * 构造函数的执行流程：</span><br><span class="line"> * 1.立刻创建一个新的对象</span><br><span class="line"> * 2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象</span><br><span class="line"> * 3.逐行执行函数中的代码</span><br><span class="line"> * 4.将新建的对象作为返回值返回</span><br><span class="line"> * </span><br><span class="line"> * 使用同一个构造函数创建的对象，我们称为一类对象，也将一个构造函数称为一个类。</span><br><span class="line"> * 我们将通过一个构造函数创建的对象，称为是该类的实例</span><br><span class="line"> * </span><br><span class="line"> * this的情况：</span><br><span class="line"> * 1.当以函数的形式调用时，this是window</span><br><span class="line"> * 2.当以方法的形式调用时，谁调用方法this就是谁</span><br><span class="line"> * 3.当以构造函数的形式调用时，this就是新创建的那个对象</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">function Person(name , age , gender)&#123;</span><br><span class="line">this.name = name;</span><br><span class="line">this.age = age;</span><br><span class="line">this.gender = gender;</span><br><span class="line">this.sayName = function()&#123;</span><br><span class="line">alert(this.name);</span><br><span class="line">&#125;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">function Dog()&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var per = new Person(&quot;孙悟空&quot;,18,&quot;男&quot;);</span><br><span class="line">var per2 = new Person(&quot;玉兔精&quot;,16,&quot;女&quot;);</span><br><span class="line">var per3 = new Person(&quot;奔波霸&quot;,38,&quot;男&quot;);</span><br><span class="line"></span><br><span class="line">var dog = new Dog();</span><br><span class="line"></span><br><span class="line">/*console.log(per);</span><br><span class="line">console.log(dog);*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用instanceof可以检查一个对象是否是一个类的实例</span><br><span class="line"> * 语法：</span><br><span class="line"> * 对象 instanceof 构造函数</span><br><span class="line"> * 如果是，则返回true，否则返回false</span><br><span class="line"> */</span><br><span class="line">//console.log(per instanceof Person);</span><br><span class="line">//console.log(dog instanceof Person);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 所有的对象都是Object的后代，</span><br><span class="line"> * 所以任何对象和Object左instanceof检查时都会返回true</span><br><span class="line"> */</span><br><span class="line">//console.log(dog instanceof Object);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="构造函数2"><a class="markdownIt-Anchor" href="#构造函数2"></a> 构造函数2</h3><p><img src="/images/javawz/image-20260309144036992.png" alt="image-20260309144036992"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 创建一个Person构造函数</span><br><span class="line"> * - 在Person构造函数中，为每一个对象都添加了一个sayName方法，</span><br><span class="line"> * 目前我们的方法是在构造函数内部创建的，</span><br><span class="line"> * 也就是构造函数每执行一次就会创建一个新的sayName方法</span><br><span class="line"> * 也是所有实例的sayName都是唯一的。</span><br><span class="line"> * 这样就导致了构造函数执行一次就会创建一个新的方法，</span><br><span class="line"> * 执行10000次就会创建10000个新的方法，而10000个方法都是一摸一样的</span><br><span class="line"> * 这是完全没有必要，完全可以使所有的对象共享同一个方法</span><br><span class="line"> */</span><br><span class="line">function Person(name , age , gender)&#123;</span><br><span class="line">this.name = name;</span><br><span class="line">this.age = age;</span><br><span class="line">this.gender = gender;</span><br><span class="line">//向对象中添加一个方法</span><br><span class="line">//this.sayName = fun;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//将sayName方法在全局作用域中定义</span><br><span class="line">/*</span><br><span class="line"> * 将函数定义在全局作用域，污染了全局作用域的命名空间</span><br><span class="line"> * 而且定义在全局作用域中也很不安全</span><br><span class="line"> */</span><br><span class="line">/*function fun()&#123;</span><br><span class="line">alert(&quot;Hello大家好，我是:&quot;+this.name);</span><br><span class="line">&#125;;*/</span><br><span class="line">//向原型中添加sayName方法</span><br><span class="line">Person.prototype.sayName = function()&#123;</span><br><span class="line">alert(&quot;Hello大家好，我是:&quot;+this.name);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">//创建一个Person的实例</span><br><span class="line">var per = new Person(&quot;孙悟空&quot;,18,&quot;男&quot;);</span><br><span class="line">var per2 = new Person(&quot;猪八戒&quot;,28,&quot;男&quot;);</span><br><span class="line">per.sayName();</span><br><span class="line">per2.sayName();</span><br><span class="line"></span><br><span class="line">//console.log(per.sayName == per2.sayName);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><p><br><br></p><h3 id="原型1"><a class="markdownIt-Anchor" href="#原型1"></a> 原型1</h3><p><img src="/images/javawz/image-20260309144036992.png" alt="image-20260309144036992"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 原型 prototype</span><br><span class="line"> * </span><br><span class="line"> * 我们所创建的每一个函数，解析器都会向函数中添加一个属性prototype</span><br><span class="line"> * 这个属性对应着一个对象，这个对象就是我们所谓的原型对象</span><br><span class="line"> * 如果函数作为普通函数调用prototype没有任何作用</span><br><span class="line"> * 当函数以构造函数的形式调用时，它所创建的对象中都会有一个隐含的属性，</span><br><span class="line"> * 指向该构造函数的原型对象，我们可以通过__proto__来访问该属性</span><br><span class="line"> * </span><br><span class="line"> * 原型对象就相当于一个公共的区域，所有同一个类的实例都可以访问到这个原型对象，</span><br><span class="line"> * 我们可以将对象中共有的内容，统一设置到原型对象中。</span><br><span class="line"> * </span><br><span class="line"> * 当我们访问对象的一个属性或方法时，它会先在对象自身中寻找，如果有则直接使用，</span><br><span class="line"> * 如果没有则会去原型对象中寻找，如果找到则直接使用</span><br><span class="line"> * </span><br><span class="line"> * 以后我们创建构造函数时，可以将这些对象共有的属性和方法，统一添加到构造函数的原型对象中，</span><br><span class="line"> * 这样不用分别为每一个对象添加，也不会影响到全局作用域，就可以使每个对象都具有这些属性和方法了</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function MyClass()&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//向MyClass的原型中添加属性a</span><br><span class="line">MyClass.prototype.a = 123;</span><br><span class="line"></span><br><span class="line">//向MyClass的原型中添加一个方法</span><br><span class="line">MyClass.prototype.sayHello = function()&#123;</span><br><span class="line">alert(&quot;hello&quot;);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">var mc = new MyClass();</span><br><span class="line"></span><br><span class="line">var mc2 = new MyClass();</span><br><span class="line"></span><br><span class="line">//console.log(MyClass.prototype);</span><br><span class="line">//console.log(mc2.__proto__ == MyClass.prototype);</span><br><span class="line"></span><br><span class="line">//向mc中添加a属性</span><br><span class="line">mc.a = &quot;我是mc中的a&quot;;</span><br><span class="line"></span><br><span class="line">//console.log(mc2.a);</span><br><span class="line"></span><br><span class="line">mc.sayHello();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><p><br><br></p><h3 id="原型2"><a class="markdownIt-Anchor" href="#原型2"></a> 原型2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">prototype是给构造函数用的,__proto__是给对象使用的</span><br><span class="line">构造函数名.prototype是给构造函数名用的,</span><br><span class="line">对象名.__proto__</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个构造函数</span><br><span class="line"> */</span><br><span class="line">function MyClass()&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//向MyClass的原型中添加一个name属性</span><br><span class="line">MyClass.prototype.name = &quot;我是原型中的名字&quot;;</span><br><span class="line"></span><br><span class="line">var mc = new MyClass();</span><br><span class="line">mc.age = 18;</span><br><span class="line"></span><br><span class="line">//console.log(mc.name);</span><br><span class="line"></span><br><span class="line">//使用in检查对象中是否含有某个属性时，如果对象中没有但是原型中有，也会返回true</span><br><span class="line">//console.log(&quot;name&quot; in mc);</span><br><span class="line"></span><br><span class="line">//可以使用对象的hasOwnProperty()来检查对象自身中是否含有该属性</span><br><span class="line">//使用该方法只有当对象自身中含有属性时，才会返回true</span><br><span class="line">//console.log(mc.hasOwnProperty(&quot;age&quot;));</span><br><span class="line"></span><br><span class="line">//console.log(mc.hasOwnProperty(&quot;hasOwnProperty&quot;));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 原型对象也是对象，所以它也有原型，</span><br><span class="line"> * 当我们使用一个对象的属性或方法时，会现在自身中寻找，</span><br><span class="line"> * 自身中如果有，则直接使用，</span><br><span class="line"> * 如果没有则去原型对象中寻找，如果原型对象中有，则使用，</span><br><span class="line"> * 如果没有则去原型的原型中寻找,直到找到Object对象的原型，</span><br><span class="line"> * Object对象的原型没有原型，如果在Object原型中依然没有找到，则返回undefined</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//console.log(mc.__proto__.hasOwnProperty(&quot;hasOwnProperty&quot;));</span><br><span class="line"></span><br><span class="line">//console.log(mc.__proto__.__proto__.hasOwnProperty(&quot;hasOwnProperty&quot;));</span><br><span class="line"></span><br><span class="line">//console.log(mc.__proto__.__proto__.__proto__);</span><br><span class="line"></span><br><span class="line">//console.log(mc.hello);</span><br><span class="line"></span><br><span class="line">//console.log(mc.__proto__.__proto__.__proto__)</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><p><br><br></p><h3 id="重新写tostring方法"><a class="markdownIt-Anchor" href="#重新写tostring方法"></a> 重新写toString方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">function Person(name , age , gender)&#123;</span><br><span class="line">this.name = name;</span><br><span class="line">this.age = age;</span><br><span class="line">this.gender = gender;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//修改Person原型的toString</span><br><span class="line">Person.prototype.toString = function()&#123;</span><br><span class="line">return &quot;Person[name=&quot;+this.name+&quot;,age=&quot;+this.age+&quot;,gender=&quot;+this.gender+&quot;]&quot;;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//创建一个Person实例</span><br><span class="line">var per = new Person(&quot;孙悟空&quot;,18,&quot;男&quot;);</span><br><span class="line">var per2 = new Person(&quot;猪八戒&quot;,28,&quot;男&quot;);</span><br><span class="line"></span><br><span class="line">//当我们直接在页面中打印一个对象时，事件上是输出的对象的toString()方法的返回值</span><br><span class="line">//如果我们希望在输出对象时不输出[object Object]，可以为对象添加一个toString()方法</span><br><span class="line">//Person[name=孙悟空,age=18,gender=男]</span><br><span class="line">/*per.toString = function()&#123;</span><br><span class="line">return &quot;Person[name=&quot;+this.name+&quot;,age=&quot;+this.age+&quot;,gender=&quot;+this.gender+&quot;]&quot;;</span><br><span class="line">&#125;;*/</span><br><span class="line"></span><br><span class="line">var result = per.toString();</span><br><span class="line">//console.log(&quot;result = &quot; + result);</span><br><span class="line">//console.log(per.__proto__.__proto__.hasOwnProperty(&quot;toString&quot;));</span><br><span class="line">console.log(per2);</span><br><span class="line">console.log(per);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><h3 id="垃圾回收"><a class="markdownIt-Anchor" href="#垃圾回收"></a> 垃圾回收</h3><p><img src="/images/javawz/image-20260309144327334.png" alt="image-20260309144327334"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 垃圾回收（GC）</span><br><span class="line"> * - 就像人生活的时间长了会产生垃圾一样，程序运行过程中也会产生垃圾</span><br><span class="line"> * 这些垃圾积攒过多以后，会导致程序运行的速度过慢，</span><br><span class="line"> * 所以我们需要一个垃圾回收的机制，来处理程序运行过程中产生垃圾</span><br><span class="line"> *  - 当一个对象没有任何的变量或属性对它进行引用，此时我们将永远无法操作该对象，</span><br><span class="line"> * 此时这种对象就是一个垃圾，这种对象过多会占用大量的内存空间，导致程序运行变慢，</span><br><span class="line"> * 所以这种垃圾必须进行清理。</span><br><span class="line"> * - 在JS中拥有自动的垃圾回收机制，会自动将这些垃圾对象从内存中销毁，</span><br><span class="line"> * 我们不需要也不能进行垃圾回收的操作</span><br><span class="line"> * - 我们需要做的只是要将不再使用的对象设置null即可</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">var obj = new Object();</span><br><span class="line"></span><br><span class="line">//对对象进行各种操作。。。。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">obj = null;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="数组1"><a class="markdownIt-Anchor" href="#数组1"></a> 数组1</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 内建对象</span><br><span class="line"> * 宿主对象</span><br><span class="line"> * 自定义对象</span><br><span class="line"> * </span><br><span class="line"> * 数组（Array）</span><br><span class="line"> * - 数组也是一个对象</span><br><span class="line"> * - 它和我们普通对象功能类似，也是用来存储一些值的</span><br><span class="line"> * - 不同的是普通对象是使用字符串作为属性名的，</span><br><span class="line"> * 而数组时使用数字来作为索引操作元素</span><br><span class="line"> * - 索引：</span><br><span class="line"> * 从0开始的整数就是索引</span><br><span class="line"> * - 数组的存储性能比普通对象要好，在开发中我们经常使用数组来存储一些数据</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建数组对象</span><br><span class="line">var arr = new Array();</span><br><span class="line"></span><br><span class="line">//使用typeof检查一个数组时，会返回object</span><br><span class="line">//console.log(typeof arr);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 向数组中添加元素</span><br><span class="line"> * 语法：数组[索引] = 值</span><br><span class="line"> */</span><br><span class="line">arr[0] = 10;</span><br><span class="line">arr[1] = 33;</span><br><span class="line">arr[2] = 22;</span><br><span class="line">arr[3] = 44;</span><br><span class="line">/*arr[10] = 31;</span><br><span class="line">arr[100] = 90;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 读取数组中的元素</span><br><span class="line"> * 语法：数组[索引]</span><br><span class="line"> * 如果读取不存在的索引，他不会报错而是返回undefined</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//console.log(arr[3]);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 获取数组的长度</span><br><span class="line"> * 可以使用length属性来获取数组的长度(元素的个数)</span><br><span class="line"> * 语法：数组.length</span><br><span class="line"> * </span><br><span class="line"> * 对于连续的数组，使用length可以获取到数组的长度（元素的个数）</span><br><span class="line"> * 对于非连续的数组，使用length会获取到数组的最大的索引+1</span><br><span class="line"> * 尽量不要创建非连续的数组</span><br><span class="line"> */</span><br><span class="line">/*console.log(arr.length);</span><br><span class="line">console.log(arr);*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 修改length</span><br><span class="line"> * 如果修改的length大于原长度，则多出部分会空出来</span><br><span class="line"> *  如果修改的length小于原长度，则多出的元素会被删除</span><br><span class="line"> */</span><br><span class="line">//arr.length = 10;</span><br><span class="line"></span><br><span class="line">/*arr.length = 2;</span><br><span class="line"></span><br><span class="line">console.log(arr.length);</span><br><span class="line">console.log(arr);*/</span><br><span class="line"></span><br><span class="line">arr[4] = 50;</span><br><span class="line">arr[5] = 60;</span><br><span class="line"></span><br><span class="line">//向数组的最后一个位置添加元素</span><br><span class="line">//语法：数组[数组.length] = 值;</span><br><span class="line">arr[arr.length] = 70;</span><br><span class="line">arr[arr.length] = 80;</span><br><span class="line">arr[arr.length] = 90;</span><br><span class="line"></span><br><span class="line">console.log(arr);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="数组2"><a class="markdownIt-Anchor" href="#数组2"></a> 数组2</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=<span class="string">"UTF-8"</span>&gt;</span><br><span class="line">&lt;title&gt;<span class="xml"><span class="tag">&lt;/<span class="name">title</span>&gt;</span></span></span><br><span class="line">&lt;script type=<span class="string">"text/javascript"</span>&gt;</span><br><span class="line"></span><br><span class="line"><span class="comment">//创建一个数组</span></span><br><span class="line"><span class="comment">//var arr = new Array();</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//使用字面量来创建数组</span></span><br><span class="line"><span class="comment">//语法:[]</span></span><br><span class="line"><span class="comment">//var arr = [];</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//console.log(typeof arr);</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//使用字面量创建数组时，可以在创建时就指定数组中的元素</span></span><br><span class="line"><span class="keyword">var</span> arr = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="number">10</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//console.log(arr[3]);</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//使用构造函数创建数组时，也可以同时添加元素，将要添加的元素作文构造函数的参数传递</span></span><br><span class="line"><span class="comment">//元素之间使用,隔开</span></span><br><span class="line"><span class="keyword">var</span> arr2 = <span class="keyword">new</span> <span class="built_in">Array</span>(<span class="number">10</span>,<span class="number">20</span>,<span class="number">30</span>);</span><br><span class="line"><span class="comment">//console.log(arr2);</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//创建一个数组数组中只有一个元素10</span></span><br><span class="line">arr = [<span class="number">10</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//创建一个长度为10的数组</span></span><br><span class="line">arr2 = <span class="keyword">new</span> <span class="built_in">Array</span>(<span class="number">10</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">//console.log(arr2.length);</span></span><br><span class="line"><span class="comment">//数组中的元素可以是任意的数据类型</span></span><br><span class="line">arr = [<span class="string">"hello"</span>,<span class="number">1</span>,<span class="literal">true</span>,<span class="literal">null</span>,<span class="literal">undefined</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//也可以是对象</span></span><br><span class="line"><span class="keyword">var</span> obj = &#123;<span class="attr">name</span>:<span class="string">"孙悟空"</span>&#125;;</span><br><span class="line">arr[arr.length] = obj;</span><br><span class="line">arr = [&#123;<span class="attr">name</span>:<span class="string">"孙悟空"</span>&#125;,&#123;<span class="attr">name</span>:<span class="string">"沙和尚"</span>&#125;,&#123;<span class="attr">name</span>:<span class="string">"猪八戒"</span>&#125;];</span><br><span class="line"></span><br><span class="line"><span class="comment">//也可以是一个函数</span></span><br><span class="line">arr = [<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;alert(<span class="number">1</span>)&#125;,<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;alert(<span class="number">2</span>)&#125;];</span><br><span class="line"></span><br><span class="line"><span class="comment">//console.log(arr);</span></span><br><span class="line"><span class="comment">//arr[0]();</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//数组中也可以放数组，如下这种数组我们称为二维数组</span></span><br><span class="line">arr = [[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>],[<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>],[<span class="number">5</span>,<span class="number">6</span>,<span class="number">7</span>]];</span><br><span class="line"><span class="built_in">console</span>.log(arr[<span class="number">1</span>]);</span><br><span class="line"></span><br><span class="line">&lt;<span class="regexp">/script&gt;</span></span><br><span class="line"><span class="regexp">&lt;/</span>head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;<span class="regexp">/body&gt;</span></span><br><span class="line"><span class="regexp">&lt;/</span>html&gt;</span><br></pre></td></tr></table></figure><h3 id="数组的方法"><a class="markdownIt-Anchor" href="#数组的方法"></a> 数组的方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">//创建一个数组</span><br><span class="line">var arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;];</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * push()</span><br><span class="line"> * - 该方法可以向数组的末尾添加一个或多个元素，并返回数组的新的长度</span><br><span class="line"> * - 可以将要添加的元素作为方法的参数传递，</span><br><span class="line"> * 这样这些元素将会自动添加到数组的末尾</span><br><span class="line"> * - 该方法会将数组新的长度作为返回值返回</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var result = arr.push(&quot;唐僧&quot;,&quot;蜘蛛精&quot;,&quot;白骨精&quot;,&quot;玉兔精&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//console.log(arr);</span><br><span class="line">//console.log(&quot;result = &quot;+result);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * pop()</span><br><span class="line"> * - 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回</span><br><span class="line"> */</span><br><span class="line">result = arr.pop();</span><br><span class="line">/*console.log(arr);</span><br><span class="line">console.log(&quot;result = &quot;+result);*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * unshift()</span><br><span class="line"> * - 向数组开头添加一个或多个元素，并返回新的数组长度</span><br><span class="line"> * - 向前边插入元素以后，其他的元素索引会依次调整</span><br><span class="line"> */</span><br><span class="line">//console.log(arr);</span><br><span class="line"></span><br><span class="line">arr.unshift(&quot;牛魔王&quot;,&quot;二郎神&quot;);</span><br><span class="line"></span><br><span class="line">console.log(arr);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * shift()</span><br><span class="line"> * - 可以删除数组的第一个元素，并将被删除的元素作为返回值返回</span><br><span class="line"> */</span><br><span class="line">result = arr.shift();</span><br><span class="line">result = arr.shift();</span><br><span class="line"></span><br><span class="line">console.log(arr);</span><br><span class="line">console.log(&quot;result = &quot;+result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="数组的遍历"><a class="markdownIt-Anchor" href="#数组的遍历"></a> 数组的遍历</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">//创建一个数组</span><br><span class="line">var arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;,&quot;唐僧&quot;,&quot;白骨精&quot;];</span><br><span class="line"></span><br><span class="line">//所谓的遍历数组，就是将数组中所有的元素都取出来</span><br><span class="line">/*console.log(arr[0]);</span><br><span class="line">console.log(arr[1]);</span><br><span class="line">console.log(arr[2]);</span><br><span class="line">console.log(arr[3]);*/</span><br><span class="line"></span><br><span class="line">for(var i=0 ; i&lt;arr.length ; i++)&#123;</span><br><span class="line">console.log(arr[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="练习-2"><a class="markdownIt-Anchor" href="#练习-2"></a> 练习</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">function Person(name , age , gender)&#123;</span><br><span class="line">this.name = name;</span><br><span class="line">this.age = age;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//修改Person原型的toString</span><br><span class="line">Person.prototype.toString = function()&#123;</span><br><span class="line">return &quot;Person[name=&quot;+this.name+&quot;,age=&quot;+this.age+&quot;]&quot;;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">//创建一个Person对象</span><br><span class="line">var per = new Person(&quot;孙悟空&quot;,18);</span><br><span class="line">var per2 = new Person(&quot;猪八戒&quot;,28);</span><br><span class="line">var per3 = new Person(&quot;红孩儿&quot;,8);</span><br><span class="line">var per4 = new Person(&quot;蜘蛛精&quot;,16);</span><br><span class="line">var per5 = new Person(&quot;二郎神&quot;,38);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 将这些person对象放入到一个数组中</span><br><span class="line"> */</span><br><span class="line">var perArr = [per,per2,per3,per4,per5];</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个函数，可以将perArr中的满18岁的Person提取出来，</span><br><span class="line"> * 然后封装到一个新的数组中并返回</span><br><span class="line"> * arr</span><br><span class="line"> * 形参，要提取信息的数组</span><br><span class="line"> */</span><br><span class="line">function getAdult(arr)&#123;</span><br><span class="line">//创建一个新的数组</span><br><span class="line">var newArr = [];</span><br><span class="line"></span><br><span class="line">//遍历arr，获取arr中Person对象</span><br><span class="line">for(var i=0 ; i&lt;arr.length ; i++)&#123;</span><br><span class="line">var p = arr[i];</span><br><span class="line">//判断Person对象的age是否大于等于18</span><br><span class="line">if(p.age &gt;= 18)&#123;</span><br><span class="line">//如果大于等于18，则将这个对象添加到newArr中</span><br><span class="line">//将对象放入到新数组中</span><br><span class="line">newArr.push(p);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">//将新的数组返回</span><br><span class="line">return newArr;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var result = getAdult(perArr);</span><br><span class="line"></span><br><span class="line">console.log(result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="foreach"><a class="markdownIt-Anchor" href="#foreach"></a> forEach</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 一般我们都是使用for循环去遍历数组，</span><br><span class="line"> * JS中还为我们提供了一个方法，用来遍历数组</span><br><span class="line"> * forEach()</span><br><span class="line"> * - 这个方法只支持IE8以上的浏览器</span><br><span class="line"> * IE8及以下的浏览器均不支持该方法，所以如果需要兼容IE8，则不要使用forEach</span><br><span class="line"> * 还是使用for循环来遍历</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建一个数组</span><br><span class="line">var arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;,&quot;唐僧&quot;,&quot;白骨精&quot;];</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * forEach()方法需要一个函数作为参数</span><br><span class="line"> * - 像这种函数，由我们创建但是不由我们调用的，我们称为回调函数</span><br><span class="line"> * - 数组中有几个元素函数就会执行几次，每次执行时，浏览器会将遍历到的元素</span><br><span class="line"> * 以实参的形式传递进来，我们可以来定义形参，来读取这些内容</span><br><span class="line"> * - 浏览器会在回调函数中传递三个参数：</span><br><span class="line"> * 第一个参数，就是当前正在遍历的元素</span><br><span class="line"> * 第二个参数，就是当前正在遍历的元素的索引</span><br><span class="line"> * 第三个参数，就是正在遍历的数组</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">arr.forEach(function(value , index , obj)&#123;</span><br><span class="line">console.log(value);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="数组的方法-2"><a class="markdownIt-Anchor" href="#数组的方法-2"></a> 数组的方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">var arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;,&quot;唐僧&quot;,&quot;白骨精&quot;];</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * slice()</span><br><span class="line"> * - 可以用来从数组提取指定元素</span><br><span class="line"> * - 该方法不会改变元素数组，而是将截取到的元素封装到一个新数组中返回</span><br><span class="line"> * - 参数：</span><br><span class="line"> * 1.截取开始的位置的索引,包含开始索引</span><br><span class="line"> * 2.截取结束的位置的索引,不包含结束索引</span><br><span class="line"> * - 第二个参数可以省略不写,此时会截取从开始索引往后的所有元素</span><br><span class="line"> * - 索引可以传递一个负值，如果传递一个负值，则从后往前计算</span><br><span class="line"> * -1 倒数第一个</span><br><span class="line"> * -2 倒数第二个</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var result = arr.slice(1,4);</span><br><span class="line"></span><br><span class="line">result = arr.slice(3);</span><br><span class="line"></span><br><span class="line">result = arr.slice(1,-2);</span><br><span class="line"></span><br><span class="line">//console.log(result);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * splice()</span><br><span class="line"> * - 可以用于删除数组中的指定元素</span><br><span class="line"> * - 使用splice()会影响到原数组，会将指定元素从原数组中删除</span><br><span class="line"> * 并将被删除的元素作为返回值返回</span><br><span class="line"> * - 参数：</span><br><span class="line"> * 第一个，表示开始位置的索引</span><br><span class="line"> * 第二个，表示删除的数量</span><br><span class="line"> * (可选)第三个及以后。。</span><br><span class="line"> * 可以传递一些新的元素，这些元素将会自动插入到开始位置索引前边</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;,&quot;唐僧&quot;,&quot;白骨精&quot;];</span><br><span class="line">var result = arr.splice(3,0,&quot;牛魔王&quot;,&quot;铁扇公主&quot;,&quot;红孩儿&quot;);</span><br><span class="line"></span><br><span class="line">console.log(arr);</span><br><span class="line">//console.log(result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="练习-3"><a class="markdownIt-Anchor" href="#练习-3"></a> 练习</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">//创建一个数组</span><br><span class="line">var arr = [1,2,3,2,2,1,3,4,2,5];</span><br><span class="line"></span><br><span class="line">//去除数组中重复的数字</span><br><span class="line">//获取数组中的每一个元素</span><br><span class="line">for(var i=0 ; i&lt;arr.length ; i++)&#123;</span><br><span class="line">//console.log(arr[i]);</span><br><span class="line">/*获取当前元素后的所有元素*/</span><br><span class="line">for(var j=i+1 ; j&lt;arr.length ; j++)&#123;</span><br><span class="line">//console.log(&quot;----&gt;&quot;+arr[j]);</span><br><span class="line">//判断两个元素的值是否相等</span><br><span class="line">if(arr[i] == arr[j])&#123;</span><br><span class="line">//如果相等则证明出现了重复的元素，则删除j对应的元素</span><br><span class="line">arr.splice(j,1);</span><br><span class="line">//当删除了当前j所在的元素以后，后边的元素会自动补位</span><br><span class="line">//此时将不会在比较这个元素吧，我需要在比较一次j所在位置的元素</span><br><span class="line">//使j自减</span><br><span class="line">j--;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">console.log(arr);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="数组的剩余方法"><a class="markdownIt-Anchor" href="#数组的剩余方法"></a> 数组的剩余方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">var arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;];</span><br><span class="line">var arr2 = [&quot;白骨精&quot;,&quot;玉兔精&quot;,&quot;蜘蛛精&quot;];</span><br><span class="line">var arr3 = [&quot;二郎神&quot;,&quot;太上老君&quot;,&quot;玉皇大帝&quot;];</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * concat()可以连接两个或多个数组，并将新的数组返回</span><br><span class="line"> * - 该方法不会对原数组产生影响</span><br><span class="line"> */</span><br><span class="line">var result = arr.concat(arr2,arr3,&quot;牛魔王&quot;,&quot;铁扇公主&quot;);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * join()</span><br><span class="line"> * - 该方法可以将数组转换为一个字符串</span><br><span class="line"> * - 该方法不会对原数组产生影响，而是将转换后的字符串作为结果返回</span><br><span class="line"> * - 在join()中可以指定一个字符串作为参数，这个字符串将会成为数组中元素的连接符</span><br><span class="line"> * 如果不指定连接符，则默认使用,作为连接符</span><br><span class="line"> */</span><br><span class="line">arr = [&quot;孙悟空&quot;,&quot;猪八戒&quot;,&quot;沙和尚&quot;,&quot;唐僧&quot;];</span><br><span class="line"></span><br><span class="line">result = arr.join(&quot;@-@&quot;);</span><br><span class="line">/*</span><br><span class="line"> * reverse()</span><br><span class="line"> * - 该方法用来反转数组（前边的去后边，后边的去前边）</span><br><span class="line"> * - 该方法会直接修改原数组</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">arr.reverse();</span><br><span class="line"></span><br><span class="line">//console.log(arr);</span><br><span class="line"></span><br><span class="line">arr = [&quot;b&quot;,&quot;d&quot;,&quot;e&quot;,&quot;a&quot;,&quot;c&quot;];</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * sort()</span><br><span class="line"> * - 可以用来对数组中的元素进行排序</span><br><span class="line"> * - 也会影响原数组，默认会按照Unicode编码进行排序</span><br><span class="line"> */</span><br><span class="line">arr.sort();</span><br><span class="line">//arr.reverse();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 即使对于纯数字的数组，使用sort()排序时，也会按照Unicode编码来排序，</span><br><span class="line"> * 所以对数字进排序时，可能会得到错误的结果。</span><br><span class="line"> * </span><br><span class="line"> * 我们可以自己来指定排序的规则</span><br><span class="line"> * 我们可以在sort()添加一个回调函数，来指定排序规则，</span><br><span class="line"> * 回调函数中需要定义两个形参,</span><br><span class="line"> * 浏览器将会分别使用数组中的元素作为实参去调用回调函数</span><br><span class="line"> * 使用哪个元素调用不确定，但是肯定的是在数组中a一定在b前边</span><br><span class="line"> * - 浏览器会根据回调函数的返回值来决定元素的顺序，</span><br><span class="line"> * 如果返回一个大于0的值，则元素会交换位置</span><br><span class="line"> * 如果返回一个小于0的值，则元素位置不变</span><br><span class="line"> * 如果返回一个0，则认为两个元素相等，也不交换位置</span><br><span class="line"> * </span><br><span class="line"> * - 如果需要升序排列，则返回 a-b</span><br><span class="line"> * 如果需要降序排列，则返回b-a</span><br><span class="line"> */</span><br><span class="line">arr = [5,4,2,1,3,6,8,7];</span><br><span class="line"></span><br><span class="line">arr.sort(function(a,b)&#123;</span><br><span class="line"></span><br><span class="line">//前边的大</span><br><span class="line">/*if(a &gt; b)&#123;</span><br><span class="line">return -1;</span><br><span class="line">&#125;else if(a &lt; b)&#123;</span><br><span class="line">return 1;</span><br><span class="line">&#125;else&#123;</span><br><span class="line">return 0;</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">//升序排列</span><br><span class="line">//return a - b;</span><br><span class="line"></span><br><span class="line">//降序排列</span><br><span class="line">return b - a;</span><br><span class="line"></span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">console.log(arr);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="函数的方法"><a class="markdownIt-Anchor" href="#函数的方法"></a> 函数的方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line"></span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">function fun(a,b) &#123;</span><br><span class="line">console.log(&quot;a = &quot;+a);</span><br><span class="line">console.log(&quot;b = &quot;+b);</span><br><span class="line">//alert(this);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var obj = &#123;</span><br><span class="line">name: &quot;obj&quot;,</span><br><span class="line">sayName:function()&#123;</span><br><span class="line">alert(this.name);</span><br><span class="line">&#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * call()和apply()</span><br><span class="line"> * - 这两个方法都是函数对象的方法，需要通过函数对象来调用</span><br><span class="line"> * - 当对函数调用call()和apply()都会调用函数执行</span><br><span class="line"> * - 在调用call()和apply()可以将一个对象指定为第一个参数</span><br><span class="line"> * 此时这个对象将会成为函数执行时的this</span><br><span class="line"> * - call()方法可以将实参在对象之后依次传递</span><br><span class="line"> * - apply()方法需要将实参封装到一个数组中统一传递</span><br><span class="line"> * </span><br><span class="line"> * - this的情况：</span><br><span class="line"> * 1.以函数形式调用时，this永远都是window</span><br><span class="line"> * 2.以方法的形式调用时，this是调用方法的对象</span><br><span class="line"> * 3.以构造函数的形式调用时，this是新创建的那个对象</span><br><span class="line"> * 4.使用call和apply调用时，this是指定的那个对象</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//fun.call(obj,2,3);</span><br><span class="line">fun.apply(obj,[2,3]);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">var obj2 = &#123;</span><br><span class="line">name: &quot;obj2&quot;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">/*fun.apply();</span><br><span class="line">fun.call();</span><br><span class="line">fun();*/</span><br><span class="line"></span><br><span class="line">//fun.call(obj);</span><br><span class="line">//fun.apply(obj);</span><br><span class="line"></span><br><span class="line">//fun();</span><br><span class="line"></span><br><span class="line">//obj.sayName.apply(obj2);</span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line"></span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="arguments"><a class="markdownIt-Anchor" href="#arguments"></a> arguments</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 在调用函数时，浏览器每次都会传递进两个隐含的参数：</span><br><span class="line"> * 1.函数的上下文对象 this</span><br><span class="line"> * 2.封装实参的对象 arguments</span><br><span class="line"> * - arguments是一个类数组对象,它也可以通过索引来操作数据，也可以获取长度</span><br><span class="line"> * - 在调用函数时，我们所传递的实参都会在arguments中保存</span><br><span class="line"> * - arguments.length可以用来获取实参的长度</span><br><span class="line"> * - 我们即使不定义形参，也可以通过arguments来使用实参，</span><br><span class="line"> * 只不过比较麻烦</span><br><span class="line"> * arguments[0] 表示第一个实参</span><br><span class="line"> * arguments[1] 表示第二个实参 。。。</span><br><span class="line"> *- 它里边有一个属性叫做callee，</span><br><span class="line"> * 这个属性对应一个函数对象，就是当前正在指向的函数的对象</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">function fun(a,b)&#123;</span><br><span class="line">//console.log(arguments instanceof Array);</span><br><span class="line">//console.log(Array.isArray(arguments));</span><br><span class="line">//console.log(arguments[1]);</span><br><span class="line">//console.log(arguments.length);</span><br><span class="line">console.log(arguments.callee == fun);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">fun(&quot;hello&quot;,true);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="date对象"><a class="markdownIt-Anchor" href="#date对象"></a> Date对象</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * Date对象</span><br><span class="line"> * - 在JS中使用Date对象来表示一个时间</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建一个Date对象</span><br><span class="line">//如果直接使用构造函数创建一个Date对象，则会封装为当前代码执行的时间</span><br><span class="line">var d = new Date();</span><br><span class="line"></span><br><span class="line">//创建一个指定的时间对象</span><br><span class="line">//需要在构造函数中传递一个表示时间的字符串作为参数</span><br><span class="line">//日期的格式  月份/日/年 时:分:秒</span><br><span class="line">var d2 = new Date(&quot;2/18/2011 11:10:30&quot;);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * getDate()</span><br><span class="line"> * - 获取当前日期对象是几日</span><br><span class="line"> */</span><br><span class="line">var date = d2.getDate();</span><br><span class="line">/*</span><br><span class="line"> * getDay()</span><br><span class="line"> * - 获取当前日期对象时周几</span><br><span class="line"> * - 会返回一个0-6的值</span><br><span class="line"> * 0 表示周日</span><br><span class="line"> * 1表示周一</span><br><span class="line"> * 。。。</span><br><span class="line"> */</span><br><span class="line">var day = d2.getDay();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * getMonth()</span><br><span class="line"> * d2 = new Date(&quot;12/18/2011 11:10:30&quot;);</span><br><span class="line"> * - 获取当前时间对象的月份</span><br><span class="line"> * - 会返回一个0-11的值</span><br><span class="line"> * 0 表示1月</span><br><span class="line"> * 1 表示2月</span><br><span class="line"> * 11 表示12月</span><br><span class="line"> */</span><br><span class="line">var month = d2.getMonth();</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * getFullYear()</span><br><span class="line"> * - 获取当前日期对象的年份</span><br><span class="line"> */</span><br><span class="line">var year = d2.getFullYear();</span><br><span class="line"></span><br><span class="line">//console.log(d2);</span><br><span class="line">//console.log(&quot;date = &quot;+date);</span><br><span class="line">//console.log(&quot;day = &quot;+day);</span><br><span class="line">//console.log(&quot;month = &quot;+month);</span><br><span class="line">//console.log(year);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * getTime()</span><br><span class="line"> * - 获取当前日期对象的时间戳</span><br><span class="line"> * - 时间戳，指的是从格林威治标准时间的1970年1月1日，0时0分0秒</span><br><span class="line"> * 到当前日期所花费的毫秒数（1秒 = 1000毫秒）</span><br><span class="line"> * - 计算机底层在保存时间时使用都是时间戳</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var time = d2.getTime();</span><br><span class="line"></span><br><span class="line">//console.log(time/1000/60/60/24/365);</span><br><span class="line"></span><br><span class="line">/*var d3 = new Date(&quot;1/1/1970 0:0:0&quot;);</span><br><span class="line">time = d3.getTime();</span><br><span class="line">console.log(time);*/</span><br><span class="line"></span><br><span class="line">//利用时间戳来测试代码的执行的性能</span><br><span class="line">//Date.now获取当前的时间戳</span><br><span class="line">var start = Date.now();</span><br><span class="line"></span><br><span class="line">for(var i=0 ; i&lt;100 ; i++)&#123;</span><br><span class="line">console.log(i);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var end = Date.now();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">console.log(&quot;执行了：&quot;+(end - start)+&quot;毫秒&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="math对象"><a class="markdownIt-Anchor" href="#math对象"></a> Math对象</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * Math</span><br><span class="line"> * - Math和其他的对象不同，它不是一个构造函数，</span><br><span class="line"> * 它属于一个工具类不用创建对象，它里边封装了数学运算相关的属性和方法</span><br><span class="line"> * - 比如</span><br><span class="line"> * Math.PI 表示的圆周率</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//console.log(Math.PI);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * abs()可以用来计算一个数的绝对值</span><br><span class="line"> */</span><br><span class="line">//console.log(Math.abs(-1));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * Math.ceil()</span><br><span class="line"> * - 可以对一个数进行向上取整，小数位只有有值就自动进1</span><br><span class="line"> * Math.floor()</span><br><span class="line"> * - 可以对一个数进行向下取整，小数部分会被舍掉</span><br><span class="line"> * Math.round()</span><br><span class="line"> * - 可以对一个数进行四舍五入取整</span><br><span class="line"> */</span><br><span class="line">//console.log(Math.ceil(1.1));</span><br><span class="line">//console.log(Math.floor(1.99));</span><br><span class="line">//console.log(Math.round(1.4));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * Math.random()</span><br><span class="line"> * - 可以用来生成一个0-1之间的随机数</span><br><span class="line"> *  - 生成一个0-10的随机数</span><br><span class="line"> * - 生成一个0-x之间的随机数</span><br><span class="line"> * Math.round(Math.random()*x)</span><br><span class="line"> * </span><br><span class="line"> * - 生成一个1-10</span><br><span class="line"> * - 生成一个x-y之间的随机数</span><br><span class="line"> * Math.round(Math.random()*(y-x)+x)</span><br><span class="line"> */</span><br><span class="line">/*for(var i=0 ; i&lt;100 ; i++)&#123;</span><br><span class="line">//console.log(Math.round(Math.random()*10));</span><br><span class="line">//console.log(Math.round(Math.random()*20));</span><br><span class="line"></span><br><span class="line">//console.log(Math.round(Math.random()*9)+1);</span><br><span class="line">//console.log(Math.round(Math.random()*8)+2);</span><br><span class="line"></span><br><span class="line">//生成1-6之间的随机数</span><br><span class="line">console.log(Math.round(Math.random()*5+1));</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * max() 可以获取多个数中的最大值</span><br><span class="line"> * min() 可以获取多个数中的最小值</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var max = Math.max(10,45,30,100);</span><br><span class="line">var min = Math.min(10,45,30,100);</span><br><span class="line">//console.log(min);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * Math.pow(x,y)</span><br><span class="line"> * 返回x的y次幂</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//console.log(Math.pow(12,3));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * Math.sqrt()</span><br><span class="line"> *  用于对一个数进行开方运算</span><br><span class="line"> */</span><br><span class="line">console.log(Math.sqrt(2));</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="包装类"><a class="markdownIt-Anchor" href="#包装类"></a> 包装类</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 基本数据类型</span><br><span class="line"> * String Number Boolean Null Undefined</span><br><span class="line"> * 引用数据类型</span><br><span class="line"> * Object</span><br><span class="line"> * </span><br><span class="line"> * 在JS中为我们提供了三个包装类，通过这三个包装类可以将基本数据类型的数据转换为对象</span><br><span class="line"> * String()</span><br><span class="line"> * - 可以将基本数据类型字符串转换为String对象</span><br><span class="line"> * Number()</span><br><span class="line"> * - 可以将基本数据类型的数字转换为Number对象</span><br><span class="line"> *  Boolean()</span><br><span class="line"> * - 可以将基本数据类型的布尔值转换为Boolean对象</span><br><span class="line"> * 但是注意：我们在实际应用中不会使用基本数据类型的对象，</span><br><span class="line"> * 如果使用基本数据类型的对象，在做一些比较时可能会带来一些不可预期的结果</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建一个Number类型的对象</span><br><span class="line">//num = 3;</span><br><span class="line">var num = new Number(3);</span><br><span class="line">var num2 = new Number(3);</span><br><span class="line">var str = new String(&quot;hello&quot;);</span><br><span class="line">var str2 = new String(&quot;hello&quot;);</span><br><span class="line">var bool = new Boolean(true);</span><br><span class="line">var bool2 = true;</span><br><span class="line"></span><br><span class="line">//向num中添加一个属性</span><br><span class="line">num.hello = &quot;abcdefg&quot;;</span><br><span class="line"></span><br><span class="line">//console.log(str === str2);</span><br><span class="line"></span><br><span class="line">var b = new Boolean(false);</span><br><span class="line"></span><br><span class="line">/*if(b)&#123;</span><br><span class="line">alert(&quot;我运行了~~~&quot;);</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 方法和属性之能添加给对象，不能添加给基本数据类型</span><br><span class="line"> * 当我们对一些基本数据类型的值去调用属性和方法时，</span><br><span class="line"> * 浏览器会临时使用包装类将其转换为对象，然后在调用对象的属性和方法</span><br><span class="line"> * 调用完以后，在将其转换为基本数据类型</span><br><span class="line"> */</span><br><span class="line">var s = 123;</span><br><span class="line"></span><br><span class="line">s = s.toString();</span><br><span class="line"></span><br><span class="line">s.hello = &quot;你好&quot;;</span><br><span class="line"></span><br><span class="line">console.log(s.hello);</span><br><span class="line">//console.log(typeof s);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="字符串的相关方法"><a class="markdownIt-Anchor" href="#字符串的相关方法"></a> 字符串的相关方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">//创建一个字符串</span><br><span class="line">var str = &quot;Hello Atguigu&quot;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在底层字符串是以字符数组的形式保存的</span><br><span class="line"> * [&quot;H&quot;,&quot;e&quot;,&quot;l&quot;]</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * length属性</span><br><span class="line"> * - 可以用来获取字符串的长度</span><br><span class="line"> */</span><br><span class="line">//console.log(str.length);</span><br><span class="line">//console.log(str[5]);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * charAt()</span><br><span class="line"> * - 可以返回字符串中指定位置的字符</span><br><span class="line"> * - 根据索引获取指定的字符</span><br><span class="line"> */</span><br><span class="line">str = &quot;中Hello Atguigu&quot;;</span><br><span class="line"></span><br><span class="line">var result = str.charAt(6);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * charCodeAt()</span><br><span class="line"> * - 获取指定位置字符的字符编码（Unicode编码）</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">result = str.charCodeAt(0);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * String.formCharCode()</span><br><span class="line"> * - 可以根据字符编码去获取字符</span><br><span class="line"> */</span><br><span class="line">result = String.fromCharCode(0x2692);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * concat()</span><br><span class="line"> * - 可以用来连接两个或多个字符串</span><br><span class="line"> * - 作用和+一样</span><br><span class="line"> */</span><br><span class="line">result = str.concat(&quot;你好&quot;,&quot;再见&quot;);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * indexof()</span><br><span class="line"> * - 该方法可以检索一个字符串中是否含有指定内容</span><br><span class="line"> * - 如果字符串中含有该内容，则会返回其第一次出现的索引</span><br><span class="line"> * 如果没有找到指定的内容，则返回-1</span><br><span class="line"> * - 可以指定一个第二个参数，指定开始查找的位置</span><br><span class="line"> * </span><br><span class="line"> * lastIndexOf();</span><br><span class="line"> * - 该方法的用法和indexOf()一样，</span><br><span class="line"> * 不同的是indexOf是从前往后找，</span><br><span class="line"> * 而lastIndexOf是从后往前找</span><br><span class="line"> * - 也可以指定开始查找的位置</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">str = &quot;hello hatguigu&quot;;</span><br><span class="line"></span><br><span class="line">result = str.indexOf(&quot;h&quot;,1);</span><br><span class="line"></span><br><span class="line">result = str.lastIndexOf(&quot;h&quot;,5);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * slice()</span><br><span class="line"> * - 可以从字符串中截取指定的内容</span><br><span class="line"> * - 不会影响原字符串，而是将截取到内容返回</span><br><span class="line"> * - 参数：</span><br><span class="line"> * 第一个，开始位置的索引（包括开始位置）</span><br><span class="line"> * 第二个，结束位置的索引（不包括结束位置）</span><br><span class="line"> * - 如果省略第二个参数，则会截取到后边所有的</span><br><span class="line"> * - 也可以传递一个负数作为参数，负数的话将会从后边计算</span><br><span class="line"> */</span><br><span class="line">str = &quot;abcdefghijk&quot;;</span><br><span class="line"></span><br><span class="line">result = str.slice(1,4);</span><br><span class="line">result = str.slice(1,-1);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * substring()</span><br><span class="line"> * - 可以用来截取一个字符串，可以slice()类似</span><br><span class="line"> * - 参数：</span><br><span class="line"> * - 第一个：开始截取位置的索引（包括开始位置）</span><br><span class="line"> * - 第二个：结束位置的索引（不包括结束位置）</span><br><span class="line"> * - 不同的是这个方法不能接受负值作为参数，</span><br><span class="line"> * 如果传递了一个负值，则默认使用0</span><br><span class="line"> * - 而且他还自动调整参数的位置，如果第二个参数小于第一个，则自动交换</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">result = str.substring(0,1);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * substr()</span><br><span class="line"> * - 用来截取字符串</span><br><span class="line"> * - 参数：</span><br><span class="line"> * 1.截取开始位置的索引</span><br><span class="line"> * 2.截取的长度</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">str = &quot;abcdefg&quot;;</span><br><span class="line"></span><br><span class="line">result = str.substr(3,2);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * split()</span><br><span class="line"> * - 可以将一个字符串拆分为一个数组</span><br><span class="line"> * - 参数：</span><br><span class="line"> * -需要一个字符串作为参数，将会根据该字符串去拆分数组</span><br><span class="line"> */</span><br><span class="line">str = &quot;abcbcdefghij&quot;;</span><br><span class="line"></span><br><span class="line">result = str.split(&quot;d&quot;);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 如果传递一个空串作为参数，则会将每个字符都拆分为数组中的一个元素</span><br><span class="line"> */</span><br><span class="line">result = str.split(&quot;&quot;);</span><br><span class="line"></span><br><span class="line">//console.log(Array.isArray(result));</span><br><span class="line">//console.log(result[0]);</span><br><span class="line">console.log(result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">str = &quot;abcdefg&quot;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * toUpperCase()</span><br><span class="line"> * - 将一个字符串转换为大写并返回</span><br><span class="line"> */</span><br><span class="line">result = str.toUpperCase();</span><br><span class="line"></span><br><span class="line">str = &quot;ABCDEFG&quot;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * toLowerCase()</span><br><span class="line"> * -将一个字符串转换为小写并返回</span><br><span class="line"> */</span><br><span class="line">result = str.toLowerCase();</span><br><span class="line"></span><br><span class="line">//console.log(result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="正则表达式1"><a class="markdownIt-Anchor" href="#正则表达式1"></a> 正则表达式1</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 正则表达式</span><br><span class="line"> * - admin@atguigu.com</span><br><span class="line"> *  - admin@.com   adminatguigu.com</span><br><span class="line"> *  - 邮件的规则：</span><br><span class="line"> * 1.前边可以是xxxx乱七八糟</span><br><span class="line"> * 2.跟着一个@</span><br><span class="line"> * 3.后边可以是xxxx乱七八糟</span><br><span class="line"> * 4..com获取其他的乱七八糟</span><br><span class="line"> * </span><br><span class="line"> * - 正则表达式用于定义一些字符串的规则，</span><br><span class="line"> * 计算机可以根据正则表达式，来检查一个字符串是否符合规则，</span><br><span class="line"> * 获取将字符串中符合规则的内容提取出来</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//创建正则表达式的对象</span><br><span class="line">/*</span><br><span class="line"> * 语法：</span><br><span class="line"> * var 变量 = new RegExp(&quot;正则表达式&quot;,&quot;匹配模式&quot;);</span><br><span class="line"> *  使用typeof检查正则对象，会返回object</span><br><span class="line"> * var reg = new RegExp(&quot;a&quot;); 这个正则表达式可以来检查一个字符串中是否含有a</span><br><span class="line"> * 在构造函数中可以传递一个匹配模式作为第二个参数，</span><br><span class="line"> * 可以是 </span><br><span class="line"> * i 忽略大小写 </span><br><span class="line"> * g 全局匹配模式</span><br><span class="line"> */</span><br><span class="line">var reg = new RegExp(&quot;ab&quot;,&quot;i&quot;);</span><br><span class="line"></span><br><span class="line">var str = &quot;a&quot;;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 正则表达式的方法：</span><br><span class="line"> * test()</span><br><span class="line"> *  - 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则，</span><br><span class="line"> * 如果符合则返回true，否则返回false</span><br><span class="line"> */</span><br><span class="line">var result = reg.test(str);</span><br><span class="line">//console.log(result);</span><br><span class="line">console.log(reg.test(&quot;Ac&quot;));</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="正则表达式2"><a class="markdownIt-Anchor" href="#正则表达式2"></a> 正则表达式2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用字面量来创建正则表达式</span><br><span class="line"> * 语法：var 变量 = /正则表达式/匹配模式</span><br><span class="line"> * 使用字面量的方式创建更加简单</span><br><span class="line"> * 使用构造函数创建更加灵活</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">//var reg = new RegExp(&quot;a&quot;,&quot;i&quot;);</span><br><span class="line"></span><br><span class="line">var reg = /a/i;</span><br><span class="line"></span><br><span class="line">//console.log(typeof reg);</span><br><span class="line">//console.log(reg.test(&quot;abc&quot;));</span><br><span class="line"></span><br><span class="line">//创建一个正则表达式，检查一个字符串中是否有a或b</span><br><span class="line">/*</span><br><span class="line"> * 使用 | 表示或者的意思</span><br><span class="line"> */</span><br><span class="line">reg = /a|b|c/;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个正则表达式检查一个字符串中是否有字母</span><br><span class="line"> */</span><br><span class="line">//reg = /a|b|c|d|e|f|g/;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * []里的内容也是或的关系</span><br><span class="line"> * [ab] == a|b</span><br><span class="line"> * [a-z] 任意小写字母</span><br><span class="line"> * [A-Z] 任意大写字母</span><br><span class="line"> * [A-z] 任意字母</span><br><span class="line"> * [0-9] 任意数字</span><br><span class="line"> */</span><br><span class="line">reg = /[A-z]/;</span><br><span class="line"></span><br><span class="line">//检查一个字符串中是否含有 abc 或 adc 或 aec</span><br><span class="line">reg = /a[bde]c/;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * [^ ] 除了</span><br><span class="line"> */</span><br><span class="line">reg = /[^ab]/;</span><br><span class="line"></span><br><span class="line">reg = /[^0-9]/;</span><br><span class="line"></span><br><span class="line">console.log(reg.test(&quot;12a3456&quot;));</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="字符串和正则表达式的相关方法"><a class="markdownIt-Anchor" href="#字符串和正则表达式的相关方法"></a> 字符串和正则表达式的相关方法</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">var str = &quot;1a2b3c4d5e6f7&quot;;</span><br><span class="line">/*</span><br><span class="line"> * split()</span><br><span class="line"> * - 可以将一个字符串拆分为一个数组</span><br><span class="line"> * - 方法中可以传递一个正则表达式作为参数，这样方法将会根据正则表达式去拆分字符串</span><br><span class="line"> * - 这个方法即使不指定全局匹配，也会全都插分</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 根据任意字母来将字符串拆分</span><br><span class="line"> */</span><br><span class="line">var result = str.split(/[A-z]/);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//console.log(result);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * search()</span><br><span class="line"> * - 可以搜索字符串中是否含有指定内容</span><br><span class="line"> * - 如果搜索到指定内容，则会返回第一次出现的索引，如果没有搜索到返回-1</span><br><span class="line"> * - 它可以接受一个正则表达式作为参数，然后会根据正则表达式去检索字符串</span><br><span class="line"> * - serach()只会查找第一个，即使设置全局匹配也没用</span><br><span class="line"> */</span><br><span class="line">str = &quot;hello abc hello aec afc&quot;;</span><br><span class="line">/*</span><br><span class="line"> * 搜索字符串中是否含有abc 或 aec 或 afc</span><br><span class="line"> */</span><br><span class="line">result = str.search(/a[bef]c/);</span><br><span class="line"></span><br><span class="line">//console.log(result);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * match()</span><br><span class="line"> * - 可以根据正则表达式，从一个字符串中将符合条件的内容提取出来</span><br><span class="line"> * - 默认情况下我们的match只会找到第一个符合要求的内容，找到以后就停止检索</span><br><span class="line"> * 我们可以设置正则表达式为全局匹配模式，这样就会匹配到所有的内容</span><br><span class="line"> * 可以为一个正则表达式设置多个匹配模式，且顺序无所谓</span><br><span class="line"> * - match()会将匹配到的内容封装到一个数组中返回，即使只查询到一个结果</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">str = &quot;1a2a3a4a5e6f7A8B9C&quot;;</span><br><span class="line"></span><br><span class="line">result = str.match(/[a-z]/ig);</span><br><span class="line"></span><br><span class="line">//console.log(result[2]);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * replace()</span><br><span class="line"> * - 可以将字符串中指定内容替换为新的内容</span><br><span class="line"> *  - 参数：</span><br><span class="line"> * 1.被替换的内容，可以接受一个正则表达式作为参数</span><br><span class="line"> * 2.新的内容</span><br><span class="line"> *  - 默认只会替换第一个</span><br><span class="line"> */</span><br><span class="line">//result = str.replace(/[a-z]/gi , &quot;@_@&quot;);</span><br><span class="line">result = str.replace(/[a-z]/gi , &quot;&quot;);</span><br><span class="line"></span><br><span class="line">//console.log(result);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="正则表达式3"><a class="markdownIt-Anchor" href="#正则表达式3"></a> 正则表达式3</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个正则表达式检查一个字符串中是否含有aaa</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 量词</span><br><span class="line"> * - 通过量词可以设置一个内容出现的次数</span><br><span class="line"> * - 量词只对它前边的一个内容起作用</span><br><span class="line"> * - &#123;n&#125; 正好出现n次</span><br><span class="line"> * - &#123;m,n&#125; 出现m-n次</span><br><span class="line"> * - &#123;m,&#125; m次以上</span><br><span class="line"> * - + 至少一个，相当于&#123;1,&#125;</span><br><span class="line"> * - * 0个或多个，相当于&#123;0,&#125;</span><br><span class="line"> * - ? 0个或1个，相当于&#123;0,1&#125;</span><br><span class="line"> */</span><br><span class="line">var reg = /a&#123;3&#125;/;</span><br><span class="line">//ababab</span><br><span class="line">reg = /(ab)&#123;3&#125;/;</span><br><span class="line"></span><br><span class="line">reg = /b&#123;3&#125;/;</span><br><span class="line"></span><br><span class="line">reg = /ab&#123;1,3&#125;c/;</span><br><span class="line"></span><br><span class="line">reg = /ab&#123;3,&#125;c/;</span><br><span class="line"></span><br><span class="line">reg = /ab+c/;</span><br><span class="line"></span><br><span class="line">reg = /ab*c/;</span><br><span class="line"></span><br><span class="line">reg = /ab?c/;</span><br><span class="line"></span><br><span class="line">//console.log(reg.test(&quot;abbc&quot;));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 检查一个字符串中是否以a开头</span><br><span class="line"> * ^ 表示开头</span><br><span class="line"> * $ 表示结尾</span><br><span class="line"> */</span><br><span class="line">reg = /^a/; //匹配开头的a</span><br><span class="line"></span><br><span class="line">reg = /a$/; //匹配结尾的a</span><br><span class="line"></span><br><span class="line">//console.log(reg.test(&quot;abcabca&quot;));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 如果在正则表达式中同时使用^ $则要求字符串必须完全符合正则表达式</span><br><span class="line"> */</span><br><span class="line">reg = /^a$/;</span><br><span class="line"></span><br><span class="line">//console.log(reg.test(&quot;bbca&quot;));</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个正则表达式，用来检查一个字符串是否是一个合法手机号</span><br><span class="line"> * </span><br><span class="line"> * 手机号的规则：</span><br><span class="line"> * 1 3 567890123 （11位）</span><br><span class="line"> * </span><br><span class="line"> * 1. 以1开头</span><br><span class="line"> *  2. 第二位3-9任意数字</span><br><span class="line"> * 3. 三位以后任意数字9个</span><br><span class="line"> * </span><br><span class="line"> *  ^1   [3-9]  [0-9]&#123;9&#125;$  </span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var phoneStr = &quot;13067890123&quot;;</span><br><span class="line"></span><br><span class="line">var phoneReg = /^1[3-9][0-9]&#123;9&#125;$/;</span><br><span class="line"></span><br><span class="line">console.log(phoneReg.test(phoneStr));</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="正则表达式4"><a class="markdownIt-Anchor" href="#正则表达式4"></a> 正则表达式4</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 检查一个字符串中是否含有 .</span><br><span class="line"> * . 表示任意字符</span><br><span class="line"> * 在正则表达式中使用\作为转义字符</span><br><span class="line"> * \. 来表示.</span><br><span class="line"> * \\  表示\</span><br><span class="line"> * </span><br><span class="line"> * 注意：使用构造函数时，由于它的参数是一个字符串，而\是字符串中转义字符，</span><br><span class="line"> * 如果要使用\则需要使用\\来代替</span><br><span class="line"> */</span><br><span class="line">var reg = /\./;</span><br><span class="line"></span><br><span class="line">reg = /\\/;</span><br><span class="line"></span><br><span class="line">reg = new RegExp(&quot;\\.&quot;);</span><br><span class="line">reg = new RegExp(&quot;\\\\&quot;);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * \w</span><br><span class="line"> * - 任意字母、数字、_  [A-z0-9_]</span><br><span class="line"> * \W</span><br><span class="line"> * - 除了字母、数字、_  [^A-z0-9_]</span><br><span class="line"> * \d</span><br><span class="line"> * - 任意的数字 [0-9]</span><br><span class="line"> * \D</span><br><span class="line"> * - 除了数字 [^0-9]</span><br><span class="line"> * \s</span><br><span class="line"> * - 空格</span><br><span class="line"> * \S</span><br><span class="line"> * - 除了空格</span><br><span class="line"> * \b</span><br><span class="line"> * - 单词边界</span><br><span class="line"> * \B</span><br><span class="line"> * - 除了单词边界</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">reg = /\w/;</span><br><span class="line">reg = /\W/;</span><br><span class="line"></span><br><span class="line">reg = /\d/;</span><br><span class="line">reg = /\D/;</span><br><span class="line"></span><br><span class="line">reg = /\s/;</span><br><span class="line">reg = /\S/;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个正则表达式检查一个字符串中是否含有单词child</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">reg = /\bchild\b/;</span><br><span class="line"></span><br><span class="line">//console.log(reg.test(&quot;hello child &quot;));</span><br><span class="line"></span><br><span class="line">//接收一个用户的输入</span><br><span class="line">//var str = prompt(&quot;请输入你的用户名:&quot;);</span><br><span class="line"></span><br><span class="line">var str = &quot;              he      llo                &quot;;</span><br><span class="line"></span><br><span class="line">//去除掉字符串中的前后的空格</span><br><span class="line">//去除空格就是使用&quot;&quot;来替换空格</span><br><span class="line">console.log(str);</span><br><span class="line"></span><br><span class="line">//str = str.replace(/\s/g , &quot;&quot;);</span><br><span class="line"></span><br><span class="line">//去除开头的空格</span><br><span class="line">//str = str.replace(/^\s*/, &quot;&quot;);</span><br><span class="line">//去除结尾的空格</span><br><span class="line">//str = str.replace(/\s*$/, &quot;&quot;);</span><br><span class="line">// /^\s*|\s*$/g 匹配开头和结尾的空格</span><br><span class="line">str = str.replace(/^\s*|\s*$/g,&quot;&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">console.log(str);</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="邮件的正则表达式"><a class="markdownIt-Anchor" href="#邮件的正则表达式"></a> 邮件的正则表达式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 电子邮件</span><br><span class="line"> * hello  .nihao          @     abc  .com.cn</span><br><span class="line"> * </span><br><span class="line"> * 任意字母数字下划线    .任意字母数字下划线  @   任意字母数字     .任意字母（2-5位）   .任意字母（2-5位）</span><br><span class="line"> * </span><br><span class="line"> * \w&#123;3,&#125;  (\.\w+)*  @  [A-z0-9]+  (\.[A-z]&#123;2,5&#125;)&#123;1,2&#125;</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">var emailReg = /^\w&#123;3,&#125;(\.\w+)*@[A-z0-9]+(\.[A-z]&#123;2,5&#125;)&#123;1,2&#125;$/;</span><br><span class="line"></span><br><span class="line">var email = &quot;abc.hello@163.com&quot;;</span><br><span class="line"></span><br><span class="line">console.log(emailReg.test(email));</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="dom"><a class="markdownIt-Anchor" href="#dom"></a> DOM</h3><p><img src="/images/javawz/image-20260314165819092.png" alt="image-20260314165819092"></p><p><img src="/images/javawz/image-20260314165937947.png" alt="image-20260314165937947"></p><p><img src="/images/javawz/image-20260314165927975.png" alt="image-20260314165927975"></p><p><img src="/images/javawz/image-20260314170007836.png" alt="image-20260314170007836"></p><p><img src="/images/javawz/image-20260314170035092.png" alt="image-20260314170035092"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;button id=&quot;btn&quot;&gt;我是一个按钮&lt;/button&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 浏览器已经为我们提供 文档节点 对象这个对象是window属性</span><br><span class="line"> * 可以在页面中直接使用，文档节点代表的是整个网页</span><br><span class="line"> */</span><br><span class="line">//console.log(document);</span><br><span class="line"></span><br><span class="line">//获取到button对象</span><br><span class="line">var btn = document.getElementById(&quot;btn&quot;);</span><br><span class="line"></span><br><span class="line">//修改按钮的文字</span><br><span class="line">btn.innerHTML = &quot;I&apos;m Button&quot;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><h3 id="事件"><a class="markdownIt-Anchor" href="#事件"></a> 事件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!--</span><br><span class="line">我们可以在事件对应的属性中设置一些js代码，</span><br><span class="line">这样当事件被触发时，这些代码将会执行</span><br><span class="line"></span><br><span class="line">这种写法我们称为结构和行为耦合，不方便维护，不推荐使用</span><br><span class="line">--&gt;</span><br><span class="line">&lt;!--&lt;button id=&quot;btn&quot; onmousemove=&quot;alert(&apos;讨厌，你点我干嘛！&apos;);&quot;&gt;我是一个按钮&lt;/button&gt;--&gt;</span><br><span class="line">&lt;button id=&quot;btn&quot;&gt;我是一个按钮&lt;/button&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 事件，就是用户和浏览器之间的交互行为，</span><br><span class="line"> * 比如：点击按钮，鼠标移动、关闭窗口。。。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//获取按钮对象</span><br><span class="line">var btn = document.getElementById(&quot;btn&quot;);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 可以为按钮的对应事件绑定处理函数的形式来响应事件</span><br><span class="line"> * 这样当事件被触发时，其对应的函数将会被调用</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">//绑定一个单击事件</span><br><span class="line">//像这种为单击事件绑定的函数，我们称为单击响应函数</span><br><span class="line">btn.onclick = function()&#123;</span><br><span class="line">alert(&quot;你还点~~~&quot;);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;运算符的优先级&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#运算符的优先级&quot;&gt;&lt;/a&gt; 运算符的优先级&lt;/h2&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter
      
    
    </summary>
    
      <category term="JS" scheme="https://xiaowuyoucy.github.io/categories/JS/"/>
    
    
  </entry>
  
  <entry>
    <title>day01</title>
    <link href="https://xiaowuyoucy.github.io/2024/09/12/html-css00023day01/"/>
    <id>https://xiaowuyoucy.github.io/2024/09/12/html-css00023day01/</id>
    <published>2024-09-12T00:18:25.000Z</published>
    <updated>2024-09-26T11:45:04.039Z</updated>
    
    <content type="html"><![CDATA[<h3 id="子元素选择器"><a class="markdownIt-Anchor" href="#子元素选择器"></a> 子元素选择器</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span><span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">style</span> <span class="attr">type</span>=<span class="string">"text/css"</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">/*</span></span><br><span class="line"><span class="undefined"> * 为第一个p标签设置一个背景颜色为黄色</span></span><br><span class="line"><span class="css"> * <span class="selector-pseudo">:first-child</span> 可以选中第一个子元素</span></span><br><span class="line"><span class="css"> *  <span class="selector-pseudo">:last-child</span> 可以选中最后一个子元素</span></span><br><span class="line"><span class="undefined"> */</span></span><br><span class="line"><span class="undefined">/*body &gt; p:first-child&#123;</span></span><br><span class="line"><span class="undefined">background-color: yellow;</span></span><br><span class="line"><span class="undefined">&#125;*/</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">/*p:last-child&#123;</span></span><br><span class="line"><span class="undefined">background-color: yellow;</span></span><br><span class="line"><span class="undefined">&#125;*/</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">/*</span></span><br><span class="line"><span class="css"> * <span class="selector-pseudo">:nth-child</span> 可以选中任意位置的子元素</span></span><br><span class="line"><span class="undefined"> * 该选择器后边可以指定一个参数，指定要选中第几个子元素</span></span><br><span class="line"><span class="undefined"> * even 表示偶数位置的子元素</span></span><br><span class="line"><span class="undefined"> * odd 表示奇数位置的子元素</span></span><br><span class="line"><span class="undefined"> * </span></span><br><span class="line"><span class="undefined"> */</span></span><br><span class="line"><span class="undefined">/*p:nth-child(odd)&#123;</span></span><br><span class="line"><span class="undefined">background-color: yellow;</span></span><br><span class="line"><span class="undefined">&#125;*/</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">/*</span></span><br><span class="line"><span class="css"> * <span class="selector-pseudo">:first-of-type</span></span></span><br><span class="line"><span class="css"> * <span class="selector-pseudo">:last-of-type</span></span></span><br><span class="line"><span class="css"> * <span class="selector-pseudo">:nth-of-type</span></span></span><br><span class="line"><span class="css"> * 和<span class="selector-pseudo">:first-child</span>这些非常的类似，</span></span><br><span class="line"><span class="undefined"> * 只不过child，是在所有的子元素中排列</span></span><br><span class="line"><span class="undefined"> * 而type，是在当前类型的子元素中排列</span></span><br><span class="line"><span class="undefined"> */</span></span><br><span class="line"><span class="undefined">/*p:first-of-type&#123;</span></span><br><span class="line"><span class="undefined">background-color: yellow;</span></span><br><span class="line"><span class="undefined">&#125;*/</span></span><br><span class="line"><span class="css"><span class="selector-tag">p</span><span class="selector-pseudo">:last-of-type</span>&#123;</span></span><br><span class="line"><span class="undefined">background-color: yellow;</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">span</span>&gt;</span>我是span<span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>我是一个p标签<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>我是一个p标签<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>我是一个p标签<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>我是一个p标签<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>我是一个p标签<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>我是一个p标签<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">span</span>&gt;</span>hello<span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!--&lt;div&gt;</span></span><br><span class="line"><span class="comment">&lt;p&gt;我是DIV中的p标签&lt;/p&gt;</span></span><br><span class="line"><span class="comment">&lt;/div&gt;--&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><br><br><h3 id="兄弟元素选择器"><a class="markdownIt-Anchor" href="#兄弟元素选择器"></a> 兄弟元素选择器</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 为span后的一个p元素设置一个背景颜色为黄色</span><br><span class="line"> * 后一个兄弟元素选择器</span><br><span class="line"> * 作用：可以选中一个元素后紧挨着的指定的兄弟元素</span><br><span class="line"> * 语法：前一个 + 后一个</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*span + p&#123;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 选中后边的所有兄弟元素</span><br><span class="line"> * 语法：前一个 ~ 后边所有</span><br><span class="line"> */</span><br><span class="line">span ~ p&#123;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;span&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="否定伪类"><a class="markdownIt-Anchor" href="#否定伪类"></a> 否定伪类</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 为所有的p元素设置一个背景颜色为黄色，除了class值为hello的</span><br><span class="line"> * </span><br><span class="line"> * 否定伪类：</span><br><span class="line"> * 作用：可以从已选中的元素中剔除出某些元素</span><br><span class="line"> * 语法：</span><br><span class="line"> * :not(选择器)</span><br><span class="line"> */</span><br><span class="line">p:not(.hello)&#123;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p class=&quot;hello&quot;&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个p标签&lt;/p&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="样式的继承"><a class="markdownIt-Anchor" href="#样式的继承"></a> 样式的继承</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">body&#123;</span><br><span class="line">font-size: 30px;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">像儿子可以继承父亲的遗产一样，在CSS中，祖先元素上的样式，也会被他的后代元素所继承,</span><br><span class="line">利用继承，可以将一些基本的样式设置给祖先元素，这样所有的后代元素将会自动继承这些样式。</span><br><span class="line"></span><br><span class="line">但是并不是所有的样式都会被子元素所继承，比如：背景相关的样式都不会被继承 边框相关的样式 定位相关的</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;div style=&quot;background-color: yellow;&quot;&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">我是p标签中的文字</span><br><span class="line">&lt;span&gt;我是span中的文字&lt;/span&gt;</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;span&gt;我是p元素外的span&lt;/span&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="选择器的优先级"><a class="markdownIt-Anchor" href="#选择器的优先级"></a> 选择器的优先级</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.p1&#123;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">p&#123;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 当使用不同的选择器，选中同一个元素时并且设置相同的样式时，</span><br><span class="line"> * 这时样式之间产生了冲突，最终到底采用哪个选择器定义的样式，由选择器的优先级（权重）决定</span><br><span class="line"> *  优先级高的优先显示。</span><br><span class="line"> * </span><br><span class="line"> * 优先级的规则</span><br><span class="line"> * 内联样式 ， 优先级  1000</span><br><span class="line"> * id选择器，优先级   100</span><br><span class="line"> * 类和伪类， 优先级   10</span><br><span class="line"> * 元素选择器，优先级 1 </span><br><span class="line"> * 通配* ，    优先级 0</span><br><span class="line"> * 继承的样式，没有优先级</span><br><span class="line"> * </span><br><span class="line"> * 当选择器中包含多种选择器时，需要将多种选择器的优先级相加然后在比较，</span><br><span class="line"> * 但是注意，选择器优先级计算不会超过他的最大的数量级，如果选择器的优先级一样，</span><br><span class="line"> * 则使用靠后的样式。</span><br><span class="line"> * </span><br><span class="line"> *  并集选择器的优先级是单独计算</span><br><span class="line"> * div , p , #p1 , .hello&#123;&#125;</span><br><span class="line"> * </span><br><span class="line"> *  可以在样式的最后，添加一个!important，则此时该样式将会获得一个最高的优先级，</span><br><span class="line"> * 将会优先于所有的样式显示甚至超过内联样式，但是在开发中尽量避免使用!important</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">*&#123;</span><br><span class="line">font-size: 50px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">p&#123;</span><br><span class="line">font-size: 30px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">#p2&#123;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">p#p2&#123;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">.p3&#123;</span><br><span class="line">color: green;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p1&#123;</span><br><span class="line">color: yellow;</span><br><span class="line">background-color: greenyellow !important;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p1 p3&quot; id=&quot;p2&quot; style=&quot;background-color: orange;&quot;&gt;我是一个段落</span><br><span class="line">&lt;span&gt;我是p标签中的span&lt;/span&gt;</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="a的伪类"><a class="markdownIt-Anchor" href="#a的伪类"></a> a的伪类</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 涉及到a的伪类一共有四个：</span><br><span class="line"> * :link     未访问</span><br><span class="line"> *  :visited  已访问</span><br><span class="line"> * :hover    鼠标移入</span><br><span class="line"> * :active   正在点击</span><br><span class="line"> * 而这四个选择器的优先级是一样的。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">a:link&#123;</span><br><span class="line">color: yellowgreen;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">a:visited&#123;</span><br><span class="line">color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 鼠标移入</span><br><span class="line"> */</span><br><span class="line">a:hover&#123;</span><br><span class="line">color: orange;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 正在点击</span><br><span class="line"> */</span><br><span class="line">a:active&#123;</span><br><span class="line">color: cornflowerblue;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;a href=&quot;http://www.baidu.com&quot;&gt;访问过的链接&lt;/a&gt;</span><br><span class="line">&lt;br /&gt;&lt;br /&gt;</span><br><span class="line">&lt;a href=&quot;http://www.baidu123456.com&quot;&gt;未访问过的链接&lt;/a&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="文本标签"><a class="markdownIt-Anchor" href="#文本标签"></a> 文本标签</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span><span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="comment">&lt;!-- </span></span><br><span class="line"><span class="comment">em和strong</span></span><br><span class="line"><span class="comment">- 这两个标签都表示一个强调的内容，</span></span><br><span class="line"><span class="comment">em主要表示语气上的强调,em在浏览器中默认使用斜体显示</span></span><br><span class="line"><span class="comment">strong表示强调的内容，比em更强烈，默认使用粗体显示</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line">今天天气<span class="tag">&lt;<span class="name">em</span>&gt;</span>真不错<span class="tag">&lt;/<span class="name">em</span>&gt;</span>！</span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">strong</span>&gt;</span></span><br><span class="line">注意：如果你不认真上课，你就找不到好工作！</span><br><span class="line"><span class="tag">&lt;/<span class="name">strong</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!-- </span></span><br><span class="line"><span class="comment">i标签中的内容会以斜体显示</span></span><br><span class="line"><span class="comment">b标签中的内容会以加粗显示</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">h5规范中规定，对于不需要着重的内容而是单纯的加粗或者是斜体，</span></span><br><span class="line"><span class="comment">就可以使用b和i标签</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">i</span>&gt;</span>我是i标签中的内容<span class="tag">&lt;/<span class="name">i</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">b</span>&gt;</span>我是b标签中的内容<span class="tag">&lt;/<span class="name">b</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">small标签中的内容会比他的父元素中的文字要小一些</span></span><br><span class="line"><span class="comment">在h5中使用small标签来表示一些细则一类的内容</span></span><br><span class="line"><span class="comment">比如：合同中小字，网站的版权声明都可以放到small</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line">我是p标签中的内容<span class="tag">&lt;<span class="name">small</span>&gt;</span>我是small标签中的内容<span class="tag">&lt;/<span class="name">small</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!-- </span></span><br><span class="line"><span class="comment">网页中所有的加书名号的内容都可以使用cite标签，表示参考的内容，</span></span><br><span class="line"><span class="comment">比如：书名 歌名 话剧名 电影名 。。。</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">cite</span>&gt;</span>《论语》<span class="tag">&lt;/<span class="name">cite</span>&gt;</span>是最喜欢的一般的书</span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">q标签表示一个短的引用（行内引用）</span></span><br><span class="line"><span class="comment">q标签引用的内容，浏览器会默认加上引号</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">blockquote标签表示一个长引用（块级引用）</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line">子曰:<span class="tag">&lt;<span class="name">q</span>&gt;</span>学而时习之不亦说乎！<span class="tag">&lt;/<span class="name">q</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">子曰:</span><br><span class="line"><span class="tag">&lt;<span class="name">blockquote</span>&gt;</span></span><br><span class="line">有朋自远方来，乐呵乐呵！</span><br><span class="line"><span class="tag">&lt;/<span class="name">blockquote</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!-- </span></span><br><span class="line"><span class="comment">使用sup标签来设置一个上标</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>2<span class="tag">&lt;<span class="name">sup</span>&gt;</span>2<span class="tag">&lt;/<span class="name">sup</span>&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>赵薇<span class="tag">&lt;<span class="name">sup</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>&gt;</span>[1]<span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">sup</span>&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">sub标签用来表示一个下标</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>H<span class="tag">&lt;<span class="name">sub</span>&gt;</span>2<span class="tag">&lt;/<span class="name">sub</span>&gt;</span>O<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">使用del标签来表示一个删除的内容</span></span><br><span class="line"><span class="comment">del标签中的内容，会自动添加删除线</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">del</span>&gt;</span>17.75<span class="tag">&lt;/<span class="name">del</span>&gt;</span> <span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line">15.54 <span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!-- </span></span><br><span class="line"><span class="comment">ins表示一个插入的内容</span></span><br><span class="line"><span class="comment">ins中的的内容，会自动添加下划线</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span></span><br><span class="line">我们的老师真<span class="tag">&lt;<span class="name">ins</span>&gt;</span>好啊<span class="tag">&lt;/<span class="name">ins</span>&gt;</span>！</span><br><span class="line"><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">需要页面中直接编写一些代码</span></span><br><span class="line"><span class="comment">pre是一个预格式标签，会将代码中的格式保存，不会忽略多个空格</span></span><br><span class="line"><span class="comment">code专门用来表示代码</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">我们一般结合使用pre和code来表示一段代码</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">pre</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">code</span>&gt;</span></span><br><span class="line">window.onload = function()&#123;</span><br><span class="line">alert("Hello World");</span><br><span class="line">&#125;;</span><br><span class="line"><span class="tag">&lt;/<span class="name">code</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">pre</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><br><br><h3 id="列表"><a class="markdownIt-Anchor" href="#列表"></a> 列表</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> 去掉项目符号</span><br><span class="line"> * */</span><br><span class="line">/*ul&#123;</span><br><span class="line">list-style: none;</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">列表就相当于去超市购物时的那个购物清单，</span><br><span class="line">在HTML也可以创建列表，在网页中一共有三种列表：</span><br><span class="line">1.无序列表</span><br><span class="line">2.有序列表</span><br><span class="line">3.定义列表</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">无序列表</span><br><span class="line">- 使用ul标签来创建一个无序列表</span><br><span class="line">- 使用li在ul中创建一个一个的列表项，</span><br><span class="line">一个li就是一个列表项</span><br><span class="line"></span><br><span class="line">通过type属性可以修改无序列表的项目符号</span><br><span class="line">可选值：</span><br><span class="line">disc，默认值，实心的圆点</span><br><span class="line">square，实心的方块</span><br><span class="line">circle，空心的圆</span><br><span class="line"></span><br><span class="line">注意：默认的项目符号我们一般都不使用！！</span><br><span class="line">如果需要设置项目符号，则可以采用为li设置背景图片的方式来设置</span><br><span class="line"></span><br><span class="line">ul和li都是块元素</span><br><span class="line">--&gt;</span><br><span class="line">&lt;ul&gt;</span><br><span class="line">&lt;li&gt;西门大官人&lt;/li&gt;</span><br><span class="line">&lt;li&gt;柴大官人&lt;/li&gt;</span><br><span class="line">&lt;li&gt;许大官人&lt;/li&gt;</span><br><span class="line">&lt;li&gt;唐僧大官人&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">有序列表和无序列表类似，只不过它使用ol来代替ul</span><br><span class="line">有序列表使用有序的序号作为项目符号</span><br><span class="line">type属性，可以指定序号的类型</span><br><span class="line">可选值：1，默认值，使用阿拉伯数字</span><br><span class="line">a/A 采用小写或大写字母作为序号</span><br><span class="line">i/I 采用小写或大写的罗马数字作为序号</span><br><span class="line"></span><br><span class="line">ol也是块元素</span><br><span class="line">--&gt;</span><br><span class="line">&lt;ol type=&quot;I&quot;&gt;</span><br><span class="line">&lt;li&gt;结构&lt;/li&gt;</span><br><span class="line">&lt;li&gt;表现&lt;/li&gt;</span><br><span class="line">&lt;li&gt;行为&lt;/li&gt;</span><br><span class="line">&lt;/ol&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">列表之间都是可以互相嵌套，可以在无序列表中放个有序列表</span><br><span class="line">也可以在有序列表中放一个无序列表</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;p&gt;菜谱&lt;/p&gt;</span><br><span class="line">&lt;ul&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">鱼香肉丝</span><br><span class="line">&lt;ol&gt;</span><br><span class="line">&lt;li&gt;鱼&lt;/li&gt;</span><br><span class="line">&lt;li&gt;香&lt;/li&gt;</span><br><span class="line">&lt;li&gt;肉丝&lt;/li&gt;</span><br><span class="line">&lt;/ol&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">宫保鸡丁</span><br><span class="line">&lt;ul&gt;</span><br><span class="line">&lt;li&gt;宫保&lt;/li&gt;</span><br><span class="line">&lt;li&gt;鸡丁&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;青椒肉丝&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="定义列表"><a class="markdownIt-Anchor" href="#定义列表"></a> 定义列表</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!--</span><br><span class="line">定义列表用来对一些词汇或内容进行定义</span><br><span class="line">使用dl来创建一个定义列表</span><br><span class="line">dl中有两个子标签</span><br><span class="line">dt ： 被定义的内容</span><br><span class="line">dd ： 对定义内容的描述</span><br><span class="line">同样dl和ul和ol之间都可以互相嵌套</span><br><span class="line">--&gt;</span><br><span class="line">&lt;dl&gt;</span><br><span class="line">&lt;dt&gt;武松&lt;/dt&gt;</span><br><span class="line">&lt;dd&gt;景阳冈打虎英雄，战斗力99&lt;/dd&gt;</span><br><span class="line">&lt;dd&gt;后打死西门庆，投奔梁山&lt;/dd&gt;</span><br><span class="line">&lt;dt&gt;武大&lt;/dt&gt;</span><br><span class="line">&lt;dd&gt;著名餐饮企业家，战斗力0&lt;/dd&gt;</span><br><span class="line">&lt;/dl&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="单位"><a class="markdownIt-Anchor" href="#单位"></a> 单位</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 长度单位</span><br><span class="line"> * 像素 px</span><br><span class="line"> * - 像素是我们在网页中使用的最多的一个单位，</span><br><span class="line"> * 一个像素就相当于我们屏幕中的一个小点，</span><br><span class="line"> * 我们的屏幕实际上就是由这些像素点构成的</span><br><span class="line"> * 但是这些像素点，是不能直接看见。</span><br><span class="line"> * - 不同显示器一个像素的大小也不相同，</span><br><span class="line"> * 显示效果越好越清晰，像素就越小，反之像素越大。</span><br><span class="line"> * </span><br><span class="line"> * 百分比 %</span><br><span class="line"> * - 也可以将单位设置为一个百分比的形式，</span><br><span class="line"> * 这样浏览器将会根据其父元素的样式来计算该值</span><br><span class="line"> * - 使用百分比的好处是，当父元素的属性值发生变化时，</span><br><span class="line"> * 子元素也会按照比例发生改变</span><br><span class="line"> * - 在我们创建一个自适应的页面时，经常使用百分比作为单位</span><br><span class="line"> * </span><br><span class="line"> * em</span><br><span class="line"> * - em和百分比类似，它是相对于当前元素的字体大小来计算的</span><br><span class="line"> * - 1em = 1font-size</span><br><span class="line"> * - 使用em时，当字体大小发生改变时，em也会随之改变</span><br><span class="line"> * - 当设置字体相关的样式时，经常会使用em</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">.box&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">height: 300px;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">font-size: 20px;</span><br><span class="line">width: 2em;</span><br><span class="line">height: 50%;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="颜色单位"><a class="markdownIt-Anchor" href="#颜色单位"></a> 颜色单位</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 颜色单位：</span><br><span class="line"> *  在CSS可以直接使用颜色的单词来表示不同的颜色</span><br><span class="line"> * 红色：red</span><br><span class="line"> * 蓝色：blue</span><br><span class="line"> * 绿色：green</span><br><span class="line"> *   也可以使用RGB值来表示不同的颜色</span><br><span class="line"> * - 所谓的RGB值指的是通过Red Green Blue三元色，</span><br><span class="line"> * 通过这三种颜色的不同的浓度，来表示出不同的颜色</span><br><span class="line"> * - 例子：rgb(红色的浓度,绿色的浓度,蓝色的浓度);</span><br><span class="line"> * - 颜色的浓度需要一个0-255之间的值，255表示最大，0表示没有</span><br><span class="line"> * - 浓度也可以采用一个百分数来设置，需要一个0% - 100%之间的数字</span><br><span class="line"> * 使用百分数最终也会转换为0-255之间的数</span><br><span class="line"> * 0%表示0</span><br><span class="line"> * 100%表示255</span><br><span class="line"> *   也可以使用十六进制的rgb值来表示颜色，原理和上边RGB原理一样，</span><br><span class="line"> * 只不过使用十六进制数来代替，使用三组两位的十六进制数组来表示一个颜色</span><br><span class="line"> * 每组表示一个颜色,第一组表示红色的浓度，范围00-ff</span><br><span class="line"> * 第二组表示绿色的浓度，范围是00-ff</span><br><span class="line"> * 第三组表示蓝色的浓度，范围00-ff</span><br><span class="line"> * 语法：#红色绿色蓝色</span><br><span class="line"> * 十六进制：</span><br><span class="line"> * 0 1 2 3 4 5 6 7 8 9 a b c d e f</span><br><span class="line"> * 00 - ff</span><br><span class="line"> * 00表示没有，相当于rgb中的0</span><br><span class="line"> * ff表示最大，相当于rgb中255</span><br><span class="line"> * 红色：</span><br><span class="line"> * #ff0000</span><br><span class="line"> * 像这种两位两位重复的颜色，可以简写</span><br><span class="line"> * 比如：#ff0000 可以写成 #f00</span><br><span class="line"> * #abc  #aabbcc</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">/*background-color: rgb(161,187,215);*/</span><br><span class="line"></span><br><span class="line">/*background-color: rgb(100%,50%,50%);*/</span><br><span class="line"></span><br><span class="line">/*background-color: #00f;*/</span><br><span class="line"></span><br><span class="line">/*background-color: #abc;*/ /*#aabbcc*/</span><br><span class="line"></span><br><span class="line">background-color: #084098;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="字体样式"><a class="markdownIt-Anchor" href="#字体样式"></a> 字体样式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.p1&#123;</span><br><span class="line">/*设置字体颜色,使用color来设置文字的颜色*/</span><br><span class="line">color: red;</span><br><span class="line">/*</span><br><span class="line"> * 设置文字的大小,浏览器中一般默认的文字大小都是16px</span><br><span class="line"> font-size设置的并不是文字本身的大小，</span><br><span class="line"> 在页面中，每个文字都是处在一个看不见的框中的</span><br><span class="line"> 我们设置的font-size实际上是设置格的高度，并不是字体的大小</span><br><span class="line"> 一般情况下文字都要比这个格要小一些，也有时会比格大，</span><br><span class="line"> 根据字体的不同，显示效果也不能</span><br><span class="line"> * */</span><br><span class="line">font-size: 30px;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 通过font-family可以指定文字的字体</span><br><span class="line"> * 当采用某种字体时，如果浏览器支持则使用该字体，</span><br><span class="line"> * 如果字体不支持，则使用默认字体</span><br><span class="line"> * 该样式可以同时指定多个字体，多个字体之间使用,分开</span><br><span class="line"> * 当采用多个字体时，浏览器会优先使用前边的字体，</span><br><span class="line"> * 如果前边没有在尝试下一个</span><br><span class="line"> */</span><br><span class="line">/*font-family: arial , 微软雅黑;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 浏览器使用的字体默认就是计算机中的字体，</span><br><span class="line"> * 如果计算机中有，则使用，如果没有就不用</span><br><span class="line"> * </span><br><span class="line"> * 在开发中，如果字体太奇怪，用的太少了，尽量不要使用，</span><br><span class="line"> * 有可能用户的电脑没有，就不能达到想要的效果。</span><br><span class="line"> */</span><br><span class="line">/*font-family: 华文彩云 , arial , 微软雅黑;*/</span><br><span class="line"></span><br><span class="line">font-family: &quot;curlz mt&quot;;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p1&quot;&gt;</span><br><span class="line">我是一个p标签，ABCDEFGabcdefg</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="字体的分类"><a class="markdownIt-Anchor" href="#字体的分类"></a> 字体的分类</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">p&#123;</span><br><span class="line">font-family: arial , 微软雅黑 , 华文彩云 , serif;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">在网页中将字体分成5大类：</span><br><span class="line">serif（衬线字体）</span><br><span class="line">sans-serif（非衬线字体）</span><br><span class="line">monospace （等宽字体）</span><br><span class="line">cursive （草书字体）</span><br><span class="line">fantasy （虚幻字体）</span><br><span class="line">可以将字体设置为这些大的分类,当设置为大的分类以后，</span><br><span class="line">浏览器会自动选择指定的字体并应用样式</span><br><span class="line">一般会将字体的大分类，指定为font-family中的最后一个字体</span><br><span class="line">--&gt;</span><br><span class="line">&lt;p style=&quot;font-size: 50px; font-family: serif;&quot;&gt;衬线字体：我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line">&lt;p style=&quot;font-size: 50px; font-family: sans-serif;&quot;&gt;非衬线字体：我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line">&lt;p style=&quot;font-size: 50px; font-family: monospace;&quot;&gt;等宽字体：我是一段文字，IHABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line">&lt;p style=&quot;font-size: 50px; font-family: cursive;&quot;&gt;草书字体：我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line">&lt;p style=&quot;font-size: 50px; font-family: fantasy;&quot;&gt;虚幻字体：我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="字体的其他样式"><a class="markdownIt-Anchor" href="#字体的其他样式"></a> 字体的其他样式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.p1&#123;</span><br><span class="line">color: red;</span><br><span class="line">font-size: 30px;</span><br><span class="line">font-family: &quot;微软雅黑&quot;;</span><br><span class="line">/*</span><br><span class="line"> * font-style可以用来设置文字的斜体</span><br><span class="line"> * - 可选值：</span><br><span class="line"> * normal，默认值，文字正常显示</span><br><span class="line"> * italic 文字会以斜体显示</span><br><span class="line"> * oblique 文字会以倾斜的效果显示</span><br><span class="line"> * - 大部分浏览器都不会对倾斜和斜体做区分，</span><br><span class="line"> * 也就是说我们设置italic和oblique它们的效果往往是一样的</span><br><span class="line"> *  - 一般我们只会使用italic</span><br><span class="line"> */</span><br><span class="line">font-style: italic;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * font-weight可以用来设置文本的加粗效果：</span><br><span class="line"> * 可选值：</span><br><span class="line"> * normal，默认值，文字正常显示</span><br><span class="line"> * bold，文字加粗显示</span><br><span class="line"> * </span><br><span class="line"> * 该样式也可以指定100-900之间的9个值，</span><br><span class="line"> * 但是由于用户的计算机往往没有这么多级别的字体，所以达到我们想要的效果</span><br><span class="line"> * 也就是200有可能比100粗，300有可能比200粗，但是也可能是一样的</span><br><span class="line"> */</span><br><span class="line">font-weight: bold;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * font-variant可以用来设置小型大写字母</span><br><span class="line"> * 可选值：</span><br><span class="line"> * normal，默认值，文字正常显示</span><br><span class="line"> * small-caps 文本以小型大写字母显示</span><br><span class="line"> * </span><br><span class="line"> * 小型大写字母：</span><br><span class="line"> * 将所有的字母都以大写形式显示，但是小写字母的大写，</span><br><span class="line"> * 要比大写字母的大小小一些。</span><br><span class="line"> */</span><br><span class="line">font-variant: small-caps ;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p2&#123;</span><br><span class="line">/*设置一个文字大小*/</span><br><span class="line">font-size: 50px;</span><br><span class="line">/*设置一个字体*/</span><br><span class="line">font-family: 华文彩云;</span><br><span class="line">/*设置文字斜体*/</span><br><span class="line">font-style: italic;</span><br><span class="line">/*设置文字的加粗*/</span><br><span class="line">font-weight: bold;</span><br><span class="line">/*设置一个小型大写字母*/</span><br><span class="line">font-variant: small-caps;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p3&#123;</span><br><span class="line">/*</span><br><span class="line"> * 在CSS中还为我们提供了一个样式叫font，</span><br><span class="line"> * 使用该样式可以同时设置字体相关的所有样式,</span><br><span class="line"> * 可以将字体的样式的值，统一写在font样式中，不同的值之间使用空格隔开</span><br><span class="line"> * </span><br><span class="line"> * 使用font设置字体样式时，斜体 加粗 小大字母，没有顺序要求，甚至可写可不写，</span><br><span class="line"> * 如果不写则使用默认值，但是要求文字的大小和字体必须写，而且字体必须是最后一个样式</span><br><span class="line"> * 大小必须是倒数第二个样式</span><br><span class="line"> * </span><br><span class="line"> * 实际上使用简写属性也会有一个比较好的性能</span><br><span class="line"> */</span><br><span class="line">font: small-caps bold italic 60px &quot;微软雅黑&quot;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p3&quot;&gt;我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p1&quot;&gt;我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p2&quot;&gt;我是一段文字，ABCDEFGabcdefg&lt;/p&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="行间距"><a class="markdownIt-Anchor" href="#行间距"></a> 行间距</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line"></span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">/*</span><br><span class="line"> * 在CSS并没有为我们提供一个直接设置行间距的方式，</span><br><span class="line"> * 我们只能通过设置行高来间接的设置行间距，行高越大行间距越大</span><br><span class="line"> * 使用line-height来设置行高 </span><br><span class="line"> * 行高类似于我们上学单线本，单线本是一行一行，线与线之间的距离就是行高，</span><br><span class="line"> * 网页中的文字实际上也是写在一个看不见的线中的，而文字会默认在行高中垂直居中显示</span><br><span class="line"> * </span><br><span class="line"> * 行间距 = 行高 - 字体大小</span><br><span class="line"> */</span><br><span class="line">.p1&#123;</span><br><span class="line">font-size: 20px;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 通过设置line-height可以间接的设置行高，</span><br><span class="line"> * 可以接收的值：</span><br><span class="line"> * 1.直接就收一个大小</span><br><span class="line"> * 2.可以指定一个百分数，则会相对于字体去计算行高</span><br><span class="line"> * 3.可以直接传一个数值，则行高会设置字体大小相应的倍数</span><br><span class="line"> */</span><br><span class="line">/*line-height: 200%;*/</span><br><span class="line"></span><br><span class="line">line-height: 2;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">/*</span><br><span class="line"> * 对于单行文本来说，可以将行高设置为和父元素的高度一致，</span><br><span class="line"> * 这样可以是单行文本在父元素中垂直居中</span><br><span class="line"> */</span><br><span class="line">line-height: 200px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p2&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在font中也可以指定行高</span><br><span class="line"> * 在字体大小后可以添加/行高，来指定行高，该值是可选的，如果不指定则会使用默认值</span><br><span class="line"> */</span><br><span class="line">font: 30px &quot;微软雅黑&quot;;</span><br><span class="line">line-height: 50px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line"></span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p2&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;a href=&quot;#&quot;&gt;我是一个超链接&lt;/a&gt;</span><br><span class="line"></span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p1&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="文本样式"><a class="markdownIt-Anchor" href="#文本样式"></a> 文本样式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line"></span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">.p1 &#123;</span><br><span class="line">/*</span><br><span class="line"> * text-transform可以用来设置文本的大小写</span><br><span class="line"> * 可选值：</span><br><span class="line"> * none 默认值，该怎么显示就怎么显示，不做任何处理</span><br><span class="line"> * capitalize 单词的首字母大写，通过空格来识别单词</span><br><span class="line"> * uppercase 所有的字母都大写</span><br><span class="line"> * lowercase 所有的字母都小写</span><br><span class="line"> */</span><br><span class="line">text-transform: lowercase;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p2 &#123;</span><br><span class="line">/*</span><br><span class="line"> * text-decoration可以用来设置文本的修饰</span><br><span class="line"> * 可选值：</span><br><span class="line"> * none：默认值，不添加任何修饰，正常显示</span><br><span class="line"> * underline 为文本添加下划线</span><br><span class="line"> * overline 为文本添加上划线</span><br><span class="line"> * line-through 为文本添加删除线</span><br><span class="line"> */</span><br><span class="line">text-decoration: line-through;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">a &#123;</span><br><span class="line">/*超链接会默认添加下划线，也就是超链接的text-decoration的默认值是underline</span><br><span class="line"> 如果需要去除超链接的下划线则需要将该样式设置为none</span><br><span class="line"> * */</span><br><span class="line">text-decoration: none;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p3 &#123;</span><br><span class="line">/**</span><br><span class="line"> * letter-spacing可以指定字符间距</span><br><span class="line"> */</span><br><span class="line">/*letter-spacing: 10px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * word-spacing可以设置单词之间的距离</span><br><span class="line"> * 实际上就是设置词与词之间空格的大小</span><br><span class="line"> */</span><br><span class="line">word-spacing: 120px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">.p4&#123;</span><br><span class="line">/*</span><br><span class="line"> * text-align用于设置文本的对齐方式</span><br><span class="line"> * 可选值：</span><br><span class="line"> * left 默认值，文本靠左对齐</span><br><span class="line"> * right ， 文本靠右对齐</span><br><span class="line"> * center ， 文本居中对齐</span><br><span class="line"> * justify ， 两端对齐</span><br><span class="line"> * - 通过调整文本之间的空格的大小，来达到一个两端对齐的目的</span><br><span class="line"> */</span><br><span class="line">text-align: justify ;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p5&#123;</span><br><span class="line"></span><br><span class="line">font-size: 20px;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * text-indent用来设置首行缩进</span><br><span class="line"> * 当给它指定一个正值时，会自动向右侧缩进指定的像素</span><br><span class="line"> * 如果为它指定一个负值，则会向左移动指定的像素,</span><br><span class="line"> * 通过这种方式可以将一些不想显示的文字隐藏起来</span><br><span class="line"> *  这个值一般都会使用em作为单位</span><br><span class="line"> */</span><br><span class="line">text-indent: -99999px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line"></span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p5&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;h1 class=&quot;p4&quot;&gt;我是一个h1&lt;/h1&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p4&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p4&quot;&gt;</span><br><span class="line">“We should start back,” Gared urged as the woods began to grow dark around them. “The wildlings are dead.” “Do the dead frighten you?” Ser Waymar Royce asked with just the hint of a smile. Gared did not rise to the bait. He was an old man, past fifty, and he had seen the lordlings come and go. “Dead is dead,” he said. “We have no business with the dead.” “Are they dead?” Royce asked softly. “What proof have we?” “Will saw them,” Gared said. “If he says they are dead, that’s proof enough for me.” Will had known they would drag him into the quarrel sooner or later. He wished it had been later rather than sooner. “My mother told me that dead men sing no songs,” he put in. “My wet nurse said the same thing, Will,” Royce replied. “Never believe anything you hear at a woman’s tit. There are things to be learned even from the dead.” His voice echoed, too loud in the twilit forest. “We have a long ride before us,” Gared pointed out. “Eight days, maybe nine. And night is falling.” Ser Waymar Royce glanced at the sky with disinterest. “It does that every day about this time. Are you unmanned by the dark, Gared?” Will could see the tightness around Gared’s mouth, the barely suppressed anger in his eyes under the thick black hood of his cloak. Gared had spent forty years in the Night’s Watch, man and boy, and he was not accustomed to being made light of. Yet it was more than that. Under the wounded pride, Will could sense something else in the older man. You could taste it; a nervous tension that came perilous close to fear. Will shared his unease. He had been four years on the Wall. The first time he had been sent beyond, all the old stories had come rushing back, and his bowels had turned to water. He had laughed about it afterward. He was a veteran of a hundred rangings by now, and the endless dark wilderness that the southron called the haunted forest had no more terrors for him.</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p3&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p3&quot;&gt;</span><br><span class="line">“We should start back,” Gared urged as the woods began to grow dark around them. “The wildlings are dead.” “Do the dead frighten you?” Ser Waymar Royce asked with just the hint of a smile. Gared did not rise to the bait. He was an old man, past fifty, and he had seen the lordlings come and go. “Dead is dead,” he said. “We have no business with the dead.” “Are they dead?” Royce asked softly. “What proof have we?” “Will saw them,” Gared said. “If he says they are dead, that’s proof enough for me.” Will had known they would drag him into the quarrel sooner or later. He wished it had been later rather than sooner. “My mother told me that dead men sing no songs,” he put in. “My wet nurse said the same thing, Will,” Royce replied. “Never believe anything you hear at a woman’s tit. There are things to be learned even from the dead.” His voice echoed, too loud in the twilit forest. “We have a long ride before us,” Gared pointed out. “Eight days, maybe nine. And night is falling.” Ser Waymar Royce glanced at the sky with disinterest. “It does that every day about this time. Are you unmanned by the dark, Gared?” Will could see the tightness around Gared’s mouth, the barely suppressed anger in his eyes under the thick black hood of his cloak. Gared had spent forty years in the Night’s Watch, man and boy, and he was not accustomed to being made light of. Yet it was more than that. Under the wounded pride, Will could sense something else in the older man. You could taste it; a nervous tension that came perilous close to fear. Will shared his unease. He had been four years on the Wall. The first time he had been sent beyond, all the old stories had come rushing back, and his bowels had turned to water. He had laughed about it afterward. He was a veteran of a hundred rangings by now, and the endless dark wilderness that the southron called the haunted forest had no more terrors for him.</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;a href=&quot;#&quot;&gt;我是超链接&lt;/a&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p2&quot;&gt;</span><br><span class="line">“We should start back,” Gared urged as the woods began to grow dark around them. “The wildlings are dead.” “Do the dead frighten you?” Ser Waymar Royce asked with just the hint of a smile. Gared did not rise to the bait. He was an old man, past fifty, and he had seen the lordlings come and go. “Dead is dead,” he said. “We have no business with the dead.” “Are they dead?” Royce asked softly. “What proof have we?” “Will saw them,” Gared said. “If he says they are dead, that’s proof enough for me.” Will had known they would drag him into the quarrel sooner or later. He wished it had been later rather than sooner. “My mother told me that dead men sing no songs,” he put in. “My wet nurse said the same thing, Will,” Royce replied. “Never believe anything you hear at a woman’s tit. There are things to be learned even from the dead.” His voice echoed, too loud in the twilit forest. “We have a long ride before us,” Gared pointed out. “Eight days, maybe nine. And night is falling.” Ser Waymar Royce glanced at the sky with disinterest. “It does that every day about this time. Are you unmanned by the dark, Gared?” Will could see the tightness around Gared’s mouth, the barely suppressed anger in his eyes under the thick black hood of his cloak. Gared had spent forty years in the Night’s Watch, man and boy, and he was not accustomed to being made light of. Yet it was more than that. Under the wounded pride, Will could sense something else in the older man. You could taste it; a nervous tension that came perilous close to fear. Will shared his unease. He had been four years on the Wall. The first time he had been sent beyond, all the old stories had come rushing back, and his bowels had turned to water. He had laughed about it afterward. He was a veteran of a hundred rangings by now, and the endless dark wilderness that the southron called the haunted forest had no more terrors for him.</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p1&quot;&gt;</span><br><span class="line">“We should start back,” Gared urged as the woods began to grow dark around them. “The wildlings are dead.” “Do the dead frighten you?” Ser Waymar Royce asked with just the hint of a smile. Gared did not rise to the bait. He was an old man, past fifty, and he had seen the lordlings come and go. “Dead is dead,” he said. “We have no business with the dead.” “Are they dead?” Royce asked softly. “What proof have we?” “Will saw them,” Gared said. “If he says they are dead, that’s proof enough for me.” Will had known they would drag him into the quarrel sooner or later. He wished it had been later rather than sooner. “My mother told me that dead men sing no songs,” he put in. “My wet nurse said the same thing, Will,” Royce replied. “Never believe anything you hear at a woman’s tit. There are things to be learned even from the dead.” His voice echoed, too loud in the twilit forest. “We have a long ride before us,” Gared pointed out. “Eight days, maybe nine. And night is falling.” Ser Waymar Royce glanced at the sky with disinterest. “It does that every day about this time. Are you unmanned by the dark, Gared?” Will could see the tightness around Gared’s mouth, the barely suppressed anger in his eyes under the thick black hood of his cloak. Gared had spent forty years in the Night’s Watch, man and boy, and he was not accustomed to being made light of. Yet it was more than that. Under the wounded pride, Will could sense something else in the older man. You could taste it; a nervous tension that came perilous close to fear. Will shared his unease. He had been four years on the Wall. The first time he had been sent beyond, all the old stories had come rushing back, and his bowels had turned to water. He had laughed about it afterward. He was a veteran of a hundred rangings by now, and the endless dark wilderness that the southron called the haunted forest had no more terrors for him.</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="盒子模型"><a class="markdownIt-Anchor" href="#盒子模型"></a> 盒子模型</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">/*</span><br><span class="line"> * 使用width来设置盒子内容区的宽度</span><br><span class="line"> * 使用height来设置盒子内容区的高度</span><br><span class="line"> * </span><br><span class="line"> * width和height只是设置的盒子内容区的大小，而不是盒子的整个大小，</span><br><span class="line"> * 盒子可见框的大小由内容区，内边距和边框共同决定</span><br><span class="line"> */</span><br><span class="line">width: 300px;</span><br><span class="line">height: 300px;</span><br><span class="line"></span><br><span class="line">/*设置背景颜色*/</span><br><span class="line">background-color: #bfa;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 为元素设置边框</span><br><span class="line"> * 要为一个元素设置边框必须指定三个样式</span><br><span class="line"> * border-width:边框的宽度</span><br><span class="line"> * border-color:边框颜色</span><br><span class="line"> * border-style:边框的样式</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置边框的宽度</span><br><span class="line"> */</span><br><span class="line">/*border-width:10px ;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> 使用border-width可以分别指定四个边框的宽度</span><br><span class="line"> 如果在border-width指定了四个值，</span><br><span class="line"> 则四个值会分别设置给 上 右 下 左，按照顺时针的方向设置的</span><br><span class="line"> </span><br><span class="line"> 如果指定三个值，</span><br><span class="line"> 则三个值会分别设置给上  左右 下</span><br><span class="line"> </span><br><span class="line"> 如果指定两个值，</span><br><span class="line"> 则两个值会分别设置给 上下 左右</span><br><span class="line"> </span><br><span class="line"> 如果指定一个值，则四边全都是该值</span><br><span class="line"> </span><br><span class="line"> 除了border-width，CSS中还提供了四个border-xxx-width</span><br><span class="line"> xxx的值可能是top right bottom left</span><br><span class="line"> 专门用来设置指定边的宽度</span><br><span class="line"> * */</span><br><span class="line">/*border-width:10px 20px 30px 40px ;*/</span><br><span class="line">/*border-width:10px 20px 30px ;*/</span><br><span class="line">/*border-width: 10px 20px ;*/</span><br><span class="line">border-width: 10px;</span><br><span class="line"></span><br><span class="line">/*border-left-width:100px ;*/</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置边框的颜色</span><br><span class="line"> * 和宽度一样，color也提供四个方向的样式，可以分别指定颜色</span><br><span class="line"> * border-xxx-color</span><br><span class="line"> */</span><br><span class="line">border-color: red;</span><br><span class="line">/*border-color: red yellow orange blue;*/</span><br><span class="line">/*border-color: red yellow orange;*/</span><br><span class="line">/*border-color: red yellow;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置边框的样式</span><br><span class="line"> * 可选值：</span><br><span class="line"> * none，默认值，没有边框</span><br><span class="line"> * solid 实线</span><br><span class="line"> * dotted 点状边框</span><br><span class="line"> * dashed 虚线</span><br><span class="line"> * double 双线</span><br><span class="line"> * </span><br><span class="line"> * style也可以分别指定四个边的边框样式，规则和width一致，</span><br><span class="line"> * 同时它也提供border-xxx-style四个样式，来分别设置四个边</span><br><span class="line"> */</span><br><span class="line">/*border-style: double;*/</span><br><span class="line">border-style: solid dotted dashed double; </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="边框"><a class="markdownIt-Anchor" href="#边框"></a> 边框</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line"></span><br><span class="line">/*设置边框</span><br><span class="line"> 大部分的浏览器中，边框的宽度和颜色都是有默认值，而边框的样式默认值都是none</span><br><span class="line"> * */</span><br><span class="line">/*border-width:10px ;</span><br><span class="line">border-color: red;</span><br><span class="line">border-style: solid;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * border</span><br><span class="line"> * - 边框的简写样式，通过它可以同时设置四个边框的样式，宽度，颜色</span><br><span class="line"> * - 而且没有任何的顺序要求</span><br><span class="line"> * - border一指定就是同时指定四个边不能分别指定</span><br><span class="line"> * </span><br><span class="line"> * border-top border-right border-bottom border-left</span><br><span class="line"> * 可以单独设置四个边的样式，规则和border一样，只不过它只对一个边生效</span><br><span class="line"> */</span><br><span class="line">/*border: red solid 10px   ;*/</span><br><span class="line">/*border-left: red solid 10px   ;*/</span><br><span class="line"></span><br><span class="line">/*border-top: red solid 10px;</span><br><span class="line">border-bottom: red solid 10px;</span><br><span class="line">border-left: red solid 10px;*/</span><br><span class="line"></span><br><span class="line">border: red solid 10px;</span><br><span class="line">border-right: none;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="内边距"><a class="markdownIt-Anchor" href="#内边距"></a> 内边距</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">/*设置边框*/</span><br><span class="line">border: 10px red solid;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 内边距（padding），指的是盒子的内容区与盒子边框之间的距离</span><br><span class="line"> * 一共有四个方向的内边距，可以通过：</span><br><span class="line"> * padding-top</span><br><span class="line"> * padding-right</span><br><span class="line"> * padding-bottom</span><br><span class="line"> * padding-left</span><br><span class="line"> * 来设置四个方向的内边距</span><br><span class="line"> * </span><br><span class="line"> * 内边距会影响盒子的可见框的大小，元素的背景会延伸到内边距,</span><br><span class="line"> * 盒子的大小由内容区、内边距和边框共同决定</span><br><span class="line"> * 盒子可见框的宽度 = border-left-width + padding-left + width + padding-right + border-right-width</span><br><span class="line"> *  可见宽的高度 = border-top-width + padding-top + height + padding-bottom + border-bottom-width</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*设置上内边距*/</span><br><span class="line">/*padding-top: 100px;*/</span><br><span class="line">/*设置右内边距*/</span><br><span class="line">/*padding-right: 100px;</span><br><span class="line">padding-bottom: 100px;</span><br><span class="line">padding-left: 100px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 使用padding可以同时设置四个边框的样式，规则和border-width一致</span><br><span class="line"> */</span><br><span class="line">/*padding: 100px;*/</span><br><span class="line"></span><br><span class="line">/*padding: 100px 200px;*/</span><br><span class="line"></span><br><span class="line">/*padding: 100px 200px 300px;*/</span><br><span class="line"></span><br><span class="line">padding: 100px 200px 300px 400px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 创建一个子元素box1占满box2</span><br><span class="line"> */</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100%;</span><br><span class="line">height: 100%;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="外边距1"><a class="markdownIt-Anchor" href="#外边距1"></a> 外边距1</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">border: 10px solid red;</span><br><span class="line">/*</span><br><span class="line"> * 外边距指的是当前盒子与其他盒子之间的距离，</span><br><span class="line"> * 他不会影响可见框的大小，而是会影响到盒子的位置。</span><br><span class="line"> * 盒子有四个方向的外边距：</span><br><span class="line"> * margin-top</span><br><span class="line"> * margin-right</span><br><span class="line"> * margin-bottom</span><br><span class="line"> * margin-left</span><br><span class="line"> * </span><br><span class="line"> * 由于页面中的元素都是靠左靠上摆放的，</span><br><span class="line"> * 所以注意当我们设置上和左外边距时，会导致盒子自身的位置发生改变，</span><br><span class="line"> * 而如果是设置右和下外边距会改变其他盒子的位置</span><br><span class="line"> */</span><br><span class="line">/*</span><br><span class="line"> * 设置box1的上外边距，盒子上边框和其他的盒子的距离</span><br><span class="line"> */</span><br><span class="line">/*margin-top: 100px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 左外边距</span><br><span class="line"> */</span><br><span class="line">/*margin-left: 100px;*/</span><br><span class="line"></span><br><span class="line">/*设置右和下外边距*/</span><br><span class="line">/*margin-right: 100px;</span><br><span class="line">margin-bottom: 100px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 外边距也可以指定为一个负值，</span><br><span class="line"> * 如果外边距设置的是负值，则元素会向反方向移动</span><br><span class="line"> */</span><br><span class="line">/*margin-left: -150px;</span><br><span class="line">margin-top: -100px;</span><br><span class="line">margin-bottom: -100px;*/</span><br><span class="line">/*margin-bottom: -100px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * margin还可以设置为auto，auto一般只设置给水平方向的margin</span><br><span class="line"> * 如果只指定，左外边距或右外边距的margin为auto则会将外边距设置为最大值</span><br><span class="line"> * 垂直方向外边距如果设置为auto，则外边距默认就是0</span><br><span class="line"> * </span><br><span class="line"> * 如果将left和right同时设置为auto，则会将两侧的外边距设置为相同的值，</span><br><span class="line"> * 就可以使元素自动在父元素中居中，所以我们经常将左右外边距设置为auto</span><br><span class="line"> * 以使子元素在父元素中水平居中</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*margin-left: auto;</span><br><span class="line">margin-right: auto;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 外边距同样可以使用简写属性 margin，可以同时设置四个方向的外边距,</span><br><span class="line"> * 规则和padding一样</span><br><span class="line"> */</span><br><span class="line">margin: 0 auto;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="外边距2"><a class="markdownIt-Anchor" href="#外边距2"></a> 外边距2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: red;</span><br><span class="line">/*</span><br><span class="line"> * 为上边的元素设置一个下外边距</span><br><span class="line"> */</span><br><span class="line">margin-bottom: 100px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 垂直外边距的重叠</span><br><span class="line"> * - 在网页中相邻的垂直方向的外边距会发生外边距的重叠</span><br><span class="line"> * 所谓的外边距重叠指兄弟元素之间的相邻外边距会取最大值而不是取和</span><br><span class="line"> * 如果父子元素的垂直外边距相邻了，则子元素的外边距会设置给父元素</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: green;</span><br><span class="line">/**</span><br><span class="line"> * 为下边的元素设置一个上外边距</span><br><span class="line"> */</span><br><span class="line">margin-top: 100px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box3&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: yellow;</span><br><span class="line"></span><br><span class="line">/*为box3设置一个上边框*/</span><br><span class="line">/*border-top: 1px red solid;*/</span><br><span class="line">/*padding-top: 1px;*/</span><br><span class="line"></span><br><span class="line">padding-top: 100px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box4&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">/*</span><br><span class="line"> * 为子元素设置一个上外边距，是子元素的位置下移</span><br><span class="line"> */</span><br><span class="line">/*margin-top: 100px;*/</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box4&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="浏览器默认样式"><a class="markdownIt-Anchor" href="#浏览器默认样式"></a> 浏览器默认样式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 浏览器为了在页面中没有样式时，也可以有一个比较好的显示效果，</span><br><span class="line"> * 所以为很多的元素都设置了一些默认的margin和padding，</span><br><span class="line"> * 而它的这些默认样式，正常情况下我们是不需要使用的。</span><br><span class="line"> * </span><br><span class="line"> * 所以我们往往在编写样式之前需要将浏览器中的默认的margin和padding统统的去掉</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 清除浏览器的默认样式</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">*&#123;</span><br><span class="line">margin: 0;</span><br><span class="line">padding: 0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">p&#123;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;p&gt;我是一个段落&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个段落&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我是一个段落&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;ul&gt;</span><br><span class="line">&lt;li&gt;无序列表&lt;/li&gt;</span><br><span class="line">&lt;li&gt;无序列表&lt;/li&gt;</span><br><span class="line">&lt;li&gt;无序列表&lt;/li&gt;</span><br><span class="line">&lt;li&gt;无序列表&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="内联元素的盒子"><a class="markdownIt-Anchor" href="#内联元素的盒子"></a> 内联元素的盒子</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">span&#123;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.s1&#123;</span><br><span class="line">/*</span><br><span class="line"> 内容区、内边距 、边框 、外边距</span><br><span class="line"> * */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 内联元素不能设置width和height</span><br><span class="line"> */</span><br><span class="line">/*width: 200px;</span><br><span class="line">height: 200px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置水平内边距,内联元素可以设置水平方向的内边距</span><br><span class="line"> */</span><br><span class="line">padding-left: 100px ;</span><br><span class="line">padding-right: 100px ;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 垂直方向内边距，内联元素可以设置垂直方向内边距，但是不会影响页面的布局</span><br><span class="line"> */</span><br><span class="line">/*padding-top: 50px;</span><br><span class="line">padding-bottom: 50px;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 为元素设置边框,</span><br><span class="line"> * 内联元素可以设置边框，但是垂直的边框不会影响到页面的布局</span><br><span class="line"> */</span><br><span class="line">border: 1px blue solid;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 水平外边距</span><br><span class="line"> * 内联元素支持水平方向的外边距</span><br><span class="line"> */</span><br><span class="line">margin-left:100px ;</span><br><span class="line">margin-right: 100px;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 内联元素不支持垂直外边距</span><br><span class="line"> */</span><br><span class="line">/*margin-top: 200px;</span><br><span class="line">margin-bottom: 200px;*/</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.s2&#123;</span><br><span class="line">/*</span><br><span class="line"> * 为右边的元素设置一个左外边距</span><br><span class="line"> * 水平方向的相邻外边距不会重叠，而是求和</span><br><span class="line"> */</span><br><span class="line">margin-left: 100px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;span class=&quot;s1&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span class=&quot;s2&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span&gt;我是一个span&lt;/span&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="display"><a class="markdownIt-Anchor" href="#display"></a> display</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">a&#123;</span><br><span class="line">background-color: #bfa;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 将一个内联元素变成块元素，</span><br><span class="line"> * 通过display样式可以修改元素的类型</span><br><span class="line"> * 可选值：</span><br><span class="line"> * inline：可以将一个元素作为内联元素显示</span><br><span class="line"> * block: 可以将一个元素设置块元素显示</span><br><span class="line"> * inline-block：将一个元素转换为行内块元素</span><br><span class="line"> * - 可以使一个元素既有行内元素的特点又有块元素的特点</span><br><span class="line"> * 既可以设置宽高，又不会独占一行</span><br><span class="line"> * none: 不显示元素，并且元素不会在页面中继续占有位置</span><br><span class="line"> */</span><br><span class="line">display: none;</span><br><span class="line"></span><br><span class="line">/*为其设置一个宽和高*/</span><br><span class="line">width: 500px;</span><br><span class="line">height: 500px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: orange;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * display: none;</span><br><span class="line"> * 使用该方式隐藏的元素，不会在页面中显示，并且不再占据页面的位置</span><br><span class="line"> */</span><br><span class="line">/*display: none;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * visibility</span><br><span class="line"> * - 可以用来设置元素的隐藏和显示的状态</span><br><span class="line"> * - 可选值：</span><br><span class="line"> * visible 默认值，元素默认会在页面显示</span><br><span class="line"> * hidden 元素会隐藏不显示</span><br><span class="line"> * </span><br><span class="line"> * 使用 visibility:hidden;隐藏的元素虽然不会在页面中显示，</span><br><span class="line"> * 但是它的位置会依然保持</span><br><span class="line"> */</span><br><span class="line">visibility:hidden ;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;a href=&quot;#&quot;&gt;我是一个大大的超链接&lt;/a&gt;</span><br><span class="line"></span><br><span class="line">&lt;span&gt;hello&lt;/span&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="overflow"><a class="markdownIt-Anchor" href="#overflow"></a> overflow</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">/*</span><br><span class="line"> * 子元素默认是存在于父元素的内容区中，</span><br><span class="line"> * 理论上讲子元素的最大可以等于父元素内容区大小</span><br><span class="line"> * 如果子元素的大小超过了父元素的内容区，则超过的大小会在父元素以外的位置显示，</span><br><span class="line"> * 超出父元素的内容，我们称为溢出的内容</span><br><span class="line"> *  父元素默认是将溢出内容，在父元素外边显示，</span><br><span class="line"> * 通过overflow可以设置父元素如何处理溢出内容：</span><br><span class="line"> * 可选值：</span><br><span class="line"> * - visible，默认值，不会对溢出内容做处理，元素会在父元素以外的位置显示</span><br><span class="line"> * - hidden, 溢出的内容，会被修剪，不会显示</span><br><span class="line"> * - scroll, 会为父元素添加滚动条，通过拖动滚动条来查看完整内容</span><br><span class="line"> * - 该属性不论内容是否溢出，都会添加水平和垂直双方向的滚动条</span><br><span class="line"> * - auto，会根据需求自动添加滚动条，</span><br><span class="line"> * 需要水平就添加水平</span><br><span class="line"> * 需要垂直就添加垂直</span><br><span class="line"> * 都不需要就都不加</span><br><span class="line"> */</span><br><span class="line">overflow: auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 500px;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。</span><br><span class="line">这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。</span><br><span class="line">我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。</span><br><span class="line">枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。</span><br><span class="line">鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。</span><br><span class="line">哇的一声，夜游的恶鸟飞过了。</span><br><span class="line">我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。</span><br><span class="line">后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。</span><br><span class="line">猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。</span><br><span class="line">我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。</span><br><span class="line">一九二四年九月十五日。 </span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="文档流"><a class="markdownIt-Anchor" href="#文档流"></a> 文档流</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">文档流</span><br><span class="line">文档流处在网页的最底层，它表示的是一个页面中的位置，</span><br><span class="line"> 我们所创建的元素默认都处在文档流中</span><br><span class="line"> </span><br><span class="line">元素在文档流中的特点</span><br><span class="line">块元素</span><br><span class="line">1.块元素在文档流中会独占一行，块元素会自上向下排列。</span><br><span class="line">2.块元素在文档流中默认宽度是父元素的100%</span><br><span class="line">3.块元素在文档流中的高度默认被内容撑开</span><br><span class="line">内联元素</span><br><span class="line">1.内联元素在文档流中只占自身的大小，会默认从左向右排列，</span><br><span class="line">如果一行中不足以容纳所有的内联元素，则换到下一行，</span><br><span class="line">继续自左向右。</span><br><span class="line">2.在文档流中，内联元素的宽度和高度默认都被内容撑开</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">当元素的宽度的值为auto时，此时指定内边距不会影响可见框的大小，</span><br><span class="line">而是会自动修改宽度，以适应内边距</span><br><span class="line">--&gt;</span><br><span class="line">&lt;div style=&quot;background-color: #bfa;&quot;&gt;</span><br><span class="line">&lt;div style=&quot;height: 50px;&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line">&lt;div style=&quot;width: 100px; height: 100px; background-color: #ff0;&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;span style=&quot;background-color: yellowgreen;&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span style=&quot;background-color: yellowgreen;&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span style=&quot;background-color: yellowgreen;&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span style=&quot;background-color: yellowgreen;&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span style=&quot;background-color: yellowgreen;&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;span style=&quot;background-color: yellowgreen;&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="浮动1"><a class="markdownIt-Anchor" href="#浮动1"></a> 浮动1</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 600px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: red;</span><br><span class="line">/*</span><br><span class="line"> * 块元素在文档流中默认垂直排列，所以这个三个div自上至下依次排开，</span><br><span class="line"> * 如果希望块元素在页面中水平排列，可以使块元素脱离文档流</span><br><span class="line"> * 使用float来使元素浮动，从而脱离文档流</span><br><span class="line"> * 可选值：</span><br><span class="line"> * none，默认值，元素默认在文档流中排列</span><br><span class="line"> * left，元素会立即脱离文档流，向页面的左侧浮动</span><br><span class="line"> * right，元素会立即脱离文档流，向页面的右侧浮动</span><br><span class="line"> * </span><br><span class="line"> * 当为一个元素设置浮动以后（float属性是一个非none的值），</span><br><span class="line"> * 元素会立即脱离文档流，元素脱离文档流以后，它下边的元素会立即向上移动</span><br><span class="line"> * 元素浮动以后，会尽量向页面的左上或这是右上漂浮，</span><br><span class="line"> * 直到遇到父元素的边框或者其他的浮动元素</span><br><span class="line"> * 如果浮动元素上边是一个没有浮动的块元素，则浮动元素不会超过块元素</span><br><span class="line"> * 浮动的元素不会超过他上边的兄弟元素，最多最多一边齐</span><br><span class="line"> */</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 600px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line"></span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box3&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: green;</span><br><span class="line"></span><br><span class="line">float: right;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="浮动2"><a class="markdownIt-Anchor" href="#浮动2"></a> 浮动2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">*&#123;</span><br><span class="line">margin: 0;</span><br><span class="line">padding: 0;</span><br><span class="line">&#125;</span><br><span class="line">.box1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">/*</span><br><span class="line"> * 浮动的元素不会盖住文字，文字会自动环绕在浮动元素的周围，</span><br><span class="line"> * 所以我们可以通过浮动来设置文字环绕图片的效果</span><br><span class="line"> */ </span><br><span class="line"> </span><br><span class="line">/*box1向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.p1&#123;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;p class=&quot;p1&quot;&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。</span><br><span class="line">这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。</span><br><span class="line">我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。</span><br><span class="line">枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。</span><br><span class="line">鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。</span><br><span class="line">哇的一声，夜游的恶鸟飞过了。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="浮动3"><a class="markdownIt-Anchor" href="#浮动3"></a> 浮动3</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">/*</span><br><span class="line"> * 在文档流中，子元素的宽度默认占父元素的全部</span><br><span class="line"> */</span><br><span class="line">background-color: #bfa;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 当元素设置浮动以后，会完全脱离文档流.</span><br><span class="line"> * 块元素脱离文档流以后，高度和宽度都被内容撑开</span><br><span class="line"> */</span><br><span class="line">/*float: left;*/</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.s1&#123;</span><br><span class="line">/*</span><br><span class="line"> * 开启span的浮动</span><br><span class="line"> * 内联元素脱离文档流以后会变成块元素</span><br><span class="line"> */</span><br><span class="line">float: left;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;a&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;span class=&quot;s1&quot;&gt;hello&lt;/span&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="简单布局"><a class="markdownIt-Anchor" href="#简单布局"></a> 简单布局</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*清除默认样式*/</span><br><span class="line">*&#123;</span><br><span class="line">margin: 0;</span><br><span class="line">padding: 0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置头部div*/</span><br><span class="line">.header&#123;</span><br><span class="line">/*设置一个宽度*/</span><br><span class="line">width: 1000px;</span><br><span class="line">/*设置一个高度*/</span><br><span class="line">height: 120px;</span><br><span class="line">/*设置一个背景颜色*/</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">/*设置居中*/</span><br><span class="line">margin: 0 auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置一个content*/</span><br><span class="line">.content&#123;</span><br><span class="line">/*设置一个宽度*/</span><br><span class="line">width: 1000px;</span><br><span class="line">/*设置一个高度*/</span><br><span class="line">height: 400px;</span><br><span class="line">/*设置一个背景颜色*/</span><br><span class="line">background-color: orange;</span><br><span class="line">/*居中*/</span><br><span class="line">margin: 10px auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置content中小div的样式*/</span><br><span class="line">.left&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 100%;</span><br><span class="line">background-color: skyblue;</span><br><span class="line">/*向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.center&#123;</span><br><span class="line">width: 580px;</span><br><span class="line">height: 100%;</span><br><span class="line">background-color: yellow;</span><br><span class="line">/*向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line">/*设置水平外边距*/</span><br><span class="line">margin: 0 10px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.right&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 100%;</span><br><span class="line">background-color: pink;</span><br><span class="line">/*向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*设置一个footer*/</span><br><span class="line">.footer&#123;</span><br><span class="line">/*设置一个宽度*/</span><br><span class="line">width: 1000px;</span><br><span class="line">/*设置一个高度*/</span><br><span class="line">height: 120px;</span><br><span class="line">/*设置一个背景颜色*/</span><br><span class="line">background-color: silver;</span><br><span class="line">/*居中*/</span><br><span class="line">margin: 0 auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!-- 头部div --&gt;</span><br><span class="line">&lt;div class=&quot;header&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 主体内容div --&gt;</span><br><span class="line">&lt;div class=&quot;content&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 左侧div --&gt;</span><br><span class="line">&lt;div class=&quot;left&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;!-- 中间div --&gt;</span><br><span class="line">&lt;div class=&quot;center&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;!-- 右侧div --&gt;</span><br><span class="line">&lt;div class=&quot;right&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 底部信息div --&gt;</span><br><span class="line">&lt;div class=&quot;footer&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="高度塌陷"><a class="markdownIt-Anchor" href="#高度塌陷"></a> 高度塌陷</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">/*为box1设置一个边框*/</span><br><span class="line">border: 10px red solid;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: blue;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在文档流中，父元素的高度默认是被子元素撑开的，</span><br><span class="line"> * 也就是子元素多高，父元素就多高。</span><br><span class="line"> * 但是当为子元素设置浮动以后，子元素会完全脱离文档流，</span><br><span class="line"> * 此时将会导致子元素无法撑起父元素的高度，导致父元素的高度塌陷。</span><br><span class="line"> * 由于父元素的高度塌陷了，则父元素下的所有元素都会向上移动，这样将会导致页面布局混乱。</span><br><span class="line"> * </span><br><span class="line"> * 所以在开发中一定要避免出现高度塌陷的问题,</span><br><span class="line"> * 我们可以将父元素的高度写死，以避免塌陷的问题出现，</span><br><span class="line"> * 但是一旦高度写死，父元素的高度将不能自动适应子元素的高度，所以这种方案是不推荐使用的。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*为子元素设置向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box3&#123;</span><br><span class="line"> height: 100px;</span><br><span class="line"> background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="解决高度塌陷"><a class="markdownIt-Anchor" href="#解决高度塌陷"></a> 解决高度塌陷</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">/*为box1设置一个边框*/</span><br><span class="line">border: 10px red solid;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: blue;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在文档流中，父元素的高度默认是被子元素撑开的，</span><br><span class="line"> * 也就是子元素多高，父元素就多高。</span><br><span class="line"> * 但是当为子元素设置浮动以后，子元素会完全脱离文档流，</span><br><span class="line"> * 此时将会导致子元素无法撑起父元素的高度，导致父元素的高度塌陷。</span><br><span class="line"> * 由于父元素的高度塌陷了，则父元素下的所有元素都会向上移动，这样将会导致页面布局混乱。</span><br><span class="line"> * </span><br><span class="line"> * 所以在开发中一定要避免出现高度塌陷的问题,</span><br><span class="line"> * 我们可以将父元素的高度写死，以避免塌陷的问题出现，</span><br><span class="line"> * 但是一旦高度写死，父元素的高度将不能自动适应子元素的高度，所以这种方案是不推荐使用的。</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*为子元素设置向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box3&#123;</span><br><span class="line"> height: 100px;</span><br><span class="line"> background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="导航条"><a class="markdownIt-Anchor" href="#导航条"></a> 导航条</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;导航条&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 清除默认样式</span><br><span class="line"> */</span><br><span class="line">*&#123;</span><br><span class="line">margin:0;</span><br><span class="line">padding:0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置ul</span><br><span class="line"> */</span><br><span class="line">.nav&#123;</span><br><span class="line">/*去除项目符号*/</span><br><span class="line">list-style: none;</span><br><span class="line">/*为ul设置一个背景颜色*/</span><br><span class="line">background-color: #6495ED;</span><br><span class="line">/*设置一个宽度*/</span><br><span class="line">/*</span><br><span class="line"> * 在IE6中，如果为元素指定了一个宽度，则会默认开启hasLayout</span><br><span class="line"> */</span><br><span class="line">width: 1000px;</span><br><span class="line">/*设置元素居中*/</span><br><span class="line">margin: 50px auto;</span><br><span class="line">/*解决高度塌陷*/</span><br><span class="line">overflow: hidden;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * 设置li</span><br><span class="line"> */</span><br><span class="line">.nav li&#123;</span><br><span class="line">/*设置li向左浮动*/</span><br><span class="line">float: left;</span><br><span class="line">width: 12.5%;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.nav a&#123;</span><br><span class="line">/*将a转换为块元素*/</span><br><span class="line">display: block;</span><br><span class="line">/*为a指定一个宽度*/</span><br><span class="line">width: 100%;</span><br><span class="line">/*设置文字居中*/</span><br><span class="line">text-align: center;</span><br><span class="line">/*设置一个上下内边距*/</span><br><span class="line">padding: 5px 0;</span><br><span class="line">/*去除下划线*/</span><br><span class="line">text-decoration: none;</span><br><span class="line">/*设置字体颜色*/</span><br><span class="line">color: white;</span><br><span class="line">/*设置加粗*/</span><br><span class="line">font-weight: bold;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置a的鼠标移入的效果</span><br><span class="line"> */</span><br><span class="line">.nav a:hover&#123;</span><br><span class="line">background-color: #c00;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 创建导航条的结构 --&gt;</span><br><span class="line">&lt;ul class=&quot;nav&quot;&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;首页&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;新闻&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;联系&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;关于&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;首页&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;新闻&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;联系&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;li&gt;&lt;a href=&quot;#&quot;&gt;关于&lt;/a&gt;&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="清除浮动"><a class="markdownIt-Anchor" href="#清除浮动"></a> 清除浮动</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">/*</span><br><span class="line"> * 设置box1向左浮动</span><br><span class="line"> */</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">/*</span><br><span class="line"> * 由于受到box1浮动的影响，box2整体向上移动了100px</span><br><span class="line"> * 我们有时希望清除掉其他元素浮动对当前元素产生的影响，这时可以使用clear来完成功能</span><br><span class="line"> * clear可以用来清除其他浮动元素对当前元素的影响</span><br><span class="line"> * 可选值：</span><br><span class="line"> * none，默认值，不清除浮动</span><br><span class="line"> * left，清除左侧浮动元素对当前元素的影响</span><br><span class="line"> * right，清除右侧浮动元素对当前元素的影响</span><br><span class="line"> * both，清除两侧浮动元素对当前元素的影响</span><br><span class="line"> * 清除对他影响最大的那个元素的浮动</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 清除box1浮动对box2产生的影响</span><br><span class="line"> * 清除浮动以后，元素会回到其他元素浮动之前的位置</span><br><span class="line"> */</span><br><span class="line">/*clear: left;*/</span><br><span class="line">float: right;</span><br><span class="line">&#125;</span><br><span class="line">.box3&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">height: 300px;</span><br><span class="line">background-color: skyblue;</span><br><span class="line"></span><br><span class="line">clear: both;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="解决高度塌陷2"><a class="markdownIt-Anchor" href="#解决高度塌陷2"></a> 解决高度塌陷2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">border: 1px solid red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: blue;</span><br><span class="line"></span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 解决高度塌陷方案二：</span><br><span class="line"> * 可以直接在高度塌陷的父元素的最后，添加一个空白的div，</span><br><span class="line"> * 由于这个div并没有浮动，所以他是可以撑开父元素的高度的，</span><br><span class="line"> * 然后在对其进行清除浮动，这样可以通过这个空白的div来撑开父元素的高度，</span><br><span class="line"> * 基本没有副作用</span><br><span class="line"> * </span><br><span class="line"> * 使用这种方式虽然可以解决问题，但是会在页面中添加多余的结构。</span><br><span class="line"> */</span><br><span class="line">.clear&#123;</span><br><span class="line">clear: both;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="解决高度塌陷3"><a class="markdownIt-Anchor" href="#解决高度塌陷3"></a> 解决高度塌陷3</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">border: 1px solid red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: blue;</span><br><span class="line"></span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*通过after伪类，选中box1的后边*/</span><br><span class="line">/*</span><br><span class="line"> * 可以通过after伪类向元素的最后添加一个空白的块元素，然后对其清除浮动，</span><br><span class="line"> * 这样做和添加一个div的原理一样，可以达到一个相同的效果，</span><br><span class="line"> * 而且不会在页面中添加多余的div，这是我们最推荐使用的方式，几乎没有副作用</span><br><span class="line"> */</span><br><span class="line">.clearfix:after&#123;</span><br><span class="line">/*添加一个内容*/</span><br><span class="line">content: &quot;&quot;;</span><br><span class="line">/*转换为一个块元素*/</span><br><span class="line">display: block;</span><br><span class="line">/*清除两侧的浮动*/</span><br><span class="line">clear: both;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 在IE6中不支持after伪类,</span><br><span class="line"> * 所以在IE6中还需要使用hasLayout来处理</span><br><span class="line"> */</span><br><span class="line">.clearfix&#123;</span><br><span class="line">zoom:1;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="开班信息"><a class="markdownIt-Anchor" href="#开班信息"></a> 开班信息</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">/*清除默认样式*/</span><br><span class="line">*&#123;</span><br><span class="line">margin: 0;</span><br><span class="line">padding: 0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*统一页面中的字体*/</span><br><span class="line">body&#123;</span><br><span class="line">font: 12px/1 宋体;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置outer的大小*/</span><br><span class="line">.outer&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">/*height: 473px;*/</span><br><span class="line">/*background-color: #bfa;*/</span><br><span class="line">/*设置outer居中效果*/</span><br><span class="line">margin: 50px auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置title的边框</span><br><span class="line"> */</span><br><span class="line">.title&#123;</span><br><span class="line">/*设置上边框*/</span><br><span class="line">border-top:2px #019e8b solid ;</span><br><span class="line">/*设置盒子的高度*/</span><br><span class="line">height: 36px;</span><br><span class="line">/*设置背景样式*/</span><br><span class="line">background-color: #f5f5f5;</span><br><span class="line">/*设置title的行高*/</span><br><span class="line">line-height: 36px;</span><br><span class="line">/*设置title的内边距*/</span><br><span class="line">padding: 0px 22px 0px 16px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> 设置title中的超链接</span><br><span class="line"> * */</span><br><span class="line">.title a&#123;</span><br><span class="line">float: right;</span><br><span class="line">/*设置字体颜色*/</span><br><span class="line">color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置h3*/</span><br><span class="line">.title h3&#123;</span><br><span class="line">font: 16px/36px &quot;微软雅黑&quot;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置内容*/</span><br><span class="line">.content&#123;</span><br><span class="line">border: 1px solid #deddd9;</span><br><span class="line">/*设置内边距*/</span><br><span class="line">padding: 0px 28px 0px 20px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置内容中的超链接*/</span><br><span class="line">.content a&#123;</span><br><span class="line">color: black;</span><br><span class="line">/*去除超链接的下划线*/</span><br><span class="line">text-decoration: none;</span><br><span class="line">/*设置字体大小*/</span><br><span class="line">font-size: 12px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*为超链接添加一个hover伪类*/</span><br><span class="line">.content a:hover&#123;</span><br><span class="line">color: red;</span><br><span class="line">/*为超链接添加下划线*/</span><br><span class="line">text-decoration: underline;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置内容中的标题*/</span><br><span class="line">.content h3&#123;</span><br><span class="line">margin-top: 14px;</span><br><span class="line">margin-bottom: 16px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置右侧的a的样式</span><br><span class="line"> */</span><br><span class="line">.content .right&#123;</span><br><span class="line">/*设置向右浮动*/</span><br><span class="line">float: right;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置ul的样式*/</span><br><span class="line">.content ul&#123;</span><br><span class="line">/*去除项目符号*/</span><br><span class="line">list-style: none;</span><br><span class="line">/*为ul设置一个下边框*/</span><br><span class="line">border-bottom: 1px dashed #deddd9;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*取消最后一个ul的边框*/</span><br><span class="line">.content .no-border&#123;</span><br><span class="line">border: none;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置内容中的红色字体*/</span><br><span class="line">.content .red&#123;</span><br><span class="line">color: red;</span><br><span class="line">font-weight: bold;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*设置内容中的li*/</span><br><span class="line">.content li&#123;</span><br><span class="line">margin-bottom: 15px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--创建一个外层div，容纳整个内容--&gt;</span><br><span class="line">&lt;div class=&quot;outer&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 开班信息的头部 --&gt;</span><br><span class="line">&lt;div class=&quot;title&quot;&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;16年面授开班计划&lt;/a&gt;</span><br><span class="line">&lt;h3&gt;近期开班&lt;/h3&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 开班信息的主要内容 --&gt;</span><br><span class="line">&lt;div class=&quot;content&quot;&gt;</span><br><span class="line">&lt;h3&gt;&lt;a href=&quot;#&quot;&gt;JavaEE+云计算-全程就业班&lt;/a&gt;&lt;/h3&gt;</span><br><span class="line">&lt;ul&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;red&quot;&gt;预约报名&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span class=&quot;red&quot;&gt;2016-04-27&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;red&quot;&gt;无座，名额爆满&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span class=&quot;red&quot;&gt;2016-04-07&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2016-03-15&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2016-02-25&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2015-12-26&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line"></span><br><span class="line">&lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Android+人工智能-全程就业班&lt;/a&gt;&lt;/h3&gt;</span><br><span class="line">&lt;ul&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;red&quot;&gt;预约报名&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span class=&quot;red&quot;&gt;2016-04-10&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2016-03-17&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2016-02-20&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2015-12-23&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line">&lt;h3&gt;&lt;a href=&quot;#&quot;&gt;前端+HTML5-全程就业班&lt;/a&gt;&lt;/h3&gt;</span><br><span class="line">&lt;ul class=&quot;no-border&quot;&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;red&quot;&gt;预约报名&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span class=&quot;red&quot;&gt;2016-05-10&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;li&gt;</span><br><span class="line">&lt;a class=&quot;right&quot; href=&quot;#&quot;&gt;&lt;span&gt;开班盛况&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;a href=&quot;#&quot;&gt;开班时间：&lt;span&gt;2016-03-16&lt;/span&gt;&lt;/a&gt;</span><br><span class="line">&lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="相对定位"><a class="markdownIt-Anchor" href="#相对定位"></a> 相对定位</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">/*</span><br><span class="line"> * 定位：</span><br><span class="line"> * - 定位指的就是将指定的元素摆放到页面的任意位置</span><br><span class="line"> * 通过定位可以任意的摆放元素</span><br><span class="line"> * - 通过position属性来设置元素的定位</span><br><span class="line"> * -可选值：</span><br><span class="line"> * static：默认值，元素没有开启定位</span><br><span class="line"> * relative：开启元素的相对定位</span><br><span class="line"> * absolute：开启元素的绝对定位</span><br><span class="line"> * fixed：开启元素的固定定位（也是绝对定位的一种）</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 当元素的position属性设置为relative时，则开启了元素的相对定位</span><br><span class="line"> * 1.当开启了元素的相对定位以后，而不设置偏移量时，元素不会发生任何变化</span><br><span class="line"> *  2.相对定位是相对于元素在文档流中原来的位置进行定位</span><br><span class="line"> * 3.相对定位的元素不会脱离文档流</span><br><span class="line"> * 4.相对定位会使元素提升一个层级</span><br><span class="line"> * 5.相对定位不会改变元素的性质，块还是块，内联还是内联</span><br><span class="line"> */</span><br><span class="line">position: relative;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 当开启了元素的定位（position属性值是一个非static的值）时，</span><br><span class="line"> * 可以通过left right top bottom四个属性来设置元素的偏移量</span><br><span class="line"> * left：元素相对于其定位位置的左侧偏移量</span><br><span class="line"> * right：元素相对于其定位位置的右侧偏移量</span><br><span class="line"> * top：元素相对于其定位位置的上边的偏移量</span><br><span class="line"> * bottom：元素相对于其定位位置下边的偏移量</span><br><span class="line"> * </span><br><span class="line"> * 通常偏移量只需要使用两个就可以对一个元素进行定位，</span><br><span class="line"> * 一般选择水平方向的一个偏移量和垂直方向的偏移量来为一个元素进行定位</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">/*left: 100px;</span><br><span class="line">top: 200px;*/</span><br><span class="line"></span><br><span class="line">left: 200px;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box3&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.s1&#123;</span><br><span class="line">position: relative;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;span class=&quot;s1&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="绝对定位"><a class="markdownIt-Anchor" href="#绝对定位"></a> 绝对定位</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">/*</span><br><span class="line"> * 当position属性值设置为absolute时，则开启了元素的绝对定位</span><br><span class="line"> * </span><br><span class="line"> * 绝对定位：</span><br><span class="line"> * 1.开启绝对定位，会使元素脱离文档流</span><br><span class="line"> * 2.开启绝对定位以后，如果不设置偏移量，则元素的位置不会发生变化</span><br><span class="line"> * 3.绝对定位是相对于离他最近的开启了定位的祖先元素进行定位的（一般情况，开启了子元素的绝对定位都会同时开启父元素的相对定位）</span><br><span class="line"> * 如果所有的祖先元素都没有开启定位，则会相对于浏览器窗口进行定位</span><br><span class="line"> * 4.绝对定位会使元素提升一个层级</span><br><span class="line"> * 5.绝对定位会改变元素的性质，</span><br><span class="line"> * 内联元素变成块元素，</span><br><span class="line"> * 块元素的宽度和高度默认都被内容撑开</span><br><span class="line"> */</span><br><span class="line">position: absolute;</span><br><span class="line"></span><br><span class="line">/*left: 100px;</span><br><span class="line">top: 100px;*/</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line">.box3&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">height: 300px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box4&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">height: 300px;</span><br><span class="line">background-color: orange;</span><br><span class="line">/*开启box4的相对定位*/</span><br><span class="line">/*position: relative;*/</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.s1&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: yellow;</span><br><span class="line"></span><br><span class="line">/*开启绝对定位*/</span><br><span class="line">position: absolute;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box5&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box4&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;span class=&quot;s1&quot;&gt;我是一个span&lt;/span&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="固定定位"><a class="markdownIt-Anchor" href="#固定定位"></a> 固定定位</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: red;</span><br><span class="line">&#125;</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">/*</span><br><span class="line"> * 当元素的position属性设置fixed时，则开启了元素的固定定位</span><br><span class="line"> * 固定定位也是一种绝对定位，它的大部分特点都和绝对定位一样</span><br><span class="line"> * 不同的是：</span><br><span class="line"> * 固定定位永远都会相对于浏览器窗口进行定位</span><br><span class="line"> * 固定定位会固定在浏览器窗口某个位置，不会随滚动条滚动</span><br><span class="line"> * </span><br><span class="line"> * IE6不支持固定定位</span><br><span class="line"> */</span><br><span class="line">position: fixed;</span><br><span class="line"></span><br><span class="line">left: 0px;</span><br><span class="line">top: 0px;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line">.box3&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body style=&quot;height: 5000px;&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box4&quot; style=&quot;width: 300px; height: 300px; background-color: orange; position: relative;&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="层级"><a class="markdownIt-Anchor" href="#层级"></a> 层级</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: red;</span><br><span class="line">position: relative;</span><br><span class="line"></span><br><span class="line">z-index: 2;</span><br><span class="line"></span><br><span class="line">opacity: 0.5;</span><br><span class="line">filter: alpha(opacity=50);</span><br><span class="line">&#125;</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line">/*开启绝对定位*/</span><br><span class="line">position: absolute;</span><br><span class="line">/*设置偏移量*/</span><br><span class="line">top: 100px;</span><br><span class="line">left: 100px;</span><br><span class="line">/*</span><br><span class="line"> * 如果定位元素的层级是一样，则下边的元素会盖住上边的</span><br><span class="line"> * 通过z-index属性可以用来设置元素的层级</span><br><span class="line"> * 可以为z-index指定一个正整数作为值，该值将会作为当前元素的层级</span><br><span class="line"> * 层级越高，越优先显示</span><br><span class="line"> * </span><br><span class="line"> * 对于没有开启定位的元素不能使用z-index</span><br><span class="line"> */</span><br><span class="line">z-index: 25;</span><br><span class="line"></span><br><span class="line">opacity: 0.5;</span><br><span class="line">filter: alpha(opacity=50);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line">.box3&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">/*position: relative;</span><br><span class="line">z-index: 3;*/</span><br><span class="line">position: absolute;</span><br><span class="line">top: 200px;</span><br><span class="line">left: 200px;</span><br><span class="line">z-index: 30;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置元素的透明背景</span><br><span class="line"> * opacity可以用来设置元素背景的透明，</span><br><span class="line"> * 它需要一个0-1之间的值</span><br><span class="line"> * 0 表示完全透明</span><br><span class="line"> * 1 表示完全不透明</span><br><span class="line"> * 0.5 表示半透明</span><br><span class="line"> */</span><br><span class="line">opacity: 0.5;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * opacity属性在IE8及以下的浏览器中不支持</span><br><span class="line"> * IE8及以下的浏览器需要使用如下属性代替</span><br><span class="line"> * alpha(opacity=透明度)</span><br><span class="line"> * 透明度，需要一个0-100之间的值</span><br><span class="line"> * 0 表示完全透明</span><br><span class="line"> * 100 表示完全不透明</span><br><span class="line"> * 50 半透明</span><br><span class="line"> * </span><br><span class="line"> * 这种方式支持IE6，但是这种效果在IE Tester中无法测试</span><br><span class="line"> */</span><br><span class="line">filter: alpha(opacity=50);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box4&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: orange;</span><br><span class="line">/*开启相对定位*/</span><br><span class="line">position: relative;</span><br><span class="line">/*</span><br><span class="line"> * 父元素的层级再高，也不会盖住子元素</span><br><span class="line"> */</span><br><span class="line">z-index: 20;</span><br><span class="line"></span><br><span class="line">top: 500px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box5&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: skyblue;</span><br><span class="line">/*开启绝对定位*/</span><br><span class="line">position: absolute;</span><br><span class="line">z-index: 10;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body style=&quot;height: 5000px;&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box3&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box4&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box5&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="背景"><a class="markdownIt-Anchor" href="#背景"></a> 背景</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 1024px;</span><br><span class="line">height: 724px;</span><br><span class="line">margin: 0 auto;</span><br><span class="line">/*设置背景样式*/</span><br><span class="line">background-color: #bfa;</span><br><span class="line">/*</span><br><span class="line"> * 使用background-image来设置背景图片</span><br><span class="line"> * - 语法：background-image:url(相对路径);</span><br><span class="line"> * </span><br><span class="line"> * - 如果背景图片大于元素，默认会显示图片的左上角</span><br><span class="line"> * - 如果背景图片和元素一样大，则会将背景图片全部显示</span><br><span class="line"> * - 如果背景图片小于元素大小，则会默认将背景图片平铺以充满元素</span><br><span class="line"> * </span><br><span class="line"> * 可以同时为一个元素指定背景颜色和背景图片，</span><br><span class="line"> * 这样背景颜色将会作为背景图片的底色</span><br><span class="line"> * 一般情况下设置背景图片时都会同时指定一个背景颜色</span><br><span class="line"> */</span><br><span class="line">background-image:url(img/1.png);</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * background-repeat用于设置背景图片的重复方式</span><br><span class="line"> * 可选值：</span><br><span class="line"> * repeat，默认值，背景图片会双方向重复（平铺）</span><br><span class="line"> * no-repeat ，背景图片不会重复，有多大就显示多大</span><br><span class="line"> * repeat-x， 背景图片沿水平方向重复</span><br><span class="line"> * repeat-y，背景图片沿垂直方向重复</span><br><span class="line"> */</span><br><span class="line">background-repeat: repeat-y;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot;/&gt;--&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="导航条-2"><a class="markdownIt-Anchor" href="#导航条-2"></a> 导航条</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line"></span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">.box1&#123;</span><br><span class="line">width: 990px;</span><br><span class="line">height: 32px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">margin: 50px auto;</span><br><span class="line">/*</span><br><span class="line"> * 设置为背景图片</span><br><span class="line"> */</span><br><span class="line">background-image: url(img/bg.gif);</span><br><span class="line">/*</span><br><span class="line"> * 设置水平方向重复</span><br><span class="line"> */</span><br><span class="line">background-repeat: repeat-x;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="背景2"><a class="markdownIt-Anchor" href="#背景2"></a> 背景2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">*&#123;</span><br><span class="line">margin: 0;</span><br><span class="line">padding: 0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">height: 500px;</span><br><span class="line">margin:  0 auto;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置一个背景颜色</span><br><span class="line"> */</span><br><span class="line">background-color: #bfa;</span><br><span class="line">/*</span><br><span class="line"> * 设置一个背景图片</span><br><span class="line"> */</span><br><span class="line">background-image: url(img/4.png);</span><br><span class="line">/*</span><br><span class="line"> * 设置一个图片不重复</span><br><span class="line"> */</span><br><span class="line">background-repeat: no-repeat;</span><br><span class="line">/*</span><br><span class="line"> * 背景图片默认是贴着元素的左上角显示</span><br><span class="line"> * 通过background-position可以调整背景图片在元素中的位置</span><br><span class="line"> * 可选值：</span><br><span class="line"> * 该属性可以使用 top right left bottom center中的两个值</span><br><span class="line"> * 来指定一个背景图片的位置</span><br><span class="line"> * top left 左上</span><br><span class="line"> * bottom right 右下</span><br><span class="line"> * 如果只给出一个值，则第二个值默认是center</span><br><span class="line"> * </span><br><span class="line"> * 也可以直接指定两个偏移量，</span><br><span class="line"> * 第一个值是水平偏移量</span><br><span class="line"> * - 如果指定的是一个正值，则图片会向右移动指定的像素</span><br><span class="line"> * - 如果指定的是一个负值，则图片会向左移动指定的像素</span><br><span class="line"> * 第二个是垂直偏移量</span><br><span class="line"> * - 如果指定的是一个正值，则图片会向下移动指定的像素</span><br><span class="line"> * - 如果指定的是一个负值，则图片会向上移动指定的像素</span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line">/*background-position: -80px -40px;*/</span><br><span class="line">background-attachment: fixed;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">body&#123;</span><br><span class="line">background-image: url(img/3.png);</span><br><span class="line">background-repeat: no-repeat;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * background-attachment用来设置背景图片是否随页面一起滚动</span><br><span class="line"> * 可选值：</span><br><span class="line"> * scroll，默认值，背景图片随着窗口滚动</span><br><span class="line"> * fixed，背景图片会固定在某一位置，不随页面滚动</span><br><span class="line"> * </span><br><span class="line"> * 不随窗口滚动的图片，我们一般都是设置给body，而不设置给其他元素</span><br><span class="line"> */</span><br><span class="line">background-attachment:fixed ;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body style=&quot;height: 5000px;&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="背景3"><a class="markdownIt-Anchor" href="#背景3"></a> 背景3</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line"></span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line">body &#123;</span><br><span class="line">background-image: url(img/2.jpg);</span><br><span class="line">background-repeat: no-repeat;</span><br><span class="line">background-position: center;</span><br><span class="line">/*</span><br><span class="line"> * 当背景图片的background-attachment设置为fixed时，</span><br><span class="line"> * 背景图片的定位永远相对于浏览器的窗口</span><br><span class="line"> */</span><br><span class="line">background-attachment: fixed;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line"></span><br><span class="line">&lt;body style=&quot;height: 5000px;&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line">&lt;p&gt;</span><br><span class="line">在我的后园，可以看见墙外有两株树，一株是枣树，还有一株也是枣树。 这上面的夜的天空，奇怪而高，我生平没有见过这样奇怪而高的天空。他仿佛要离开人间而去，使人们仰面不再看见。然而现在却非常之蓝，闪闪地䀹着几十个星星的眼，冷眼。他的口角上现出微笑，似乎自以为大有深意，而将繁霜洒在我的园里的野花草上。 我不知道那些花草真叫什么名字，人们叫他们什么名字。我记得有一种开过极细小的粉红花，现在还开着，但是更极细小了，她在冷的夜气中，瑟缩地做梦，梦见春的到来，梦见秋的到来，梦见瘦的诗人将眼泪擦在她最末的花瓣上，告诉她秋虽然来，冬虽然来，而此后接着还是春，蝴蝶乱飞，蜜蜂都唱起春词来了。她于是一笑，虽然颜色冻得红惨惨地，仍然瑟缩着。 枣树，他们简直落尽了叶子。先前，还有一两个孩子来打他们，别人打剩的枣子，现在是一个也不剩了，连叶子也落尽了。他知道小粉红花的梦，秋后要有春；他也知道落叶的梦，春后还是秋。他简直落尽叶子，单剩干子，然而脱了当初满树是果实和叶子时候的弧形，欠伸得很舒服。但是，有几枝还低亚着，护定他从打枣的竿梢所得的皮伤，而最直最长的几枝，却已默默地铁似的直刺着奇怪而高的天空，使天空闪闪地鬼䀹眼；直刺着天空中圆满的月亮，使月亮窘得发白。 鬼䀹眼的天空越加非常之蓝，不安了，仿佛想离去人间，避开枣树，只将月亮剩下。然而月亮也暗暗地躲到东边去了。而一无所有的干子，却仍然默默地铁似的直刺着奇怪而高的天空，一意要制他的死命，不管他各式各样地䀹着许多蛊惑的眼睛。 哇的一声，夜游的恶鸟飞过了。 我忽而听到夜半的笑声，吃吃地，似乎不愿意惊动睡着的人，然而四围的空气都应和着笑。夜半，没有别的人，我即刻听出这声音就在我嘴里，我也即刻被这笑声所驱逐，回进自己的房。灯火的带子也即刻被我旋高了。 后窗的玻璃上丁丁地响，还有许多小飞虫乱撞。不多久，几个进来了，许是从窗纸的破孔进来的。他们一进来，又在玻璃的灯罩上撞得丁丁地响。一个从上面撞进去了，他于是遇到火，而且我以为这火是真的。两三个却休息在灯的纸罩上喘气。那罩是昨晚新换的罩，雪白的纸，折出波浪纹的叠痕，一角还画出一枝猩红色的栀子。 猩红的栀子开花时，枣树又要做小粉红花的梦，青葱地弯成弧形了……我又听到夜半的笑声；我赶紧砍断我的心绪，看那老在白纸罩上的小青虫，头大尾小，向日葵子似的，只有半粒小麦那么大，遍身的颜色苍翠得可爱，可怜。 我打一个呵欠，点起一支纸烟，喷出烟来，对着灯默默地敬奠这些苍翠精致的英雄们。 一九二四年九月十五日。</span><br><span class="line">&lt;/p&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line"></span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="练习"><a class="markdownIt-Anchor" href="#练习"></a> 练习</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 做完功能以后，发现在第一次切换图片时，会发现图片有一个非常快的闪烁，</span><br><span class="line"> * 这个闪烁会造成一次不佳的用户体验。</span><br><span class="line"> * 产生问题的原因：</span><br><span class="line"> * 背景图片是以外部资源的形式加载进网页的，浏览器每加载一个外部资源就需要单独的发送一次请求，</span><br><span class="line"> * 但是我们外部资源并不是同时加载，浏览器会在资源被使用才去加载资源</span><br><span class="line"> * 我们这个练习，一上来浏览器只会加载link.png由于hover和active的状态没有马上触发，</span><br><span class="line"> * 所以hover.png和active.png并不是立即加载的</span><br><span class="line"> * 当hover被触发时，浏览器才去加载hover.png</span><br><span class="line"> * 当active被触发时，浏览器才去加载active.png</span><br><span class="line"> * 由于加载图片需要一定的时间，所以在加载和显示过程会有一段时间，背景图片无法显示，导致出现闪烁的情况</span><br><span class="line"> * </span><br><span class="line"> * 为了解决该问题，可以将三个图片整合为一张图片，这样可以同时将三张图片一起加载，就不会出现闪烁的问题了，</span><br><span class="line"> * 然后在通过background-position来切换要显示的图片的位置，这种技术叫做图片整合技术（CSS-Sprite）</span><br><span class="line"> * 优点：</span><br><span class="line"> * 1 将多个图片整合为一张图片里，浏览器只需要发送一次请求，可以同时加载多个图片，</span><br><span class="line"> * 提高访问效率，提高了用户体验。</span><br><span class="line"> * 2 将多个图片整合为一张图片，减小了图片的总大小，提高请求的速度，增加了用户体验</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line">.btn:link&#123;</span><br><span class="line">/*将a转换为块元素*/</span><br><span class="line">display: block;</span><br><span class="line">/*设置宽高*/</span><br><span class="line">width: 93px;</span><br><span class="line">height: 29px;</span><br><span class="line">/*设置背景图片*/</span><br><span class="line">background-image: url(img/btn/btn2.png);</span><br><span class="line">/*设置背景图片不重复*/</span><br><span class="line">background-repeat: no-repeat;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.btn:hover&#123;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 当是hover状态时，希望图片可以向左移动</span><br><span class="line"> */</span><br><span class="line">background-position: -93px 0px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.btn:active&#123;</span><br><span class="line">/*</span><br><span class="line"> * 当是active状态时，希望图片再向左移动</span><br><span class="line"> */</span><br><span class="line">background-position: -186px 0px;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 创建一个超链接 --&gt;</span><br><span class="line">&lt;a class=&quot;btn&quot; href=&quot;#&quot;&gt;&lt;/a&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="雪碧图精灵图"><a class="markdownIt-Anchor" href="#雪碧图精灵图"></a> 雪碧图(精灵图)</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 129px;</span><br><span class="line">height: 45px;</span><br><span class="line">background-image:url(img/amazon-sprite_.png) ;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box2&#123;</span><br><span class="line">width: 42px;</span><br><span class="line">height: 30px;</span><br><span class="line">background-image:url(img/amazon-sprite_.png) ;</span><br><span class="line">/*</span><br><span class="line"> * 设置偏移量</span><br><span class="line"> */</span><br><span class="line">background-position: -58px -338px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="背景4"><a class="markdownIt-Anchor" href="#背景4"></a> 背景4</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">body&#123;</span><br><span class="line">height: 5000px;</span><br><span class="line">/*设置一个背景颜色*/</span><br><span class="line">/*background-color: #bfa;*/</span><br><span class="line">/*设置一个背景图片*/</span><br><span class="line">/*background-image: url(img/3.png);*/</span><br><span class="line">/*设置背景不重复*/</span><br><span class="line">/*background-repeat: no-repeat;*/</span><br><span class="line">/*设置背景图片的位置*/</span><br><span class="line">/*background-position: center center;*/</span><br><span class="line">/*设置背景图片不随滚动条滚动*/ </span><br><span class="line">/*background-attachment: fixed;*/</span><br><span class="line"></span><br><span class="line">background-color: #bfa;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * background</span><br><span class="line"> * - 通过该属性可以同时设置所有背景相关的样式</span><br><span class="line"> * - 没有顺序的要求，谁在前睡在后都行</span><br><span class="line"> * 也没有数量的要求，不写的样式就使用默认值</span><br><span class="line"> */</span><br><span class="line">background: #bfa url(img/3.png) center center no-repeat fixed;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="表格1"><a class="markdownIt-Anchor" href="#表格1"></a> 表格1</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">表格在日常生活中使用的非常的多，比如excel就是专门用来创建表格的工具，</span><br><span class="line">表格就是用来表示一些格式化的数据的，比如：课程表、银行对账单</span><br><span class="line">在网页中也可以来创建出不同的表格。</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">在HTML中，使用table标签来创建一个表格</span><br><span class="line">--&gt;</span><br><span class="line">&lt;table border=&quot;1&quot; width=&quot;40%&quot; align=&quot;center&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">在table标签中使用tr来表示表格中的一行，有几行就有几个tr</span><br><span class="line">--&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;!-- 在tr中需要使用td来创建一个单元格，有几个单元格就有几个td --&gt;</span><br><span class="line">&lt;td&gt;A1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;A2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;A3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;A4&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line"></span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;B1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;B2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;B3&lt;/td&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">rowspan用来设置纵向的合并单元格</span><br><span class="line">--&gt;</span><br><span class="line">&lt;td rowspan=&quot;2&quot;&gt;B4&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;C1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;C2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;C3&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;D1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;D2&lt;/td&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">colspan横向的合并单元格</span><br><span class="line">--&gt;</span><br><span class="line">&lt;td colspan=&quot;2&quot;&gt;D3&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line"></span><br><span class="line">&lt;/table&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="表格2"><a class="markdownIt-Anchor" href="#表格2"></a> 表格2</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置表格的宽度</span><br><span class="line"> */</span><br><span class="line">table&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">/*居中*/</span><br><span class="line">margin: 0 auto;</span><br><span class="line">/*边框*/</span><br><span class="line">/*border:1px solid black;*/</span><br><span class="line">/*</span><br><span class="line"> * table和td边框之间默认有一个距离</span><br><span class="line"> * 通过border-spacing属性可以设置这个距离</span><br><span class="line"> */</span><br><span class="line">/*border-spacing:0px ;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * border-collapse可以用来设置表格的边框合并</span><br><span class="line"> * 如果设置了边框合并，则border-spacing自动失效</span><br><span class="line"> */</span><br><span class="line">border-collapse: collapse;</span><br><span class="line">/*设置背景样式*/</span><br><span class="line">/*background-color: #bfa;*/</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置边框</span><br><span class="line"> */</span><br><span class="line">td , th&#123;</span><br><span class="line">border: 1px solid black;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 设置隔行变色</span><br><span class="line"> */</span><br><span class="line">tr:nth-child(even)&#123;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 鼠标移入到tr以后，改变颜色</span><br><span class="line"> */</span><br><span class="line">tr:hover&#123;</span><br><span class="line">background-color: #ff0;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!--</span><br><span class="line">table是一个块元素</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;table&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;!--</span><br><span class="line">可以使用th标签来表示表头中的内容，</span><br><span class="line">它的用法和td一样，不同的是它会有一些默认效果</span><br><span class="line">--&gt;</span><br><span class="line">&lt;th&gt;学号&lt;/th&gt;</span><br><span class="line">&lt;th&gt;姓名&lt;/th&gt;</span><br><span class="line">&lt;th&gt;性别&lt;/th&gt;</span><br><span class="line">&lt;th&gt;住址&lt;/th&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;孙悟空&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;花果山&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;猪八戒&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;高老庄&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;沙和尚&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;流沙河&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;4&lt;/td&gt;</span><br><span class="line">&lt;td&gt;唐僧&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;女儿国&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;孙悟空&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;花果山&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;猪八戒&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;高老庄&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;沙和尚&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;流沙河&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;4&lt;/td&gt;</span><br><span class="line">&lt;td&gt;唐僧&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;女儿国&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;孙悟空&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;花果山&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;猪八戒&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;高老庄&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;沙和尚&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;流沙河&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;4&lt;/td&gt;</span><br><span class="line">&lt;td&gt;唐僧&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;女儿国&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;孙悟空&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;花果山&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;猪八戒&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;高老庄&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;沙和尚&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;流沙河&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;4&lt;/td&gt;</span><br><span class="line">&lt;td&gt;唐僧&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;女儿国&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;孙悟空&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;花果山&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;猪八戒&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;高老庄&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;沙和尚&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;流沙河&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;4&lt;/td&gt;</span><br><span class="line">&lt;td&gt;唐僧&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;女儿国&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;1&lt;/td&gt;</span><br><span class="line">&lt;td&gt;孙悟空&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;花果山&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;2&lt;/td&gt;</span><br><span class="line">&lt;td&gt;猪八戒&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;高老庄&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;3&lt;/td&gt;</span><br><span class="line">&lt;td&gt;沙和尚&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;流沙河&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;4&lt;/td&gt;</span><br><span class="line">&lt;td&gt;唐僧&lt;/td&gt;</span><br><span class="line">&lt;td&gt;男&lt;/td&gt;</span><br><span class="line">&lt;td&gt;女儿国&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;/table&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="长表格"><a class="markdownIt-Anchor" href="#长表格"></a> 长表格</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;table&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">有一些情况下表格是非常的长的，</span><br><span class="line">这时就需要将表格分为三个部分，表头，表格的主体，表格底部</span><br><span class="line">在HTML中为我们提供了三个标签：</span><br><span class="line">thead 表头</span><br><span class="line">tbody 表格主体</span><br><span class="line">tfoot 表格底部</span><br><span class="line"></span><br><span class="line">这三个标签的作用，就来区分表格的不同的部分，他们都是table的子标签，</span><br><span class="line">都需要直接写到table中，tr需要写在这些标签当中</span><br><span class="line"></span><br><span class="line">thead中的内容，永远会显示在表格的头部</span><br><span class="line">tfoot中的内容，永远都会显示表格的底部</span><br><span class="line">tbody中的内容，永远都会显示表格的中间</span><br><span class="line"></span><br><span class="line">如果表格中没有写tbody，浏览器会自动在表格中添加tbody</span><br><span class="line">并且将所有的tr都放到tbody中，所以注意tr并不是table的子元素，而是tbody的子元素</span><br><span class="line">通过table &gt; tr 无法选中行 需要通过tbody &gt; tr</span><br><span class="line">--&gt;</span><br><span class="line">&lt;thead&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;th&gt;日期&lt;/th&gt;</span><br><span class="line">&lt;th&gt;收入&lt;/th&gt;</span><br><span class="line">&lt;th&gt;支出&lt;/th&gt;</span><br><span class="line">&lt;th&gt;合计&lt;/th&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;/thead&gt;</span><br><span class="line"></span><br><span class="line">&lt;tfoot&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;&lt;/td&gt;</span><br><span class="line">&lt;td&gt;&lt;/td&gt;</span><br><span class="line">&lt;td&gt;合计&lt;/td&gt;</span><br><span class="line">&lt;td&gt;100&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;/tfoot&gt;</span><br><span class="line"></span><br><span class="line">&lt;tbody&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;10.24&lt;/td&gt;</span><br><span class="line">&lt;td&gt;500&lt;/td&gt;</span><br><span class="line">&lt;td&gt;300&lt;/td&gt;</span><br><span class="line">&lt;td&gt;200&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;/tbody&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/table&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="表格的布局"><a class="markdownIt-Anchor" href="#表格的布局"></a> 表格的布局</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">以前表格更多的情况实际上是用来对页面进行布局的，但是这种方式早已被CSS所淘汰了</span><br><span class="line">表格的列数由td最多的那行决定</span><br><span class="line">表格是可以嵌套，可以在td中在放置一个表格</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;table border=&quot;1&quot; width=&quot;100%&quot;&gt;</span><br><span class="line">&lt;tr height=&quot;100px&quot;&gt;</span><br><span class="line">&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr height=&quot;400px&quot;&gt;</span><br><span class="line">&lt;td width=&quot;20%&quot;&gt;&lt;/td&gt;</span><br><span class="line">&lt;td width=&quot;80%&quot;&gt;</span><br><span class="line">&lt;table border=&quot;1&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr&gt;</span><br><span class="line">&lt;td&gt;&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;/table&gt;</span><br><span class="line">&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;tr height=&quot;100px&quot;&gt;</span><br><span class="line">&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;</span><br><span class="line">&lt;/tr&gt;</span><br><span class="line">&lt;/table&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="完善clearfix"><a class="markdownIt-Anchor" href="#完善clearfix"></a> 完善clearfix</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 300px;</span><br><span class="line">height: 300px;</span><br><span class="line">background-color: #bfa;</span><br><span class="line">&#125;</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-color: yellow;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 子元素和父元素相邻的垂直外边距会发生重叠，子元素的外边距会传递给父元素</span><br><span class="line"> * 使用空的table标签可以隔离父子元素的外边距，阻止外边距的重叠</span><br><span class="line"> */</span><br><span class="line">margin-top: 100px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">.box3&#123;</span><br><span class="line">border: 10px red solid;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.box4&#123;</span><br><span class="line">width: 100px;</span><br><span class="line">height: 100px;</span><br><span class="line">background-color: yellowgreen;</span><br><span class="line">float: left;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * 解决父子元素的外边距重叠</span><br><span class="line"> */</span><br><span class="line">/*.box1:before&#123;</span><br><span class="line">content: &quot;&quot;;*/</span><br><span class="line">/*</span><br><span class="line"> * display:table可以将一个元素设置为表格显示</span><br><span class="line"> */</span><br><span class="line">/*display: table;</span><br><span class="line">&#125;</span><br><span class="line">*/</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * 解决父元素高度塌陷</span><br><span class="line"> */</span><br><span class="line">/*.clearfix:after&#123;</span><br><span class="line">content: &quot;&quot;;</span><br><span class="line">display: block;</span><br><span class="line">clear: both;</span><br><span class="line">&#125;*/</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * 经过修改后的clearfix是一个多功能的</span><br><span class="line"> * 既可以解决高度塌陷，又可以确保父元素和子元素的垂直外边距不会重叠</span><br><span class="line"> */</span><br><span class="line">.clearfix:before,</span><br><span class="line">.clearfix:after&#123;</span><br><span class="line">content: &quot;&quot;;</span><br><span class="line">display: table;</span><br><span class="line">clear: both;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.clearfix&#123;</span><br><span class="line">zoom: 1;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box3 clearfix&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box4&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;div class=&quot;box1 clearfix&quot;&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="表单"><a class="markdownIt-Anchor" href="#表单"></a> 表单</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">表单的作用就是用来将用户信息提交给服务器的</span><br><span class="line">比如：百度的搜索框 注册 登录这些操作都需要填写表单</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">使用form标签创建一个表单</span><br><span class="line">form标签中必须指定一个action属性，该属性指向的是一个服务器的地址</span><br><span class="line">当我们提交表单时将会提交到action属性对应的地址</span><br><span class="line">--&gt;</span><br><span class="line">&lt;form action=&quot;target.html&quot;&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">使用form创建的仅仅是一个空白的表单，</span><br><span class="line">我们还需要向form中添加不同的表单项</span><br><span class="line">--&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">在表单中可以使用fieldset来为表单项进行分组，</span><br><span class="line">可以将表单项中的同一组放到一个fieldset中</span><br><span class="line">--&gt;</span><br><span class="line">&lt;fieldset&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 在fieldset可以使用legend子标签，来指定组名 --&gt;</span><br><span class="line">&lt;legend&gt;用户信息&lt;/legend&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">使用input来创建一个文本框，它的type属性是text</span><br><span class="line">如果希望表单项中的数据会提交到服务器中，还必须给表单项指定一个name属性</span><br><span class="line">name表示提交内容的名字</span><br><span class="line"></span><br><span class="line">用户填写的信息会附在url地址的后边以查询字符串的形式发送给服务器</span><br><span class="line">url地址?查询字符串</span><br><span class="line">格式：</span><br><span class="line">属性名=属性值&amp;属性名=属性值&amp;属性名=属性值&amp;属性名=属性值</span><br><span class="line">在文本框中也可以指定value属性值，该值将会作为文本框的默认值显示</span><br><span class="line">--&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">在html中还为我们提供了一个标签，专门用来选中表单中的提示文字的</span><br><span class="line">label标签</span><br><span class="line">该标签可以指定一个for属性，该属性的值需要指定一个表单项的id值</span><br><span class="line">--&gt;</span><br><span class="line">&lt;label for=&quot;um&quot;&gt;用户名&lt;/label&gt;</span><br><span class="line">&lt;input id=&quot;um&quot; type=&quot;text&quot; name=&quot;username&quot;  /&gt; &lt;br /&gt;&lt;br /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">密码框</span><br><span class="line">- 使用input创建一个密码框，它的type属性值是password</span><br><span class="line">--&gt;</span><br><span class="line">&lt;label for=&quot;pwd&quot;&gt;密码 &lt;/label&gt;</span><br><span class="line">&lt;input id=&quot;pwd&quot; type=&quot;password&quot; name=&quot;password&quot; /&gt; &lt;br /&gt;&lt;br /&gt;</span><br><span class="line">&lt;/fieldset&gt;</span><br><span class="line"></span><br><span class="line">&lt;fieldset &gt;</span><br><span class="line"></span><br><span class="line">&lt;legend&gt;用户爱好&lt;/legend&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">单选按钮</span><br><span class="line">- 使用input来创建一个单选按钮，它的type属性使用radio</span><br><span class="line">- 单选按钮通过name属性进行分组，name属性相同是一组按钮</span><br><span class="line">- 像这种需要用户选择但是不需要用户直接填写内容的表单项，</span><br><span class="line">还必须指定一个value属性，这样被选中的表单项的value属性值将会最终提交给服务器</span><br><span class="line"></span><br><span class="line">如果希望在单选按钮或者是多选框中指定默认选中的选项，</span><br><span class="line">则可以在希望选中的项中添加checked=&quot;checked&quot;属性</span><br><span class="line">--&gt;</span><br><span class="line">性别  &lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;male&quot; id=&quot;male&quot; /&gt;&lt;label for=&quot;male&quot;&gt;男&lt;/label&gt;</span><br><span class="line">&lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;female&quot; checked=&quot;checked&quot; id=&quot;female&quot; /&gt;&lt;label for=&quot;female&quot;&gt;女&lt;/label&gt; </span><br><span class="line">&lt;br /&gt;&lt;br /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">多选框</span><br><span class="line">- 使用input创建一个多选框，它的type属性使用checkbox</span><br><span class="line">--&gt;</span><br><span class="line">爱好 &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; value=&quot;zq&quot; /&gt;足球</span><br><span class="line">&lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; value=&quot;lq&quot; /&gt;篮球</span><br><span class="line">&lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; value=&quot;ymq&quot; checked=&quot;checked&quot; /&gt;羽毛球</span><br><span class="line">&lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; value=&quot;ppq&quot; checked=&quot;checked&quot;/&gt;乒乓球</span><br><span class="line">&lt;br /&gt;&lt;br /&gt;</span><br><span class="line"></span><br><span class="line">&lt;/fieldset&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">下拉列表</span><br><span class="line">- 使用select来创建一个下拉列表</span><br><span class="line">下拉列表的name属性需要指定给select，而value属性需要指定给option</span><br><span class="line">可以通过在option中添加selected=&quot;selected&quot;来将选项设置为默认选中</span><br><span class="line"></span><br><span class="line">当为select添加一个multiple=&quot;multiple&quot;，则下拉列表变为一个多选的下拉列表</span><br><span class="line">--&gt;</span><br><span class="line">你喜欢的明星 </span><br><span class="line">&lt;select name=&quot;star&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">在select中可以使用optgroup对选项进行分组</span><br><span class="line">同一个optgroup中的选项是一组</span><br><span class="line">可以通过label属性来指定分组的名字</span><br><span class="line">--&gt;</span><br><span class="line">&lt;optgroup label=&quot;女明星&quot;&gt;</span><br><span class="line">&lt;!-- 在下拉列表中使用option标签来创建一个一个列表项 --&gt;</span><br><span class="line">&lt;option value=&quot;fbb&quot;&gt;范冰冰&lt;/option&gt;</span><br><span class="line">&lt;option value=&quot;lxr&quot;&gt;林心如&lt;/option&gt;</span><br><span class="line">&lt;option value=&quot;zw&quot;&gt;赵薇&lt;/option&gt;</span><br><span class="line">&lt;/optgroup&gt;</span><br><span class="line"></span><br><span class="line">&lt;optgroup label=&quot;男明星&quot;&gt;</span><br><span class="line">&lt;option value=&quot;zbs&quot; selected=&quot;selected&quot;&gt;赵本山&lt;/option&gt;</span><br><span class="line">&lt;option value=&quot;ldh&quot;&gt;刘德华&lt;/option&gt;</span><br><span class="line">&lt;option value=&quot;pcj&quot;&gt;潘长江&lt;/option&gt;</span><br><span class="line">&lt;/optgroup&gt;</span><br><span class="line"></span><br><span class="line">&lt;/select&gt;</span><br><span class="line"></span><br><span class="line">&lt;br /&gt;&lt;br /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">使用textarea创建一个文本域</span><br><span class="line">--&gt;</span><br><span class="line">自我介绍  &lt;textarea name=&quot;info&quot;&gt;&lt;/textarea&gt;</span><br><span class="line"></span><br><span class="line">&lt;br /&gt;&lt;br /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">提交按钮可以将表单中的信息提交给服务器</span><br><span class="line">使用input创建一个提交按钮,它的type属性值是submit</span><br><span class="line">在提交按钮中可以通过value属性来指定按钮上的文字</span><br><span class="line">--&gt;</span><br><span class="line">&lt;input type=&quot;submit&quot; value=&quot;注册&quot; /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">&lt;input type=&quot;reset&quot; /&gt;可以创建一个重置按钮，</span><br><span class="line">点击重置按钮以后表单中内容将会恢复为默认值</span><br><span class="line">--&gt;</span><br><span class="line">&lt;input type=&quot;reset&quot; /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- </span><br><span class="line">使用input type=button可以用来创建一个单纯的按钮，</span><br><span class="line">这个按钮没有任何功能，只能被点击</span><br><span class="line">--&gt;</span><br><span class="line">&lt;input type=&quot;button&quot; value=&quot;按钮&quot; /&gt;</span><br><span class="line"></span><br><span class="line">&lt;!--</span><br><span class="line">除了使用input，也可以使用button标签来创建按钮</span><br><span class="line">这种方式和使用input类似，只不过由于它是成对出现的标签</span><br><span class="line">使用起来更加的灵活</span><br><span class="line">--&gt;</span><br><span class="line">&lt;br /&gt;&lt;br /&gt;</span><br><span class="line">&lt;button type=&quot;submit&quot;&gt;提交&lt;/button&gt;</span><br><span class="line">&lt;button type=&quot;reset&quot;&gt;重置&lt;/button&gt;</span><br><span class="line">&lt;button type=&quot;button&quot;&gt;按钮&lt;/button&gt;</span><br><span class="line"></span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="框架集"><a class="markdownIt-Anchor" href="#框架集"></a> 框架集</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">框架集和内联框架的作用类似，都是用于在一个页面中引入其他的外部的页面，</span><br><span class="line">框架集可以同时引入多个页面，而内联框架只能引入一个，</span><br><span class="line">在h5标准中，推荐使用框架集，而不使用内联框架</span><br><span class="line"></span><br><span class="line">使用frameset来创建一个框架集，注意frameset不能和body出现在同一个页面中</span><br><span class="line">所以要使用框架集，页面中就不可以使用body标签</span><br><span class="line"></span><br><span class="line">属性：</span><br><span class="line">rows，指定框架集中的所有的框架，一行一行的排列</span><br><span class="line">cols， 指定框架集中的所有的页面，一列一列的排列</span><br><span class="line"></span><br><span class="line">这两个属性frameset必须选择一个，并且需要在属性中指定每一部分所占的大小</span><br><span class="line"></span><br><span class="line">frameset中也可以再嵌套frameset</span><br><span class="line"></span><br><span class="line">frameset和iframe一样，它里边的内容都不会被搜索引擎所检索，</span><br><span class="line">所以如果搜索引擎检索到的页面是一个框架页的话，它是不能去判断里边的内容的</span><br><span class="line">使用框架集则意味着页面中不能有自己的内容，只能引入其他的页面，而我们每单独加载一个页面</span><br><span class="line">浏览器都需要重新发送一次请求，引入几个页面就需要发送几次请求，用户的体验比较差</span><br><span class="line">如果非得用建议使用frameset而不使用iframe</span><br><span class="line"></span><br><span class="line">--&gt;</span><br><span class="line">&lt;frameset cols=&quot;30% , * , 30%&quot;&gt;</span><br><span class="line">&lt;!-- 在frameset中使用frame子标签来指定要引入的页面 </span><br><span class="line">引入几个页面就写几个frame</span><br><span class="line">--&gt;</span><br><span class="line">&lt;frame src=&quot;01.表格.html&quot; /&gt;</span><br><span class="line">&lt;frame src=&quot;02.表格.html&quot; /&gt;</span><br><span class="line">&lt;!-- 嵌套一个frameset --&gt;</span><br><span class="line">&lt;frameset rows=&quot;30%,50%,*&quot;&gt;</span><br><span class="line">&lt;frame src=&quot;04.表格的布局.html&quot; /&gt;</span><br><span class="line">&lt;frame src=&quot;05.完善clearfix.html&quot; /&gt;</span><br><span class="line">&lt;frame src=&quot;06.表单.html&quot; /&gt;</span><br><span class="line">&lt;/frameset&gt;</span><br><span class="line">&lt;/frameset&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="图片"><a class="markdownIt-Anchor" href="#图片"></a> 图片</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;UTF-8&quot;&gt;</span><br><span class="line">&lt;title&gt;&lt;/title&gt;</span><br><span class="line">&lt;style type=&quot;text/css&quot;&gt;</span><br><span class="line"></span><br><span class="line">.box1&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-image: url(img/3.png);</span><br><span class="line">background-repeat: no-repeat;</span><br><span class="line">&#125;</span><br><span class="line">.box2&#123;</span><br><span class="line">width: 200px;</span><br><span class="line">height: 200px;</span><br><span class="line">background-image: url(img/4.png);</span><br><span class="line">background-repeat: no-repeat;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body style=&quot;background-color: #bfa;&quot;&gt;</span><br><span class="line">&lt;!-- </span><br><span class="line">在IE6中对图片格式png24支持度不高，</span><br><span class="line">如果使用的图片格式是png24，则会导致透明效果无法正常显示</span><br><span class="line">解决方法：</span><br><span class="line">1.可以使用png8来代替png24，即可解决问题，</span><br><span class="line">但是使用png8代替png24以后，图片的清晰图会有所下降</span><br><span class="line"></span><br><span class="line">2.使用JavaScript来解决该问题，需要向页面中引入一个外部的JavaScript文件</span><br><span class="line">然后在写一下简单的JS代码，来处理该问题</span><br><span class="line"></span><br><span class="line">--&gt;</span><br><span class="line">&lt;div class=&quot;box1&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;div class=&quot;box2&quot;&gt;&lt;/div&gt;</span><br><span class="line">&lt;img src=&quot;img/3.png&quot;/&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 在body标签的最后引入外部的JS文件 --&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot; src=&quot;js/DD_belatedPNG_0.0.8a-min.js&quot;&gt;&lt;/script&gt;</span><br><span class="line">&lt;!--再创建一个新的script标签，并且编写一些js代码 --&gt;</span><br><span class="line">&lt;script type=&quot;text/javascript&quot;&gt;</span><br><span class="line">DD_belatedPNG.fix(&quot;*&quot;);</span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="条件hack"><a class="markdownIt-Anchor" href="#条件hack"></a> 条件Hack</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">&lt;!--[if &lt;keywords&gt;? IE &lt;version&gt;?]&gt;</span><br><span class="line">HTML代码块</span><br><span class="line">&lt;![endif]--&gt;</span><br><span class="line"></span><br><span class="line">&lt;keywords&gt; </span><br><span class="line">if条件共包含6种选择方式：是否、大于、大于或等于、小于、小于或等于、非指定版本</span><br><span class="line"></span><br><span class="line">是否： 指定是否IE或IE某个版本。关键字：空 </span><br><span class="line">大于： 选择大于指定版本的IE版本。关键字：gt（greater than） </span><br><span class="line">大于或等于： 选择大于或等于指定版本的IE版本。关键字：gte（greater than or equal） </span><br><span class="line">小于： 选择小于指定版本的IE版本。关键字：lt（less than） </span><br><span class="line">小于或等于： 选择小于或等于指定版本的IE版本。关键字：lte（less than or equal） </span><br><span class="line">非指定版本： 选择除指定版本外的所有IE版本。关键字：!</span><br><span class="line"></span><br><span class="line">&lt;version&gt; </span><br><span class="line">目前的常用IE版本为6.0及以上，推荐酌情忽略低版本，把精力花在为使用高级浏览器的用户提供更好的体验上</span><br><span class="line"></span><br><span class="line">IE10及以上版本已将条件注释特性移除，使用时需注意。</span><br></pre></td></tr></table></figure><h5 id="是否示例代码"><a class="markdownIt-Anchor" href="#是否示例代码"></a> 是否，示例代码：</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;!--[if IE]&gt;</span><br><span class="line">&lt;style&gt;</span><br><span class="line">.test&#123;color:red;&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;![endif]--&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="属性级hack"><a class="markdownIt-Anchor" href="#属性级hack"></a> 属性级Hack</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">selector&#123;&lt;hack&gt;?property:value&lt;hack&gt;?;&#125;</span><br><span class="line"></span><br><span class="line">_： 选择IE6及以下。连接线（中划线）（-）亦可使用，为了避免与某些带中划线的属性混淆，所以使用下划线（_）更为合适。</span><br><span class="line">*： 选择IE7及以下。诸如：（+）与（#）之类的均可使用，不过业界对（*）的认知度更高 </span><br><span class="line">\9： 选择IE6+ </span><br><span class="line">\0： 选择IE8+和Opera15以下的浏览器 </span><br><span class="line"></span><br><span class="line">选择不同的浏览器及版本 </span><br><span class="line">尽可能减少对CSS Hack的使用。Hack有风险，使用需谨慎 </span><br><span class="line">通常如未作特别说明，本文档所有的代码和示例的默认运行环境都为标准模式。 </span><br><span class="line">一些CSS Hack由于浏览器存在交叉认识，所以需要通过层层覆盖的方式来实现对不同浏览器进行Hack的。如下面这个例子：</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE html&gt;</span><br><span class="line">&lt;html lang=&quot;zh-cmn-Hans&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">&lt;meta charset=&quot;utf-8&quot; /&gt;</span><br><span class="line">&lt;title&gt;属性级Hack_CSS参考手册_web前端开发参考手册系列&lt;/title&gt;</span><br><span class="line">&lt;meta name=&quot;author&quot; content=&quot;Joy Du(飘零雾雨), dooyoe@gmail.com, www.doyoe.com&quot; /&gt;</span><br><span class="line">&lt;style&gt;</span><br><span class="line">h1 &#123;</span><br><span class="line">margin: 10px 0;</span><br><span class="line">font-size: 16px;</span><br><span class="line">&#125;</span><br><span class="line">.test &#123;</span><br><span class="line">color: #c30;          /* For latest Firefox, chrome, Safari */</span><br><span class="line">color: #090\0;        /* For Opera15- */</span><br><span class="line">color: #00f\9;        /* For IE8+ */</span><br><span class="line">*color: #f00;         /* For IE7 */</span><br><span class="line">_color: #ff0;         /* For IE6 */</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div class=&quot;test&quot;&gt;在不同浏览器下看看我的颜色吧&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="选择符级hack"><a class="markdownIt-Anchor" href="#选择符级hack"></a> 选择符级Hack</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">* html .test &#123; color: #090; &#125;       /* For IE6 and earlier */  ie6和ie6之前的浏览器可以见</span><br><span class="line">* + html .test &#123; color: #ff0; &#125;     /* For IE7 */  ie8的浏览器可以见</span><br><span class="line">.test:lang(zh-cmn-Hans) &#123; color: #f00; &#125;  /* For IE8+ and not IE */ ie8及以上和其他的浏览器可以见,</span><br><span class="line">.test:nth-child(1) &#123; color: #0ff; &#125; /* For IE9+ and not IE */ ie9及以上和其他的浏览器可以见,</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;子元素选择器&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#子元素选择器&quot;&gt;&lt;/a&gt; 子元素选择器&lt;/h3&gt;
&lt;figure class=&quot;highlight html&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;p
      
    
    </summary>
    
      <category term="HTML/CSS" scheme="https://xiaowuyoucy.github.io/categories/HTML-CSS/"/>
    
    
  </entry>
  
  <entry>
    <title>Win32基础</title>
    <link href="https://xiaowuyoucy.github.io/2024/01/07/Win32%E5%9F%BA%E7%A1%80/"/>
    <id>https://xiaowuyoucy.github.io/2024/01/07/Win32基础/</id>
    <published>2024-01-07T14:28:41.000Z</published>
    <updated>2024-03-03T12:07:20.013Z</updated>
    
    <content type="html"><![CDATA[<h1 id="字符编码"><a class="markdownIt-Anchor" href="#字符编码"></a> 字符编码</h1><h3 id="标准的ascii码"><a class="markdownIt-Anchor" href="#标准的ascii码"></a> 标准的ASCII码</h3><p>范围是0-127</p><p><img src="/images/javawz/image-20240109230417590.png" alt="image-20240109230417590"></p><h3 id="ascii码的拓展"><a class="markdownIt-Anchor" href="#ascii码的拓展"></a> ASCII码的拓展</h3><p>范围是128-255</p><p><img src="/images/javawz/image-20240109230502264.png" alt="image-20240109230502264"></p><h3 id="gb2312或gb2312-80"><a class="markdownIt-Anchor" href="#gb2312或gb2312-80"></a> GB2312或GB2312-80</h3><p>这两个编码是由两张ASCII码的拓展的编码组成</p><p>也就是说两个字节表示一个中文</p><p>字节1的范围是 128-255</p><p>字节2的范围是 128-255</p><h3 id="unicode编码"><a class="markdownIt-Anchor" href="#unicode编码"></a> UNICODE编码</h3><p>UNICODE编码包含全世界所有文字的一个编码表</p><p>Unicode编码范围是：0-0x10FFFF，可以容纳100多万个符号!</p><p>Unicode只是一个符号集，它只规定了符号的二进制代码，却没有规定这个二进制代码应该如何存储。</p><h3 id="如何存储unicode"><a class="markdownIt-Anchor" href="#如何存储unicode"></a> 如何存储UNICODE</h3><h4 id="utf-16"><a class="markdownIt-Anchor" href="#utf-16"></a> UTF-16</h4><p>​UTF-16编码以16位无符号整数为单位，注意是16位为一个单位，不表示一个字符就只有16位。这个要看字符的unicode编码处于什么范围而定，有可能是2个字节，也可能是4个字节现在机器上的unicode编码一般指的就是UTF-16</p><p>意思是utf-16是以两个字节来划分字符编码的,假如一个字符需要4个字节来表示,UTF-16形式存储会将4字节中的前两个字节编码和后两个字节编码分别存放.</p><h4 id="utf-8"><a class="markdownIt-Anchor" href="#utf-8"></a> UTF-8：</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Unicode编码(16进制)　║　UTF-8 字节流(二进制) 　</span><br><span class="line">000000 - 00007F　║　0xxxxxxx 　　</span><br><span class="line">000080 - 0007FF　║　110xxxxx 10xxxxxx 　　</span><br><span class="line">000800 - 00FFFF　║　1110xxxx 10xxxxxx 10xxxxxx 　　</span><br><span class="line">010000 - 10FFFF　║　11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</span><br></pre></td></tr></table></figure><p>000000 - 00007F　范围用1个字节存放</p><p>000080 - 0007FF   范围用2个字节存放</p><p>000800 - 00FFFF范围用3个字节存放</p><p>010000 - 10FFFF　范围用4个字节存放</p><h4 id="bombyte-order-mark"><a class="markdownIt-Anchor" href="#bombyte-order-mark"></a> BOM(Byte Order Mark)：</h4><p>UTF-8 编码存放的文件十六进制开头是EF BB BF</p><p>UTF-16LE  UTF-16小端存放开头是　FF FE 　　<br>UTF-16BE  UTF-16大端存放开头　FE FF</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">UTF-8　    ║　EF BB BF 　　</span><br><span class="line">UTF-16LE  ║　FF FE 　　</span><br><span class="line">UTF-16BE  ║　FE FF</span><br></pre></td></tr></table></figure><h1 id="c语言中的宽字符"><a class="markdownIt-Anchor" href="#c语言中的宽字符"></a> C语言中的宽字符</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">char szStr[] = &quot;中国&quot;;</span><br><span class="line"></span><br><span class="line">wchar_t swzStr[] = L&quot;中国&quot;;</span><br></pre></td></tr></table></figure><p>如果字符串前面不加L,默认是以IDE项目设置的字符集形式，可能是ASCII码</p><p>字符串前面加上L，表示用UNICODE字符集存放</p><p>wchar_t是宽字符类型，两个字节</p><h3 id="打印宽字符"><a class="markdownIt-Anchor" href="#打印宽字符"></a> 打印宽字符</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;locale.h&gt;//要包含这个头文件</span><br><span class="line"></span><br><span class="line">setlocale(LC_ALL,&quot;&quot;);//使用控制台默认的编码</span><br><span class="line"></span><br><span class="line">wchar_t swzStr[] = L“中国”;</span><br><span class="line"></span><br><span class="line">wprintf(L&quot;%s\n&quot;,x1);</span><br></pre></td></tr></table></figure><h3 id="字符串长度"><a class="markdownIt-Anchor" href="#字符串长度"></a> 字符串长度</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">char szStr[] = &quot;中国&quot;;</span><br><span class="line">wchar_t swzStr[] = L&quot;中国&quot;;</span><br><span class="line">strlen(szStr);//取得多字节字符串中字符长度，不包含 00</span><br><span class="line">wcslen(swzStr);//取得多字节字符串中字符长度，不包含 00 00</span><br></pre></td></tr></table></figure><h3 id="常用函数"><a class="markdownIt-Anchor" href="#常用函数"></a> 常用函数</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">charwchar_t//多字节字符类型   宽字符类型</span><br><span class="line">printfwprintf//打印到控制台函数</span><br><span class="line">strlenwcslen//获取长度</span><br><span class="line"></span><br><span class="line">strcpywcscpy//字符串复制</span><br><span class="line"></span><br><span class="line">strcatwcscat//字符串拼接</span><br><span class="line"></span><br><span class="line">strcmpwcscmp//字符串比较</span><br><span class="line"></span><br><span class="line">strstrwcsstr//字符串查找</span><br></pre></td></tr></table></figure><h1 id="win32-api中的宽字符"><a class="markdownIt-Anchor" href="#win32-api中的宽字符"></a> Win32  API中的宽字符</h1><h3 id="什么是win32-api-有哪些-在哪里"><a class="markdownIt-Anchor" href="#什么是win32-api-有哪些-在哪里"></a> 什么是Win32 API? 有哪些? 在哪里?</h3><p>主要是存放在 C:\WINDOWS\system32 下面所有的dll</p><p>如果是64位系统，system32存放的是64位的DLL，SysWOW64存放的是32位的DLL</p><p>几个重要的DLL：</p><p>&lt;1&gt; Kernel32.dll：最核心的功能模块，比如管理内存、进程和线程相关的函数等。</p><p>&lt;2&gt; User32.dll：是Windows用户界面相关应用程序接口,如创建窗口和发送消息等。</p><p>&lt;3&gt; GDI32.dll：全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数。</p><h3 id="常用数据类型"><a class="markdownIt-Anchor" href="#常用数据类型"></a> 常用数据类型：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">汇编：</span><br><span class="line">byte BYTEPBYTE</span><br><span class="line">wordWORDPWORD</span><br><span class="line">dwordDWORDPDWORD</span><br><span class="line"></span><br><span class="line">C语言：</span><br><span class="line">charCHARPCHAR</span><br><span class="line">unsigned charUCHARPUCHAR</span><br><span class="line">shortSHORTPSHORT</span><br><span class="line">unsigned shortUSHORTPUSHORT</span><br><span class="line">intINTPINT</span><br><span class="line">unsigned intUINTPUINT  </span><br><span class="line"></span><br><span class="line">C++语言：</span><br><span class="line">boolBOOL</span><br></pre></td></tr></table></figure><h3 id="在win32中使用字符串"><a class="markdownIt-Anchor" href="#在win32中使用字符串"></a> 在Win32中使用字符串：</h3><h4 id="字符类型"><a class="markdownIt-Anchor" href="#字符类型"></a> 字符类型：</h4><p>最好使用TCHAR类型,因为TCHAR类型会根据IDE设置的字符集来选择用哪个类型，如果IDE使用的是ASCII字符集,选择的就是CHAR类型，否则选择的是WCHAR类型。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">CHAR  szStr[] = “中国”;</span><br><span class="line">WCHAR  swzStr[] = L“中国”;</span><br><span class="line">TCHAR stzSr[] = TEXT(“中国”);</span><br></pre></td></tr></table></figure><p>TEXT(“中国”)，会自动将字符串转换为当前IDE设置的字符集</p><h4 id="字符串指针"><a class="markdownIt-Anchor" href="#字符串指针"></a> 字符串指针：</h4><p>PTSTR也是会根据IDE设置的字符集来选择什么类型的字符串指针</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">PSTR  pszStr = “中国”;</span><br><span class="line">PWSTR pwszStr = L“中国”;</span><br><span class="line">PTSTR ptszStr = TEXT(“中国”);</span><br></pre></td></tr></table></figure><h3 id="第一个win32-api的使用"><a class="markdownIt-Anchor" href="#第一个win32-api的使用"></a> 第一个Win32 API的使用：</h3><p>写Win32程序要包含windows.h头文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">CHAR szTitle[] = &quot;标题&quot;;</span><br><span class="line">CHAR szContent[] = &quot;欢迎大家来的Win32 API世界!&quot;;</span><br><span class="line">MessageBoxA(0,szContent,szTitle,MB_OK);</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">WCHAR swzTitle[] = L&quot;标题&quot;;</span><br><span class="line">WCHAR swzContent[] = L&quot;欢迎大家来的Win32 API世界!&quot;;</span><br><span class="line">MessageBoxW(0,swzContent,swzTitle,MB_OK);</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">TCHAR stzTitle[] = TEXT(&quot;标题&quot;);</span><br><span class="line">TCHAR stzContent[] = TEXT(&quot;欢迎大家来的Win32 API世界!&quot;);</span><br><span class="line">MessageBox(0,stzContent,stzTitle,MB_OK);</span><br></pre></td></tr></table></figure><p>MessageBox 会根据平台使用的字符集来选择调用MessageBoxA还是MessageBoxW，其实MessageBoxA内部也是调用MessageBoxW的，只不过会将字符串参数转换为Unicode编码，然后再调用</p><h1 id="进程"><a class="markdownIt-Anchor" href="#进程"></a> 进程</h1><h3 id="什么是进程"><a class="markdownIt-Anchor" href="#什么是进程"></a> 什么是进程</h3><p>进程提供程序所需的资源，如：数据、代码等等。</p><h3 id="进程内存空间的地址划分"><a class="markdownIt-Anchor" href="#进程内存空间的地址划分"></a> 进程内存空间的地址划分</h3><table><thead><tr><th><strong>分区</strong></th><th><strong>x86 32位Windows</strong></th></tr></thead><tbody><tr><td>空指针赋值区</td><td>0x00000000 - 0x0000FFFF</td></tr><tr><td>用户模式区</td><td>0x00010000 - 0x7FFEFFFF</td></tr><tr><td>64KB禁入区</td><td>0x7FFF0000 - 0x7FFFFFFF</td></tr><tr><td>内核</td><td>0x80000000 - 0xFFFFFFFF</td></tr></tbody></table><h3 id="进程的组成部分模块"><a class="markdownIt-Anchor" href="#进程的组成部分模块"></a> 进程的组成部分：模块</h3><p>在OD中查看进程所包含的模块。</p><p>每个模块都是一个可执行文件，遵守相同的格式，即PE结构。</p><h3 id="进程的创建"><a class="markdownIt-Anchor" href="#进程的创建"></a> 进程的创建：</h3><p>任何进程都是别的进程创建的：CreateProcess()</p><p>进程的创建过程<br>1、映射EXE文件<br>2、创建内核对象EPROCESS<br>3、映射系统DLL(ntdll.dll)<br>4、创建线程内核对象ETHREAD<br>5、系统启动线程<br>映射DLL(ntdll.LdrInitializeThunk)<br>线程开始执行</p><p><img src="/images/javawz/image-20240110222553959.png" alt="image-20240110222553959"></p><p><img src="/images/javawz/image-20240110222608956.png" alt="image-20240110222608956"></p><p><img src="/images/javawz/image-20240110222631845.png" alt="image-20240110222631845"></p><p><img src="/images/javawz/image-20240110222817938.png" alt="image-20240110222817938"></p><h3 id="创建进程"><a class="markdownIt-Anchor" href="#创建进程"></a> 创建进程</h3><h4 id="createprocess"><a class="markdownIt-Anchor" href="#createprocess"></a> CreateProcess</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">BOOL CreateProcess(</span><br><span class="line">  LPCTSTR               lpApplicationName,        // 应用程序的可执行文件名或路径</span><br><span class="line">  LPTSTR                lpCommandLine,            // 命令行参数</span><br><span class="line">  LPSECURITY_ATTRIBUTES lpProcessAttributes,      // 进程对象的安全属性</span><br><span class="line">  LPSECURITY_ATTRIBUTES lpThreadAttributes,       // 主线程对象的安全属性</span><br><span class="line">  BOOL                  bInheritHandles,          // 指定新进程是否可以继承当前进程的句柄</span><br><span class="line">  DWORD                 dwCreationFlags,          // 控制进程的创建标志</span><br><span class="line">  LPVOID                lpEnvironment,            // 指向新进程的环境块的指针</span><br><span class="line">  LPCTSTR               lpCurrentDirectory,       // 指定新进程的当前工作目录</span><br><span class="line">  LPSTARTUPINFO         lpStartupInfo,            // 指定主窗口的外观及默认的I/O属性</span><br><span class="line">  LPPROCESS_INFORMATION lpProcessInformation      // 接收新进程和其主线程的信息</span><br><span class="line">);</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;windows.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;tchar.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> _tmain(<span class="keyword">int</span> argc, _TCHAR* argv[])</span><br><span class="line">&#123;</span><br><span class="line">    <span class="comment">// 指定要执行的命令</span></span><br><span class="line">    LPCTSTR command = _T(<span class="string">"C:\\路径\\到\\你的\\可执行文件.exe"</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 创建进程信息结构</span></span><br><span class="line">    PROCESS_INFORMATION processInfo;</span><br><span class="line">    ZeroMemory(&amp;processInfo, <span class="keyword">sizeof</span>(PROCESS_INFORMATION));</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 创建启动信息结构</span></span><br><span class="line">    STARTUPINFO startupInfo;</span><br><span class="line">    ZeroMemory(&amp;startupInfo, <span class="keyword">sizeof</span>(STARTUPINFO));</span><br><span class="line">    startupInfo.cb = <span class="keyword">sizeof</span>(STARTUPINFO);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 创建进程</span></span><br><span class="line">    <span class="keyword">if</span> (CreateProcess(</span><br><span class="line">        <span class="literal">NULL</span>,               <span class="comment">// 没有模块名（使用命令行）</span></span><br><span class="line">        command,            <span class="comment">// 命令行</span></span><br><span class="line">        <span class="literal">NULL</span>,               <span class="comment">// 进程句柄不可继承</span></span><br><span class="line">        <span class="literal">NULL</span>,               <span class="comment">// 线程句柄不可继承</span></span><br><span class="line">        FALSE,              <span class="comment">// 不继承句柄</span></span><br><span class="line">        <span class="number">0</span>,                  <span class="comment">// 无特殊标志</span></span><br><span class="line">        <span class="literal">NULL</span>,               <span class="comment">// 使用父进程环境</span></span><br><span class="line">        <span class="literal">NULL</span>,               <span class="comment">// 使用父进程目录</span></span><br><span class="line">        &amp;startupInfo,       <span class="comment">// 启动信息结构</span></span><br><span class="line">        &amp;processInfo        <span class="comment">// 进程信息结构</span></span><br><span class="line">    ))</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">// 等待子进程退出</span></span><br><span class="line">        WaitForSingleObject(processInfo.hProcess, INFINITE);</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 关闭进程和线程句柄</span></span><br><span class="line">        CloseHandle(processInfo.hProcess);</span><br><span class="line">        CloseHandle(processInfo.hThread);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        _tprintf(_T(<span class="string">"无法创建进程，错误码：%d\n"</span>), GetLastError());</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="startupinfo"><a class="markdownIt-Anchor" href="#startupinfo"></a> STARTUPINFO</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">typedef struct _STARTUPINFO &#123;</span><br><span class="line">  DWORD  cb;                            // 结构体的大小，用于指定结构体版本</span><br><span class="line">  LPTSTR lpReserved;                    // 保留，必须为NULL</span><br><span class="line">  LPTSTR lpDesktop;                     // 指定新进程的桌面，通常为NULL</span><br><span class="line">  LPTSTR lpTitle;                       // 指定新进程的控制台窗口标题，通常为NULL</span><br><span class="line">  DWORD  dwX;                           // 指定新进程窗口的初始X坐标</span><br><span class="line">  DWORD  dwY;                           // 指定新进程窗口的初始Y坐标</span><br><span class="line">  DWORD  dwXSize;                       // 指定新进程窗口的初始宽度</span><br><span class="line">  DWORD  dwYSize;                       // 指定新进程窗口的初始高度</span><br><span class="line">  DWORD  dwXCountChars;                 // 指定新进程窗口的初始宽度（字符单位）</span><br><span class="line">  DWORD  dwYCountChars;                 // 指定新进程窗口的初始高度（字符单位）</span><br><span class="line">  DWORD  dwFillAttribute;               // 控制新进程窗口的文本和背景颜色</span><br><span class="line">  DWORD  dwFlags;                       // STARTF_* 标志位，用于指定 STARTUPINFO 结构体的标志</span><br><span class="line">  WORD   wShowWindow;                   // 指定新进程窗口的显示状态</span><br><span class="line">  WORD   cbReserved2;                   // 保留，必须为0</span><br><span class="line">  LPBYTE lpReserved2;                   // 保留，必须为NULL</span><br><span class="line">  HANDLE hStdInput;                     // 指定新进程的标准输入句柄</span><br><span class="line">  HANDLE hStdOutput;                    // 指定新进程的标准输出句柄</span><br><span class="line">  HANDLE hStdError;                     // 指定新进程的标准错误句柄</span><br><span class="line">&#125; STARTUPINFO, *LPSTARTUPINFO;</span><br></pre></td></tr></table></figure><h4 id="process_information"><a class="markdownIt-Anchor" href="#process_information"></a> PROCESS_INFORMATION</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">typedef struct _PROCESS_INFORMATION &#123;</span><br><span class="line">  HANDLE hProcess;           // 新进程的句柄，用于操作新进程</span><br><span class="line">  HANDLE hThread;            // 新进程的主线程的句柄，用于操作新进程的主线程</span><br><span class="line">  DWORD  dwProcessId;        // 新进程的进程标识符</span><br><span class="line">  DWORD  dwThreadId;         // 新进程的主线程标识符</span><br><span class="line">&#125; PROCESS_INFORMATION, *LPPROCESS_INFORMATION;</span><br></pre></td></tr></table></figure><h4 id="getlasterror"><a class="markdownIt-Anchor" href="#getlasterror"></a> GetLastError</h4><ul><li><code>GetLastError</code> 函数返回一个 <code>DWORD</code> 类型的错误代码，表示最近一次发生的错误。</li></ul><p>通常，当一个 Windows API 函数调用失败时，可以使用 <code>GetLastError</code> 函数获取详细的错误信息。错误代码可以通过查阅 Windows API 文档或使用 <code>FormatMessage</code> 函数转换为可读的错误消息。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DWORD GetLastError(void);</span><br></pre></td></tr></table></figure><h4 id="zeromemory"><a class="markdownIt-Anchor" href="#zeromemory"></a> ZeroMemory</h4><p><code>ZeroMemory</code> 不是一个单独的函数，而是一个宏（macro），通常用于将内存区域的内容全部设置为零。以下是 <code>ZeroMemory</code> 宏的定义和简要中文注释：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">#define ZeroMemory(Destination, Length) memset((Destination), 0, (Length))</span><br></pre></td></tr></table></figure><ul><li><code>ZeroMemory</code> 宏使用 <code>memset</code> 函数将目标内存区域的内容全部设置为零。</li><li><code>Destination</code>：指向要清零的内存区域的指针。</li><li><code>Length</code>：要清零的内存区域的字节数。</li></ul><p>这个宏的作用等同于使用 <code>memset</code> 函数将内存清零，但它是一种简化的写法。在实际使用中，可以选择使用 <code>memset</code> 函数或 <code>ZeroMemory</code> 宏，两者的效果是相同的。</p><h4 id="getstartupinfo"><a class="markdownIt-Anchor" href="#getstartupinfo"></a> GetStartupInfo</h4><p><code>GetStartupInfo</code> 是一个用于获取当前进程的 <code>STARTUPINFO</code> 结构体信息的 Windows API 函数。以下是该函数的原型和简要中文注释：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">void GetStartupInfo(</span><br><span class="line">  LPSTARTUPINFO lpStartupInfo  // 指向 STARTUPINFO 结构体的指针，用于接收当前进程的启动信息</span><br><span class="line">);</span><br></pre></td></tr></table></figure><p>调试器填写的STARTUPINFO 成员和系统打开进程填写的成员,内容是不一样的</p><h4 id="closehandle"><a class="markdownIt-Anchor" href="#closehandle"></a> CloseHandle</h4><p><code>CloseHandle</code> 是一个 Windows API 函数，用于关闭一个打开的内核对象的句柄。以下是该函数的原型和简要中文注释：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">BOOL CloseHandle(</span><br><span class="line">  HANDLE hObject  // 要关闭的内核对象的句柄</span><br><span class="line">);</span><br></pre></td></tr></table></figure><br><br><br><br><br><h3 id="句柄表"><a class="markdownIt-Anchor" href="#句柄表"></a> 句柄表</h3><p>进程内核对象下有个句柄表,句柄表存放了句柄编号,当前内核对象是否允许被继承和内核对象的地址,我们用的就是句柄编号,通过句柄编号来使用对应的内核对象.</p><p>句柄表是自己进程私有的</p><p><img src="/images/javawz/image-20240226002642858.png" alt="image-20240226002642858"></p><p>多个进程可以共享同一个内核对象</p><p><img src="/images/javawz/image-20240226003220206.png" alt="image-20240226003220206"></p><p>刚创建一个内核对象,默认计数器是1,如果再次打开同一个内核对象,计数器就是加1,也就是2</p><p>只有计数器是0的时候,该内核对象才真正被释放</p><p>关闭线程内核对象,必须关闭该线程,才能关闭线程内核对象.</p><p>句柄表有一列包含了当前内核对象是否可以被继承</p><p>如何使当前对象可以被继承?</p><p>需要用到SECURITY_ATTRIBUTES 结构体成员</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">typedef struct _SECURITY_ATTRIBUTES &#123; // sa  </span><br><span class="line"></span><br><span class="line">    DWORD  nLength; </span><br><span class="line"></span><br><span class="line">    LPVOID lpSecurityDescriptor; </span><br><span class="line"></span><br><span class="line">    BOOL   bInheritHandle; //当前内核对象是否可以被继承,true代表可以</span><br><span class="line"></span><br><span class="line">&#125; SECURITY_ATTRIBUTES;</span><br></pre></td></tr></table></figure><p>例如CreateEvent函数参数中就有LPSECURITY_ATTRIBUTES,这里代表传入一个SECURITY_ATTRIBUTES结构体,代表当前创建出来的内核对象可以被继承.</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="function">HANDLE <span class="title">CreateEvent</span><span class="params">(</span></span></span><br><span class="line"><span class="function"><span class="params"></span></span></span><br><span class="line"><span class="function"><span class="params">LPSECURITY_ATTRIBUTES lpEventAttributes,</span></span></span><br><span class="line"><span class="function"><span class="params"> <span class="comment">// pointer to security attributes</span></span></span></span><br><span class="line"><span class="function"><span class="params"> </span></span></span><br><span class="line"><span class="function"><span class="params">BOOL bManualReset,</span></span></span><br><span class="line"><span class="function"><span class="params"> <span class="comment">// flag for manual-reset event</span></span></span></span><br><span class="line"><span class="function"><span class="params"> </span></span></span><br><span class="line"><span class="function"><span class="params">BOOL bInitialState,</span></span></span><br><span class="line"><span class="function"><span class="params"> <span class="comment">// flag for initial state</span></span></span></span><br><span class="line"><span class="function"><span class="params"> </span></span></span><br><span class="line"><span class="function"><span class="params">LPCTSTR lpName</span></span></span><br><span class="line"><span class="function"><span class="params"> <span class="comment">// pointer to event-object name</span></span></span></span><br><span class="line"><span class="function"><span class="params"> </span></span></span><br><span class="line"><span class="function"><span class="params">)</span></span>;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">SECURITY_ATTRIBUTES sa;</span><br><span class="line">sa.nLength = <span class="keyword">sizeof</span>(sa);</span><br><span class="line"></span><br><span class="line">HANDLE h = CreateEvent(&amp;sa,FALSE,FALSE,<span class="literal">NULL</span>);</span><br></pre></td></tr></table></figure><br><br><p><img src="/images/javawz/image-20240226011030841.png" alt="image-20240226011030841"></p><p><img src="/images/javawz/image-20240226192805501.png" alt="image-20240226192805501"></p><h3 id="id与句柄"><a class="markdownIt-Anchor" href="#id与句柄"></a> ID与句柄</h3><p>句柄编号是进程私有的，id是系统全局句柄表中的索引，该表存放了该系统的所有进程和线程内核对象</p><p><img src="/images/javawz/image-20240301222603927.png" alt="image-20240301222603927"></p><h3 id="以挂起的形式创建进程"><a class="markdownIt-Anchor" href="#以挂起的形式创建进程"></a> 以挂起的形式创建进程</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function">BOOL <span class="title">CreateProcess</span><span class="params">(</span></span></span><br><span class="line"><span class="function"><span class="params">  LPCTSTR lpApplicationName,                 <span class="comment">// name of executable module</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPTSTR lpCommandLine,                      <span class="comment">// command line string</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPSECURITY_ATTRIBUTES lpProcessAttributes, <span class="comment">// SD</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPSECURITY_ATTRIBUTES lpThreadAttributes,  <span class="comment">// SD</span></span></span></span><br><span class="line"><span class="function"><span class="params">  BOOL bInheritHandles,                      <span class="comment">// handle inheritance option</span></span></span></span><br><span class="line"><span class="function"><span class="params">  DWORD dwCreationFlags,                     <span class="comment">// creation flags</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPVOID lpEnvironment,                      <span class="comment">// new environment block</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPCTSTR lpCurrentDirectory,                <span class="comment">// current directory name</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPSTARTUPINFO lpStartupInfo,               <span class="comment">// startup information</span></span></span></span><br><span class="line"><span class="function"><span class="params">  LPPROCESS_INFORMATION lpProcessInformation <span class="comment">// process information</span></span></span></span><br><span class="line"><span class="function"><span class="params">)</span></span>;</span><br></pre></td></tr></table></figure><p>dwCreationFlags 设置成CREATE_SUSPENDED，并用ResumeThread函数唤醒线程。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DWORD WINAPI ResumeThread(_In_ HANDLE hThread);</span><br></pre></td></tr></table></figure><h3 id="模块目录与工作目录"><a class="markdownIt-Anchor" href="#模块目录与工作目录"></a> 模块目录与工作目录</h3><h4 id="获取当前模块目录"><a class="markdownIt-Anchor" href="#获取当前模块目录"></a> 获取当前模块目录</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">DWORD WINAPI GetModuleFileName(</span><br><span class="line">    _In_opt_  HMODULE hModule,</span><br><span class="line">    _Out_     LPTSTR lpFilename,</span><br><span class="line">    _In_      DWORD nSize</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">hModule Long</span><br><span class="line">一个模块的句柄。可以是一个DLL模块，或者是一个应用程序的实例句柄。如果该参数为NULL，</span><br><span class="line">该函数返回该应用程序全路径。</span><br><span class="line"></span><br><span class="line">lpFileName String</span><br><span class="line">指定一个字串缓冲区，要在其中容纳文件的用NULL字符中止的路径名，hModule模块就是从这个文件装载进来的</span><br><span class="line"></span><br><span class="line">nSize Long</span><br><span class="line">装载到缓冲区lpFileName的最大字符数量</span><br><span class="line"></span><br><span class="line">返回值</span><br><span class="line">Long，如执行成功，返回复制到lpFileName的实际字符数量；零表示失败。使用GetLastError可以打印错误信息。</span><br></pre></td></tr></table></figure><h4 id="获取当前工作目录"><a class="markdownIt-Anchor" href="#获取当前工作目录"></a> 获取当前工作目录</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">DWORD GetCurrentDirectory(</span><br><span class="line">  DWORD  nBufferLength,</span><br><span class="line">  LPTSTR lpBuffer</span><br><span class="line">);</span><br><span class="line">nBufferLength 缓冲区的长度</span><br><span class="line">lpBuffer 指定一个预定义字串，用于装载当前目录</span><br><span class="line"></span><br><span class="line">返回值</span><br><span class="line">调用成功 返回装载到lpBuffer的字节数。</span><br><span class="line">使用GetLastError函数可获得错误信息。</span><br></pre></td></tr></table></figure><h3 id="enumprocesses"><a class="markdownIt-Anchor" href="#enumprocesses"></a> EnumProcesses</h3><p>获取系统所有进程id</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">头文件  Psapi.h </span><br><span class="line">BOOL WINAPI EnumProcesses（_Out_ DWORD * pProcessIds，_In_ DWORD CB，_Out_ DWORD * pBytesReturned）;</span><br><span class="line"></span><br><span class="line">pProcessIds</span><br><span class="line">接收进程id的数组</span><br><span class="line">cb</span><br><span class="line">数组的大小</span><br><span class="line">pBytesReturned</span><br><span class="line">数组返回的字节数</span><br><span class="line"></span><br><span class="line">返回值</span><br><span class="line">成功返回非零数,失败返回零,可以使用函数 GetLastError获取错误信息.</span><br></pre></td></tr></table></figure><h3 id="getcommandline"><a class="markdownIt-Anchor" href="#getcommandline"></a> GetCommandLine</h3><p>获取命令行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">LPTSTR GetCommandLine(void);</span><br></pre></td></tr></table></figure><h3 id="createtoolhelp32snapshot"><a class="markdownIt-Anchor" href="#createtoolhelp32snapshot"></a> CreateToolhelp32Snapshot</h3><p>获取进程信息为指定的进程、进程使用的堆<code>[HEAP]、模块[MODULE]</code>、<a href="https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B/103101?fromModule=lemma_inlink" target="_blank" rel="noopener">线程</a>建立一个快照。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">HANDLE WINAPI CreateToolhelp32Snapshot(</span><br><span class="line">DWORD dwFlags, //用来指定“快照”中需要返回的对象，可以是TH32CS_SNAPPROCESS等</span><br><span class="line">DWORD th32ProcessID //一个进程ID号，用来指定要获取哪一个进程的快照，当获取系统进程列表或获取 当前进程快照时可以设为0</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">dwFlags</span><br><span class="line">指定快照中包含的系统内容，这个参数能够使用下列数值（常量）中的一个或多个。</span><br><span class="line">TH32CS_INHERIT(0x80000000) - 声明快照句柄是可继承的。</span><br><span class="line">TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。</span><br><span class="line">TH32CS_SNAPHEAPLIST(0x00000001) - 在快照中包含在th32ProcessID中指定的进程的所有的堆。</span><br><span class="line">TH32CS_SNAPMODULE(0x00000008) - 在快照中包含在th32ProcessID中指定的进程的所有的模块。</span><br><span class="line">TH32CS_SNAPPROCESS(0x00000002) - 在快照中包含系统中所有的进程。</span><br><span class="line">TH32CS_SNAPTHREAD(0x00000004) - 在快照中包含系统中所有的线程。</span><br><span class="line">H32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)</span><br><span class="line"></span><br><span class="line">返回值</span><br><span class="line">调用成功，返回快照的句柄，调用失败，返回INVALID_HANDLE_VALUE 。</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">BOOL WINAPI Process32First(</span><br><span class="line">    HANDLE hSnapshot,//_in</span><br><span class="line">    LPPROCESSENTRY32 lppe//_out</span><br><span class="line">);</span><br><span class="line">process32First是一个进程获取函数，当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后，我们可以利用process32First函数来获得第一个进程的句柄。</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">BOOLWINAPIProcess32Next(</span><br><span class="line">__inHANDLEhSnapshot,</span><br><span class="line">__outLPPROCESSENTRY32lppe</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">hSnapshot</span><br><span class="line">从CreateToolhelp32Snapshot 返回的句柄。</span><br><span class="line">lppe</span><br><span class="line">指向PROCESSENTRY32结构的指针。</span><br></pre></td></tr></table></figure><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;windows.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;tlhelp32.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPALL | TH32CS_SNAPMODULE | TH32CS_SNAPHEAPLIST, <span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (h == INVALID_HANDLE_VALUE)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">"CreateToolhelp32Snapshot Error: "</span> &lt;&lt; GetLastError() &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">PROCESSENTRY32 pe32;</span><br><span class="line">pe32.dwSize = <span class="keyword">sizeof</span> pe32;</span><br><span class="line"></span><br><span class="line">BOOL bMore = ::Process32First(h, &amp;pe32);</span><br><span class="line"><span class="keyword">int</span> i = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span> (bMore)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">"进程名称：%ls--"</span>, pe32.szExeFile); <span class="comment">//这里得到的应该是宽字符，用%ls,不然无法正常打印</span></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">"进程ID：%u\t"</span>, pe32.th32ProcessID);</span><br><span class="line">bMore = ::Process32Next(h, &amp;pe32);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (++i % <span class="number">2</span> == <span class="number">0</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="built_in">endl</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="built_in">endl</span> &lt;&lt; <span class="built_in">endl</span> &lt;&lt; i;</span><br><span class="line">CloseHandle(h);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;字符编码&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#字符编码&quot;&gt;&lt;/a&gt; 字符编码&lt;/h1&gt;
&lt;h3 id=&quot;标准的ascii码&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#标准的ascii码&quot;&gt;&lt;/a
      
    
    </summary>
    
      <category term="逆向工程" scheme="https://xiaowuyoucy.github.io/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>汇编基础</title>
    <link href="https://xiaowuyoucy.github.io/2023/12/14/%E6%B1%87%E7%BC%96%E5%9F%BA%E7%A1%80/"/>
    <id>https://xiaowuyoucy.github.io/2023/12/14/汇编基础/</id>
    <published>2023-12-14T09:58:53.000Z</published>
    <updated>2024-01-06T14:19:01.746Z</updated>
    
    <content type="html"><![CDATA[<h3 id="位运算"><a class="markdownIt-Anchor" href="#位运算"></a> 位运算</h3><h4 id="与运算"><a class="markdownIt-Anchor" href="#与运算"></a> 与运算</h4><p><img src="/images/javawz/image-20231226032344544.png" alt="image-20231226032344544"></p><h4 id="或运算"><a class="markdownIt-Anchor" href="#或运算"></a> 或运算</h4><p><img src="/images/javawz/image-20231226032439239.png" alt="image-20231226032439239"></p><h4 id="异或"><a class="markdownIt-Anchor" href="#异或"></a> 异或</h4><p><img src="/images/javawz/image-20231226032458930.png" alt="image-20231226032458930"></p><h4 id="非运算"><a class="markdownIt-Anchor" href="#非运算"></a> 非运算</h4><p><img src="/images/javawz/image-20231226032523375.png" alt="image-20231226032523375"></p><h4 id="左移"><a class="markdownIt-Anchor" href="#左移"></a> 左移</h4><p><img src="/images/javawz/image-20231226032848211.png" alt="image-20231226032848211"></p><h4 id="右移"><a class="markdownIt-Anchor" href="#右移"></a> 右移</h4><p>各二进位全部右移若干位，低位丢弃，高位补0或者补符号位</p><p>shr是无符号的，高位用0补</p><p>sar是有符号的，高位用符号位补</p><p>在c语言中&gt;&gt;是包含了shr和sar的,怎么区分有符号和无符号要看类型,比如 unsigned int就是无符号的,右移会使用shr</p><p><img src="/images/javawz/image-20231226033015280.png" alt="image-20231226033015280"></p><h3 id="计算机做加法的过程"><a class="markdownIt-Anchor" href="#计算机做加法的过程"></a> 计算机做加法的过程</h3><p>4 + 5 = ？</p><p>1、4和5，先异或  4xor5</p><p>2、4和5进行与运算，得出来的结果判断是否有进位，如果是0就是没有进位，如果是非0就是有进位。最后左移1位</p><p>（4 and 5 ）&lt;&lt; 1</p><p>3、将步骤1和步骤2的结果异或</p><p>4、将步骤1和步骤2的结果相与，判断还有没有进位，如果有则继续重复上述步骤</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">4------ 0000 0100</span><br><span class="line"></span><br><span class="line">5------ 0000 0101</span><br><span class="line">加---------------------------</span><br><span class="line">0000 1001</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">第一步 异或</span><br><span class="line"> 0000 0100</span><br><span class="line"></span><br><span class="line">0000 0101</span><br><span class="line">异或---------------------------</span><br><span class="line">0000 0001</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">第二步 与，判断是否有进位</span><br><span class="line"></span><br><span class="line"> 0000 0100</span><br><span class="line"></span><br><span class="line">0000 0101</span><br><span class="line">与---------------------------</span><br><span class="line">0000 0100</span><br><span class="line"></span><br><span class="line">第三步，如果第二步与的结果非0表示有进位，需要左移1位</span><br><span class="line"></span><br><span class="line">0000 0100 &lt;&lt; 1 = 0000 1000</span><br><span class="line"></span><br><span class="line">第四步 继续异或</span><br><span class="line"></span><br><span class="line"> 0000 0001</span><br><span class="line"></span><br><span class="line">0000 1000</span><br><span class="line">异或---------------------------</span><br><span class="line">0000 1001</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">第五步 将第一步和第三步的结果进行与运算判断是否还有进位</span><br><span class="line"></span><br><span class="line"> 0000 0001</span><br><span class="line"></span><br><span class="line">0000 1000</span><br><span class="line">与---------------------------</span><br><span class="line">0000 0000</span><br><span class="line"></span><br><span class="line">发现是0 表示没有进位,运算结束</span><br></pre></td></tr></table></figure><p>4-5=?</p><p>4-5 = 4 + (-5)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">4 + (-5)</span><br><span class="line"></span><br><span class="line">4         0000 0100</span><br><span class="line"></span><br><span class="line">-5  1111 1011</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">1) 异或</span><br><span class="line"></span><br><span class="line">0000 0100</span><br><span class="line"></span><br><span class="line">1111 1011</span><br><span class="line">异或---------------------------</span><br><span class="line">1111 1111</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">2) 判断是否有进位</span><br><span class="line"></span><br><span class="line">0000 0100</span><br><span class="line"></span><br><span class="line">1111 1011</span><br><span class="line">与---------------------------</span><br><span class="line">0000 0000</span><br><span class="line"></span><br><span class="line">结果是0,没有进位。1111 1111 就是最终结果</span><br></pre></td></tr></table></figure><p>X / Y 表示 X 可以减去多少次Y</p><h3 id="dtdebug"><a class="markdownIt-Anchor" href="#dtdebug"></a> DTDebug</h3><p>配置DTDebug</p><p><img src="/images/javawz/image-20231226045552087.png" alt="image-20231226045552087"></p><p><img src="/images/javawz/image-20231226045613640.png" alt="image-20231226045613640"></p><p>UDD path和Plugin path 写自己安装目录下的</p><h3 id="通用寄存器"><a class="markdownIt-Anchor" href="#通用寄存器"></a> 通用寄存器</h3><p><img src="/images/javawz/image-20231226045728248.png" alt="image-20231226045728248"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">MOV 目标操作数，源操作数</span><br><span class="line"></span><br><span class="line">mov eax,12</span><br><span class="line">mov eax,ecx</span><br><span class="line"></span><br><span class="line">mov ax,12</span><br><span class="line">mov ax,cx</span><br><span class="line"></span><br><span class="line">mov ah,ch</span><br><span class="line">mov ah,12</span><br><span class="line"></span><br><span class="line">mov al,cl</span><br><span class="line">mov al,2</span><br><span class="line"></span><br><span class="line">mov指令 左右两边的操作数必须是等宽的</span><br><span class="line">例如 </span><br><span class="line">ax 和 cx是等宽的</span><br><span class="line">al 和 cl是等宽的</span><br><span class="line">ah 和 cl是等宽的</span><br><span class="line">eax 和 ax不是等宽的,因为eax是32位的,ax是16位的</span><br></pre></td></tr></table></figure><h3 id="内存"><a class="markdownIt-Anchor" href="#内存"></a> 内存</h3><p><img src="/images/javawz/image-20231226050932498.png" alt="image-20231226050932498"></p><p>每个进程都有4G的虚拟内存,当某一块虚拟内存需要用到的时候,会将这块虚拟内存映射到物理内存中,最后物理内存会将这块内存映射到内存条中</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">BYTE　字节　＝　8(BIT)</span><br><span class="line">WORD  字    =   16(BIT)</span><br><span class="line">DWORD 双字  =   32(BIT)</span><br><span class="line"></span><br><span class="line">1KB = 1024 BYTE</span><br><span class="line">1MB = 1024 KB </span><br><span class="line">1GB = 1024 MB</span><br></pre></td></tr></table></figure><p>mov指令使用内存</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">mov 类型 ptr ds:[内存编号],值</span><br><span class="line"></span><br><span class="line">mov byte ptr ds:[00A90280],22</span><br><span class="line">mov word ptr ds:[00A90280],22</span><br><span class="line">mov dword ptr ds:[00A90280],22</span><br></pre></td></tr></table></figure><p>从指定内存中写入/读取数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">mov dword ptr ds:[0x0012FF34],0x12345678</span><br><span class="line"></span><br><span class="line">mov eax,dword ptr ds:[0x0012FF34]</span><br><span class="line"></span><br><span class="line">dword ：要读/写多少  此时是4字节   byte == 1字节  word == 2字节</span><br><span class="line"></span><br><span class="line">ptr: Point 代表后面是一个指针 (指针的意思就是里面存的不是普通的值，而是个地址)</span><br><span class="line"></span><br><span class="line">ds：段寄存器 先不用管 记住就行</span><br><span class="line"></span><br><span class="line">0x0012FF34:内存编号，必须是32位的  前面0可以省略</span><br><span class="line"></span><br><span class="line">注意：地址编号不要随便写，因为内存是有保护的，并不是所有的内存都可以直接读写(需要特别处理)</span><br><span class="line"></span><br><span class="line">建议地址编号写成esp的值</span><br></pre></td></tr></table></figure><p>寻址公式</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">LEA 指令</span><br><span class="line">作用: 取当前内存的地址编号</span><br><span class="line"></span><br><span class="line">lea 寄存器,内存地址</span><br><span class="line"></span><br><span class="line">LEA EAX,DWORD PTR DS:[0X13FFC4] 内存地址的编号存放到EAX中</span><br><span class="line">将DS:[0X13FFC4] 内存地址的编号存放到EAX中</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br></pre></td><td class="code"><pre><span class="line">寻址公式一：[立即数]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">读取内存的值：</span><br><span class="line"></span><br><span class="line">MOV EAX,DWORD PTR DS:[0x13FFC4]</span><br><span class="line">MOV EAX,DWORD PTR DS:[0x13FFC8]</span><br><span class="line"></span><br><span class="line">向内存中写入数据：</span><br><span class="line"></span><br><span class="line">MOV DWORD PTR DS:[0x13FFC4],eax</span><br><span class="line">MOV DWORD PTR DS:[0x13FFC8],ebx</span><br><span class="line"></span><br><span class="line">获取内存编号：</span><br><span class="line"></span><br><span class="line">LEA EAX,DWORD PTR DS:[0X13FFC4]</span><br><span class="line">LEA EAX,DWORD PTR DS:[ESP+8]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">寻址公式二：[reg]  reg代表寄存器 可以是8个通用寄存器中的任意一个</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">读取内存的值：</span><br><span class="line"></span><br><span class="line">MOV ECX,0x13FFD0</span><br><span class="line">MOV EAX,DWORD PTR DS:[ECX]</span><br><span class="line"></span><br><span class="line">向内存中写入数据：</span><br><span class="line"></span><br><span class="line">MOV EDX,0x13FFD8</span><br><span class="line">MOV DWORD PTR DS:[EDX],0x87654321</span><br><span class="line"></span><br><span class="line">获取内存编号：</span><br><span class="line"></span><br><span class="line">LEA  EAX,DWORD PTR DS:[EDX]</span><br><span class="line">MOV EAX,DWORD PTR DS:[EDX]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">寻址公式三：[reg+立即数] </span><br><span class="line"></span><br><span class="line">读取内存的值：</span><br><span class="line"></span><br><span class="line">MOV ECX,0x13FFD0</span><br><span class="line">MOV EAX,DWORD PTR DS:[ECX+4]</span><br><span class="line"></span><br><span class="line">向内存中写入数据：</span><br><span class="line"></span><br><span class="line">MOV EDX,0x13FFD8</span><br><span class="line">MOV DWORD PTR DS:[EDX+0xC],0x87654321</span><br><span class="line"></span><br><span class="line">获取内存编号：</span><br><span class="line"></span><br><span class="line">LEA  EAX,DWORD PTR DS:[EDX+4]</span><br><span class="line">MOV EAX,DWORD PTR DS:[EDX+4]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">寻址公式四：[reg+reg*&#123;1,2,4,8&#125;] </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">读取内存的值：</span><br><span class="line">MOV EAX,13FFC4</span><br><span class="line">MOV ECX,2</span><br><span class="line">MOV EDX,DWORD PTR DS:[EAX+ECX*4]</span><br><span class="line"></span><br><span class="line">向内存中写入数据：</span><br><span class="line">MOV EAX,13FFC4</span><br><span class="line">MOV ECX,2</span><br><span class="line">MOV DWORD PTR DS:[EAX+ECX*4],87654321</span><br><span class="line"></span><br><span class="line">获取内存编号：</span><br><span class="line">LEA EAX,DWORD PTR DS:[EAX+ECX*4]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">寻址公式五：[reg+reg*&#123;1,2,4,8&#125;+立即数] </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">读取内存的值：</span><br><span class="line">MOV EAX,13FFC4</span><br><span class="line">MOV ECX,2</span><br><span class="line">MOV EDX,DWORD PTR DS:[EAX+ECX*4+4]</span><br><span class="line"></span><br><span class="line">向内存中写入数据：</span><br><span class="line">MOV EAX,13FFC4</span><br><span class="line">MOV ECX,2</span><br><span class="line">MOV DWORD PTR DS:[EAX+ECX*4+4],87654321</span><br><span class="line"></span><br><span class="line">获取内存编号：</span><br><span class="line">LEA EAX,DWORD PTR DS:[EAX+ECX*4+2]</span><br></pre></td></tr></table></figure><h3 id="存储模式"><a class="markdownIt-Anchor" href="#存储模式"></a> 存储模式</h3><p>大端模式：数据高位在低位，数据低位在高位</p><p>小端模式：数据低位在低位，数据高位在高位</p><table><thead><tr><th style="text-align:center">大端0x12345678</th><th style="text-align:center">小端0x12345678</th><th style="text-align:center">地址</th></tr></thead><tbody><tr><td style="text-align:center">12</td><td style="text-align:center">78</td><td style="text-align:center">0x00000000</td></tr><tr><td style="text-align:center">34</td><td style="text-align:center">56</td><td style="text-align:center">0x00000001</td></tr><tr><td style="text-align:center">56</td><td style="text-align:center">34</td><td style="text-align:center">0x00000002</td></tr><tr><td style="text-align:center">78</td><td style="text-align:center">12</td><td style="text-align:center">0x00000003</td></tr></tbody></table><h3 id="dtdebug内存窗口的使用"><a class="markdownIt-Anchor" href="#dtdebug内存窗口的使用"></a> DTDEBUG内存窗口的使用</h3><p>分别以字节/字/双字形式来查看内存（db dw dd）</p><p><img src="/images/javawz/image-20231228045203084.png" alt="image-20231228045203084"></p><h3 id="基本汇编指令"><a class="markdownIt-Anchor" href="#基本汇编指令"></a> 基本汇编指令</h3><h4 id="mov指令"><a class="markdownIt-Anchor" href="#mov指令"></a> MOV指令</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">MOV 的语法：</span><br><span class="line"></span><br><span class="line">1、MOV r/m8,r8 r 通用寄存器</span><br><span class="line"></span><br><span class="line">2、MOV r/m16,r16m 代表内存</span><br><span class="line"></span><br><span class="line">3、MOV r/m32,r32imm 代表立即数</span><br><span class="line"></span><br><span class="line">4、MOV r8,r/m8r8 代表8位通用寄存器</span><br><span class="line"></span><br><span class="line">5、MOV r16,r/m16m8 代表8位内存</span><br><span class="line"></span><br><span class="line">6、MOV r32,r/m32imm8 代表8位立即数</span><br><span class="line"></span><br><span class="line">7、MOV r8, imm8</span><br><span class="line"></span><br><span class="line">8、MOV r16, imm16</span><br><span class="line"></span><br><span class="line">9、MOV r32, imm32</span><br></pre></td></tr></table></figure><h4 id="add指令"><a class="markdownIt-Anchor" href="#add指令"></a> ADD指令</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">ADD AL, imm8 </span><br><span class="line"></span><br><span class="line">ADD AX, imm16</span><br><span class="line"></span><br><span class="line">ADD EAX, imm32</span><br><span class="line"></span><br><span class="line">ADD r/m8, imm8</span><br><span class="line"></span><br><span class="line">ADD r/m16,imm16</span><br><span class="line"></span><br><span class="line">ADD r/m32,imm32</span><br><span class="line"></span><br><span class="line">ADD r/m16, imm8</span><br><span class="line"></span><br><span class="line">ADD r/m32, imm8</span><br><span class="line"></span><br><span class="line">ADD r/m8, r8</span><br><span class="line"></span><br><span class="line">ADD r/m16, r16</span><br><span class="line"></span><br><span class="line">ADD r/m32, r32</span><br><span class="line"></span><br><span class="line">ADD r8, r/m8</span><br><span class="line"></span><br><span class="line">ADD r16, r/m16</span><br><span class="line"></span><br><span class="line">ADD r32, r/m32</span><br></pre></td></tr></table></figure><h4 id="adc指令带进位加法"><a class="markdownIt-Anchor" href="#adc指令带进位加法"></a> ADC指令：带进位加法</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">格式：ADC  R/M,R/M/IMM   两边不能同时为内存  宽度要一样</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">ADC AL,CL</span><br><span class="line"></span><br><span class="line">ADC BYTE PTR DS:[12FFC4],2</span><br><span class="line"></span><br><span class="line">ADC BYTE PTR DS:[12FFC4],AL</span><br></pre></td></tr></table></figure><h4 id="sbb指令带借位减法"><a class="markdownIt-Anchor" href="#sbb指令带借位减法"></a> SBB指令：带借位减法</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">格式：SBB  R/M,R/M   两边不能同时为内存  宽度要一样</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">SBB AL,CL</span><br><span class="line"></span><br><span class="line">SBB BYTE PTR DS:[12FFC4],2</span><br><span class="line"></span><br><span class="line">SBB BYTE PTR DS:[12FFC4],AL</span><br></pre></td></tr></table></figure><h4 id="sub指令"><a class="markdownIt-Anchor" href="#sub指令"></a> SUB指令</h4><p>减法指令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">SUB AL, imm8 </span><br><span class="line"></span><br><span class="line">SUB AX, imm16</span><br><span class="line"></span><br><span class="line">SUB EAX, imm32</span><br><span class="line"></span><br><span class="line">SUB r/m8, imm8</span><br><span class="line"></span><br><span class="line">SUB r/m16,imm16</span><br><span class="line"></span><br><span class="line">SUB r/m32,imm32</span><br><span class="line"></span><br><span class="line">SUB r/m16, imm8</span><br><span class="line"></span><br><span class="line">SUB r/m32, imm8</span><br><span class="line"></span><br><span class="line">SUB r/m8, r8</span><br><span class="line"></span><br><span class="line">SUB r/m16, r16</span><br><span class="line"></span><br><span class="line">SUB r/m32, r32</span><br><span class="line"></span><br><span class="line">SUB r8, r/m8</span><br><span class="line"></span><br><span class="line">SUB r16, r/m16</span><br><span class="line"></span><br><span class="line">SUB r32, r/m32</span><br></pre></td></tr></table></figure><h4 id="xchg指令交换数据"><a class="markdownIt-Anchor" href="#xchg指令交换数据"></a> XCHG指令：交换数据</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">格式：XCHG  R/M,R/M/IMM   两边不能同时为内存  宽度要一样</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">XCHG AL,CL</span><br><span class="line"></span><br><span class="line">XCHG DWORD PTR DS:[12FFC4],EAX</span><br><span class="line"></span><br><span class="line">XCHG BYTE PTR DS:[12FFC4],AL</span><br></pre></td></tr></table></figure><h4 id="and-指令"><a class="markdownIt-Anchor" href="#and-指令"></a> AND 指令</h4><p>与指令,两个是1才是1,否则是0</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">AND AL, imm8</span><br><span class="line"></span><br><span class="line">AND AX, imm16</span><br><span class="line"></span><br><span class="line">AND EAX, imm32</span><br><span class="line"></span><br><span class="line">AND r/m8, imm8</span><br><span class="line"></span><br><span class="line">AND r/m16,imm16</span><br><span class="line"></span><br><span class="line">AND r/m32,imm32</span><br><span class="line"></span><br><span class="line">AND r/m16, imm8</span><br><span class="line"></span><br><span class="line">AND r/m32, imm8</span><br><span class="line"></span><br><span class="line">AND r/m8, r8</span><br><span class="line"></span><br><span class="line">AND r/m16, r16</span><br><span class="line"></span><br><span class="line">AND r/m32, r32</span><br><span class="line"></span><br><span class="line">AND r8, r/m8</span><br><span class="line"></span><br><span class="line">AND r16, r/m16</span><br><span class="line"></span><br><span class="line">AND r32, r/m32</span><br></pre></td></tr></table></figure><h4 id="or指令"><a class="markdownIt-Anchor" href="#or指令"></a> OR指令</h4><p>或指令,有一个是1就是1,两个是0就是0</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">OR AL, imm8</span><br><span class="line"></span><br><span class="line">OR AX, imm16</span><br><span class="line"></span><br><span class="line">OR EAX, imm32</span><br><span class="line"></span><br><span class="line">OR r/m8, imm8</span><br><span class="line"></span><br><span class="line">OR r/m16,imm16</span><br><span class="line"></span><br><span class="line">OR r/m32,imm32</span><br><span class="line"></span><br><span class="line">OR r/m16, imm8</span><br><span class="line"></span><br><span class="line">OR r/m32, imm8</span><br><span class="line"></span><br><span class="line">OR r/m8, r8</span><br><span class="line"></span><br><span class="line">OR r/m16, r16</span><br><span class="line"></span><br><span class="line">OR r/m32, r32</span><br><span class="line"></span><br><span class="line">OR r8, r/m8</span><br><span class="line"></span><br><span class="line">OR r16, r/m16</span><br><span class="line"></span><br><span class="line">OR r32, r/m32</span><br></pre></td></tr></table></figure><h4 id="xor指令"><a class="markdownIt-Anchor" href="#xor指令"></a> XOR指令</h4><p>异或指令, 两个不一样才是1,否则是0</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">XOR AL, imm8</span><br><span class="line"></span><br><span class="line">XOR AX, imm16</span><br><span class="line"></span><br><span class="line">XOR EAX, imm32</span><br><span class="line"></span><br><span class="line">XOR r/m8, imm8</span><br><span class="line"></span><br><span class="line">XOR r/m16,imm16</span><br><span class="line"></span><br><span class="line">XOR r/m32,imm32</span><br><span class="line"></span><br><span class="line">XOR r/m16, imm8</span><br><span class="line"></span><br><span class="line">XOR r/m32, imm8</span><br><span class="line"></span><br><span class="line">XOR r/m8, r8</span><br><span class="line"></span><br><span class="line">XOR r/m16, r16</span><br><span class="line"></span><br><span class="line">XOR r/m32, r32</span><br><span class="line"></span><br><span class="line">XOR r8, r/m8</span><br><span class="line"></span><br><span class="line">XOR r16, r/m16</span><br><span class="line"></span><br><span class="line">XOR r32, r/m32</span><br></pre></td></tr></table></figure><h4 id="not-指令"><a class="markdownIt-Anchor" href="#not-指令"></a> NOT 指令</h4><p>非指令,0变1,1变0</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">NOT r/m8</span><br><span class="line"></span><br><span class="line">NOT r/m16</span><br><span class="line"></span><br><span class="line">NOT r/m32</span><br></pre></td></tr></table></figure><p>MOVS指令：移动数据  内存-内存</p><p>移动内存[ESI]]的数据到内存[EDI]中</p><p>每复制一次,ESI和EDI都会+1（具体加几或减几要看你一次移动多少个字节）或-1，具体是加还是减要看标志寄存器中DF的值，DF是0就+1，D是1就-1</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">BYTE/WORD/DWORD</span><br><span class="line"></span><br><span class="line">MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]简写为：MOVSB</span><br><span class="line"></span><br><span class="line">MOVS WORD PTR ES:[EDI],BYTE PTR DS:[ESI]简写为：MOVSW</span><br><span class="line"></span><br><span class="line">MOVS DWORD PTR ES:[EDI],BYTE PTR DS:[ESI]简写为：MOVSD</span><br></pre></td></tr></table></figure><p><img src="/images/javawz/image-20231228060752810.png" alt="image-20231228060752810"></p><h4 id="stos指令"><a class="markdownIt-Anchor" href="#stos指令"></a> STOS指令：</h4><h5 id="将alaxeax的值存储到edi指定的内存单元"><a class="markdownIt-Anchor" href="#将alaxeax的值存储到edi指定的内存单元"></a> 将Al/AX/EAX的值存储到[EDI]指定的内存单元</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">STOS BYTE PTR ES:[EDI]简写为STOSB</span><br><span class="line"></span><br><span class="line">STOS WORD PTR ES:[EDI]简写为STOSW</span><br><span class="line"></span><br><span class="line">STOS DWORD PTR ES:[EDI]简写为STOSD</span><br></pre></td></tr></table></figure><p><img src="/images/javawz/image-20231228062418429.png" alt="image-20231228062418429"></p><h4 id="rep指令"><a class="markdownIt-Anchor" href="#rep指令"></a> REP指令：</h4><p>按计数寄存器 (ECX) 中指定的次数重复执行字符串指令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">MOV ECX,10</span><br><span class="line"></span><br><span class="line">REP MOVSD</span><br><span class="line"></span><br><span class="line">REP STOSD</span><br><span class="line"></span><br><span class="line">将内存[esi]中的数据重复ecx次复制到内存[edi]中,每次重复esi和edi都加4</span><br><span class="line">REP MOVS DWORD PTR ES:[EDI],DWORD PTR ES:[ESI]</span><br><span class="line"></span><br><span class="line">将EAX中的值重复ECX次复制到内存[EDI]中,每重复一次,edi都加4</span><br><span class="line">REP STOS DWORD PTR ES:[EDI]</span><br></pre></td></tr></table></figure><h2 id="堆栈"><a class="markdownIt-Anchor" href="#堆栈"></a> 堆栈</h2><p>查看堆栈的大小</p><p><img src="/images/javawz/image-20231228072101553.png" alt="image-20231228072101553"></p><p><img src="/images/javawz/image-20231228072209382.png" alt="image-20231228072209382"></p><p><img src="/images/javawz/image-20231228072142171.png" alt="image-20231228072142171"></p><p>ESP寄存器用来存放当前堆栈使用到哪里的地址</p><h3 id="push指令"><a class="markdownIt-Anchor" href="#push指令"></a> PUSH指令:</h3><p>入栈指令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">1、PUSH r32</span><br><span class="line"></span><br><span class="line">2、PUSH r16</span><br><span class="line"></span><br><span class="line">3、PUSH m16</span><br><span class="line"></span><br><span class="line">4、PUSH m32</span><br><span class="line"></span><br><span class="line">5、PUSH imm8/imm16/imm32</span><br></pre></td></tr></table></figure><h3 id="pop指令"><a class="markdownIt-Anchor" href="#pop指令"></a> POP指令</h3><p>出栈指令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">1、POP r32</span><br><span class="line"></span><br><span class="line">2、POP r16</span><br><span class="line"></span><br><span class="line">3、POP m16</span><br><span class="line"></span><br><span class="line">4、POP m32</span><br></pre></td></tr></table></figure><h3 id="通过其他指令实现堆栈的存取"><a class="markdownIt-Anchor" href="#通过其他指令实现堆栈的存取"></a> 通过其他指令实现堆栈的存取</h3><p><img src="/images/javawz/image-20231228073758951.png" alt="image-20231228073758951"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line">步骤一：压入数据</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">MOV EBX,13FFDCBASE</span><br><span class="line">MOV EDX,13FFDCTOP</span><br><span class="line"></span><br><span class="line">方式一：</span><br><span class="line"></span><br><span class="line">MOV DWORD PTR DS:[EDX-4],0xAAAAAAAA</span><br><span class="line">SUB EDX,4</span><br><span class="line"></span><br><span class="line">方式二：</span><br><span class="line"></span><br><span class="line">SUB EDX,4</span><br><span class="line">MOV DWORD PTR DS:[EDX],0xBBBBBBBB</span><br><span class="line"></span><br><span class="line">方式三：</span><br><span class="line"></span><br><span class="line">MOV DWORD PTR DS:[EDX-4],0xDDDDDDDD</span><br><span class="line">LEA EDX,DWORD PTR DS:[EDX-4]</span><br><span class="line"></span><br><span class="line">方式四：</span><br><span class="line"></span><br><span class="line">LEA EDX,DWORD PTR DS:[EDX-4]</span><br><span class="line">MOV DWORD PTR DS:[EDX],0xEEEEEEEE</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">步骤二：读取第N个数</span><br><span class="line"></span><br><span class="line">1、方式一：通过Base加偏移来读取</span><br><span class="line"></span><br><span class="line">读第一个压入的数据：</span><br><span class="line"></span><br><span class="line">MOV ESI,DWORD PTR DS:[EBX-4]</span><br><span class="line"></span><br><span class="line">读第四个压入的数据：</span><br><span class="line"></span><br><span class="line">MOV ESI,DWORD PTR DS:[EBX-0x10]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">2、方式二：通过Top加偏移来读取</span><br><span class="line"></span><br><span class="line">读第二个压入的数据：</span><br><span class="line"></span><br><span class="line">MOV EDI,DWORD PTR DS:[EDX+4]</span><br><span class="line"></span><br><span class="line">读第三个压入的数据：</span><br><span class="line"></span><br><span class="line">MOV EDI,DWORD PTR DS:[EDX+8]</span><br><span class="line"></span><br><span class="line">步骤三：弹出数据</span><br><span class="line"></span><br><span class="line">MOV ECX,DWORD PTR DS:[EDX]</span><br><span class="line">LEA EDX,DWORD PTR DS:[EDX+4]</span><br><span class="line"></span><br><span class="line">MOV ESI,DWORD PTR DS:[EDX]</span><br><span class="line">ADD EDX,4</span><br><span class="line"></span><br><span class="line">LEA EDX,DWORD PTR DS:[EDX+4]</span><br><span class="line">MOV EDI,DWORD PTR DS:[EDX-4]</span><br></pre></td></tr></table></figure><h2 id="修改eip寄存器"><a class="markdownIt-Anchor" href="#修改eip寄存器"></a> 修改EIP寄存器</h2><p>EIP寄存器存放的是cpu下一条执行的指令</p><h3 id="jmp指令修改eip的值"><a class="markdownIt-Anchor" href="#jmp指令修改eip的值"></a> JMP指令：修改EIP的值</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">JMP 寄存器/立即数</span><br><span class="line">类似</span><br><span class="line">MOV EIP,寄存器/立即数  </span><br><span class="line"></span><br><span class="line">jmp eax</span><br><span class="line">jmp 0x11232244</span><br></pre></td></tr></table></figure><h3 id="call指令"><a class="markdownIt-Anchor" href="#call指令"></a> CALL指令：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">CALL 地址A/寄存器</span><br><span class="line"></span><br><span class="line">类似</span><br><span class="line">PUSH 地址B</span><br><span class="line">MOV EIP,地址A/寄存器</span><br></pre></td></tr></table></figure><h3 id="ret指令"><a class="markdownIt-Anchor" href="#ret指令"></a> RET指令：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">RET [num]</span><br><span class="line">[num] 可选</span><br><span class="line"></span><br><span class="line">ret</span><br><span class="line">ret 8</span><br><span class="line"></span><br><span class="line">类似</span><br><span class="line">LEA ESP,[ESP+4]</span><br><span class="line"></span><br><span class="line">MOV EIP，[ESP-4]</span><br></pre></td></tr></table></figure><h3 id="堆栈平衡"><a class="markdownIt-Anchor" href="#堆栈平衡"></a> 堆栈平衡</h3><p>进函数前esp和ebp是什么样的,执行函数之后就要还原什么样的</p><h3 id="eflags寄存器"><a class="markdownIt-Anchor" href="#eflags寄存器"></a> EFLAGS寄存器</h3><p><img src="/images/javawz/image-20240106220148670.png" alt="image-20240106220148670"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line">查看DTDEBUG中的EFLAGS的值，然后转换成二进制的形式，并取出CF/PF/AF/ZF/SF/OF的值</span><br><span class="line"></span><br><span class="line">记住这几个寄存器的位置和名称</span><br><span class="line"></span><br><span class="line">1、进位标志CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位，那么，其值为1，否则其值为0。</span><br><span class="line"></span><br><span class="line">MOV AL,0xEFMOV AL,0xFE</span><br><span class="line">ADD AL,2ADD AL,2</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">2、奇偶标志PF(Parity Flag)：奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。</span><br><span class="line">如果“1”的个数为偶数，则PF的值为1，否则其值为0。</span><br><span class="line"></span><br><span class="line">MOV AL,3</span><br><span class="line">ADD AL,3</span><br><span class="line">ADD AL,2</span><br><span class="line"></span><br><span class="line">3、辅助进位标志AF(Auxiliary Carry Flag)：</span><br><span class="line"></span><br><span class="line">在发生下列情况时，辅助进位标志AF的值被置为1，否则其值为0：</span><br><span class="line"></span><br><span class="line">(1)、在字操作时，发生低字节向高字节进位或借位时；</span><br><span class="line"></span><br><span class="line">(2)、在字节操作时，发生低4位向高4位进位或借位时。</span><br><span class="line"></span><br><span class="line">MOV EAX,0x55EEFFFFMOV AX,5EFEMOV AL,4E</span><br><span class="line">ADD EAX,2ADD AX,2ADD AL,2</span><br><span class="line"></span><br><span class="line">4、零标志ZF(Zero Flag)：零标志ZF用来反映运算结果是否为0。</span><br><span class="line">如果运算结果为0，则其值为1，否则其值为0。在判断运算结果是否为0时，可使用此标志位。</span><br><span class="line"></span><br><span class="line">XOR EAX,EAX</span><br><span class="line"></span><br><span class="line">MOV EAX,2</span><br><span class="line">SUB EAX,2</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">5、符号标志SF(Sign Flag)：符号标志SF用来反映运算结果的符号位，它与运算结果的最高位相同。</span><br><span class="line"></span><br><span class="line">MOV AL,7F</span><br><span class="line">ADD AL,2</span><br><span class="line"></span><br><span class="line">6、溢出标志OF(Overflow Flag)：溢出标志OF用于反映有符号数加减运算所得结果是否溢出。</span><br><span class="line">如果运算结果超过当前运算位数所能表示的范围，则称为溢出，OF的值被置为1，否则，OF的值被清为0。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">最高位进位与溢出的区别：</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">进位标志表示无符号数运算结果是否超出范围.</span><br><span class="line"></span><br><span class="line">溢出标志表示有符号数运算结果是否超出范围.</span><br><span class="line"></span><br><span class="line">溢出主要是给有符号运算使用的，在有符号的运算中，有如下的规律：</span><br><span class="line"></span><br><span class="line">正 + 正 = 正 如果结果是负数，则说明有溢出</span><br><span class="line"></span><br><span class="line">负 + 负 = 负 如果结果是正数，则说明有溢出</span><br><span class="line"></span><br><span class="line">正 + 负 永远都不会有溢出.</span><br></pre></td></tr></table></figure><p><img src="/images/javawz/image-20240106220407304.png" alt="image-20240106220407304"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">1、无符号、有符号都不溢出</span><br><span class="line"></span><br><span class="line">MOV AL,8</span><br><span class="line">ADD AL,8</span><br><span class="line"></span><br><span class="line">2、无符号溢出、有符号不溢出</span><br><span class="line"></span><br><span class="line">MOV AL,0FF</span><br><span class="line">ADD AL,2</span><br><span class="line"></span><br><span class="line">3、无符号不溢出、有符号溢出</span><br><span class="line"></span><br><span class="line">MOV AL,7F</span><br><span class="line">ADD AL,2</span><br><span class="line"></span><br><span class="line">4、无符号、有符号都溢出</span><br><span class="line"></span><br><span class="line">MOV AL,0FE</span><br><span class="line">ADD AL,80</span><br></pre></td></tr></table></figure><h4 id="cmp指令"><a class="markdownIt-Anchor" href="#cmp指令"></a> CMP指令：</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line">指令格式：CMP  R/M,R/M/IMM</span><br><span class="line"></span><br><span class="line">该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。</span><br><span class="line"></span><br><span class="line">只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。</span><br><span class="line"></span><br><span class="line">MOV EAX,100</span><br><span class="line">MOV ECX,100</span><br><span class="line">CMP EAX,ECX观察Z位</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">MOV EAX,100</span><br><span class="line">MOV ECX,200</span><br><span class="line">CMP EAX,ECX观察S位</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">CMP AX,WORD PTR DS:[405000]</span><br><span class="line"></span><br><span class="line">CMP AL,BYTE PTR DS:[405000]</span><br><span class="line"></span><br><span class="line">CMP EAX,DWORD PTR DS:[405000]</span><br></pre></td></tr></table></figure><h4 id="test指令"><a class="markdownIt-Anchor" href="#test指令"></a> TEST指令：</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line">指令格式：TEST  R/M,R/M/IMM</span><br><span class="line"></span><br><span class="line">该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位.</span><br><span class="line"></span><br><span class="line">与的操作表项如下：</span><br><span class="line"></span><br><span class="line">1 and 1 = 1</span><br><span class="line"></span><br><span class="line">1 and 0 = 0</span><br><span class="line"></span><br><span class="line">0 and 1 = 0</span><br><span class="line"></span><br><span class="line">0 and 0 = 0</span><br><span class="line"></span><br><span class="line">常见用法：用这个指令,可以确定某寄存器是否等于0。</span><br><span class="line"></span><br><span class="line">TEST EAX,EAX观察Z位</span><br><span class="line"></span><br><span class="line">但是如果EAX的二进制某些位为1的话,那么运算的结果就不为零。</span><br></pre></td></tr></table></figure><h4 id="jcc指令"><a class="markdownIt-Anchor" href="#jcc指令"></a> JCC指令</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line">1、JE, JZ       结果为零则跳转(相等时跳转)ZF=1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">2、JNE, JNZ        结果不为零则跳转(不相等时跳转)  ZF=0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">3、JS 结果为负则跳转SF=1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">4、JNS 结果为非负则跳转SF=0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">5、JP, JPE   结果中1的个数为偶数则跳转PF=1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">6、JNP, JPO   结果中1的个数为偶数则跳转PF=0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">7、JO    结果溢出了则跳转OF=1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">8、JNO    结果没有溢出则跳转OF=0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">9、JB, JNAE   小于则跳转 (无符号数)CF=1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">10、JNB, JAE    大于等于则跳转 (无符号数)CF=0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">11、JBE, JNA    小于等于则跳转 (无符号数)CF=1 or ZF=1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">12、JNBE, JA    大于则跳转(无符号数)CF=0 and ZF=0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">13、JL, JNGE    小于则跳转 (有符号数)SF≠ OF</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">14、JNL, JGE    大于等于则跳转 (有符号数)SF=OF</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">15、JLE, JNG    小于等于则跳转 (有符号数)ZF=1 or SF≠ OF</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">16、JNLE, JG    大于则跳转(有符号数)ZF=0 and SF=OF</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">有符号无符号的区别：</span><br><span class="line"></span><br><span class="line">CMP AL,CL</span><br><span class="line">JG 0x12345678</span><br><span class="line">JA 0x12345678</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;位运算&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#位运算&quot;&gt;&lt;/a&gt; 位运算&lt;/h3&gt;
&lt;h4 id=&quot;与运算&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#与运算&quot;&gt;&lt;/a&gt; 与运算&lt;/h4&gt;
&lt;p&gt;&lt;
      
    
    </summary>
    
      <category term="逆向工程" scheme="https://xiaowuyoucy.github.io/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>远程线程注入DLL方法</title>
    <link href="https://xiaowuyoucy.github.io/2023/12/05/%E8%BF%9C%E7%A8%8B%E7%BA%BF%E7%A8%8B%E6%B3%A8%E5%85%A5DLL%E6%96%B9%E6%B3%95/"/>
    <id>https://xiaowuyoucy.github.io/2023/12/05/远程线程注入DLL方法/</id>
    <published>2023-12-04T16:43:56.000Z</published>
    <updated>2023-12-06T16:05:19.057Z</updated>
    
    <content type="html"><![CDATA[<p>原理：在目标进程中开启一个线程以执行LoadLibrary(Ex)操作。<br>步骤：<br>(1)   提升加载进程的权限<br>(1)   用VirtualAllocEx函数在远程进程的地址空间中分配一块内存存放参数<br>(2)   用WriteProcessMemory函数把DLL的路径名复制到(1)步骤分配的内存中<br>(3)   用GetProcAddress获取LoadLibrary(Ex)函数的实际地址<br>(4)   用CreateRemoteThread函数在远程进程中创建一个线程，让新线程调用正确的LoadLibrary(Ex)函数并在参数中传入(1)步骤分配的内存地址<br>(5)   用GetProcAddress获取FreeLibrary函数的实际地址<br>(6)   用CreateRemoteThread函数在远程进程中创建一个线程,让新线程调用正确的FreeLibrary函数并在参数中传入远程DLL的HMODULE<br>(7)   用VirtualFreeEx来释放(1)步骤分配的内存</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br></pre></td><td class="code"><pre><span class="line">// 远程线程注入DLL</span><br><span class="line">#include &lt;windows.h&gt;</span><br><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line"></span><br><span class="line">#define INJECTDLLNAME &quot;HookAPIDLL1.dll&quot;</span><br><span class="line"></span><br><span class="line">//提升当前进程权限</span><br><span class="line">void AdjustProcessTokenPrivilege()</span><br><span class="line">&#123;</span><br><span class="line">LUID luidTmp;</span><br><span class="line">HANDLE hToken;</span><br><span class="line">TOKEN_PRIVILEGES tkp;</span><br><span class="line">if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;hToken))</span><br><span class="line">&#123;</span><br><span class="line">OutputDebugString(&quot;AdjustProcessTokenPrivilege OpenProcessToken Failed ! \n&quot;);</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line">if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &amp;luidTmp))</span><br><span class="line">&#123;</span><br><span class="line">OutputDebugString(&quot;AdjustProcessTokenPrivilege LookupPrivilegeValue Failed ! \n&quot;);</span><br><span class="line">CloseHandle(hToken);</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line">tkp.PrivilegeCount = 1;</span><br><span class="line">tkp.Privileges[0].Luid = luidTmp;</span><br><span class="line">tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;</span><br><span class="line">if (!AdjustTokenPrivileges(hToken, FALSE, &amp;tkp, sizeof(tkp), NULL, NULL))</span><br><span class="line">&#123;</span><br><span class="line">OutputDebugString(&quot;AdjustProcessTokenPrivilege AdjustTokenPrivileges Failed ! \n&quot;);</span><br><span class="line">CloseHandle(hToken);</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">void GetExePath(char* pExePath) </span><br><span class="line">&#123;     </span><br><span class="line">int  pathlen = GetModuleFileName(NULL, pExePath, MAX_PATH);    </span><br><span class="line">while(1)     </span><br><span class="line">&#123;         </span><br><span class="line">if(pExePath[pathlen--]==&apos;\\&apos;)             </span><br><span class="line">break;     </span><br><span class="line">&#125;     </span><br><span class="line">pExePath[++pathlen] = 0;     </span><br><span class="line">&#125;   </span><br><span class="line"></span><br><span class="line">int main(int argc,char **argv)</span><br><span class="line">&#123;</span><br><span class="line">CHAR* pDllName = NULL;</span><br><span class="line">HANDLE hProcess = NULL;</span><br><span class="line">DWORD dwProcessId = 0;</span><br><span class="line">LPVOID lpStartAddress = NULL;</span><br><span class="line">LPVOID lpParaAddress = NULL;</span><br><span class="line">HANDLE hRemoteThread = NULL;</span><br><span class="line">DWORD dwExitHandle = 0;</span><br><span class="line"></span><br><span class="line">// 获取一下DLL的路径</span><br><span class="line">CHAR tmpPath[MAX_PATH] = &#123;0&#125;;</span><br><span class="line">GetExePath(tmpPath);</span><br><span class="line">strcat(tmpPath,&quot;\\&quot;);</span><br><span class="line">strcat(tmpPath,INJECTDLLNAME);</span><br><span class="line">pDllName = tmpPath;</span><br><span class="line">printf(&quot;注入的DLL路径:%s \r\n&quot;, pDllName);</span><br><span class="line"></span><br><span class="line">printf(&quot;输入要注入的进程ID:&quot;);</span><br><span class="line">scanf(&quot;%d&quot;, &amp;dwProcessId);</span><br><span class="line"></span><br><span class="line">// 提升当前进程的权限</span><br><span class="line">AdjustProcessTokenPrivilege();</span><br><span class="line">// 打开目标进程</span><br><span class="line">hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);</span><br><span class="line"></span><br><span class="line">// 为目标进程分配内存</span><br><span class="line">lpParaAddress = VirtualAllocEx(hProcess, NULL, strlen(pDllName), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);</span><br><span class="line"></span><br><span class="line">// 将要注入的DLL路径写入到目标进程</span><br><span class="line">WriteProcessMemory(hProcess, lpParaAddress, pDllName, strlen(pDllName), 0);</span><br><span class="line"></span><br><span class="line">// 获取LoadLibrary的地址</span><br><span class="line">lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(&quot;kernel32&quot;),&quot;LoadLibraryA&quot;);</span><br><span class="line"></span><br><span class="line">// 创建远程线程执行注入DLL操作</span><br><span class="line">hRemoteThread = CreateRemoteThread(hProcess,NULL,0,lpStartAddress,lpParaAddress,0,NULL);</span><br><span class="line">printf(&quot;%d\n&quot;, GetLastError());</span><br><span class="line">// 等待其加载完毕</span><br><span class="line">WaitForSingleObject(hRemoteThread,INFINITE);</span><br><span class="line">CloseHandle(hRemoteThread);</span><br><span class="line"></span><br><span class="line">system(&quot;pause&quot;);</span><br><span class="line"></span><br><span class="line">// 获取GetModuleHandleA的地址</span><br><span class="line">lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(&quot;kernel32&quot;),&quot;GetModuleHandleA&quot;);</span><br><span class="line">// 创建远程线程执行GetModuleHandleA操作</span><br><span class="line">hRemoteThread = CreateRemoteThread(hProcess,NULL,0,lpStartAddress,lpParaAddress,0,NULL);</span><br><span class="line">printf(&quot;%d\n&quot;, GetLastError());</span><br><span class="line">WaitForSingleObject(hRemoteThread,INFINITE); </span><br><span class="line">GetExitCodeThread(hRemoteThread,&amp;dwExitHandle);//线程的结束码即为Dll模块儿的句柄 </span><br><span class="line">CloseHandle(hRemoteThread); </span><br><span class="line"></span><br><span class="line">// 获取FreeLibrary的地址</span><br><span class="line">lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(&quot;kernel32&quot;),&quot;FreeLibrary&quot;);</span><br><span class="line"></span><br><span class="line">// 创建远程线程执行卸载DLL操作</span><br><span class="line">hRemoteThread = CreateRemoteThread(hProcess,NULL,0,lpStartAddress,(LPVOID)dwExitHandle,0,NULL);</span><br><span class="line"></span><br><span class="line">// 等待其卸载完毕</span><br><span class="line">WaitForSingleObject(hRemoteThread,INFINITE);</span><br><span class="line">CloseHandle(hRemoteThread);</span><br><span class="line"></span><br><span class="line">// 释放资源</span><br><span class="line">VirtualFreeEx(hProcess,lpParaAddress,0,MEM_RELEASE);</span><br><span class="line">CloseHandle(hProcess);</span><br><span class="line"></span><br><span class="line">system(&quot;pause&quot;);</span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="openprocesstoken"><a class="markdownIt-Anchor" href="#openprocesstoken"></a> OpenProcessToken</h4><p><code>OpenProcessToken</code> 是 Windows API 中的一个函数，用于打开与指定进程关联的访问令牌（Access Token）。以下是对该函数的详细描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * @brief 打开指定进程的访问令牌</span><br><span class="line"> *</span><br><span class="line"> * 此函数用于打开与指定进程关联的访问令牌，以便后续对令牌的操作。</span><br><span class="line"> *</span><br><span class="line"> * @param hProcess 目标进程的句柄</span><br><span class="line"> * @param dwDesiredAccess 指定访问令牌的访问权限</span><br><span class="line"> * @param phToken 接收打开的访问令牌的句柄</span><br><span class="line"> *</span><br><span class="line"> * @return 如果函数成功，返回非零值；如果函数失败，返回零。要获取扩展的错误信息，可以调用 GetLastError 函数。</span><br><span class="line"> *</span><br><span class="line"> * @note 为了成功调用此函数，调用进程必须具有 PROCESS_QUERY_INFORMATION 或 PROCESS_QUERY_LIMITED_INFORMATION 权限。</span><br><span class="line"> */</span><br><span class="line">BOOL OpenProcessToken(</span><br><span class="line">  HANDLE  ProcessHandle,          // 目标进程的句柄</span><br><span class="line">  DWORD   DesiredAccess,         // 指定访问令牌的访问权限</span><br><span class="line">  PHANDLE TokenHandle            // 接收打开的访问令牌的句柄</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">参数说明：</span><br><span class="line"></span><br><span class="line">ProcessHandle：目标进程的句柄，该句柄必须具有 PROCESS_QUERY_INFORMATION 或 PROCESS_QUERY_LIMITED_INFORMATION 权限。</span><br><span class="line">DesiredAccess：指定访问令牌的访问权限，可以使用常量如 TOKEN_READ，也可以通过按位 OR 运算组合多个权限。</span><br><span class="line">TokenHandle：用于接收打开的访问令牌的句柄的指针。</span><br><span class="line">返回值说明：</span><br><span class="line"></span><br><span class="line">如果函数成功，返回非零值。</span><br><span class="line">如果函数失败，返回零。要获取扩展的错误信息，可以调用 GetLastError 函数。</span><br></pre></td></tr></table></figure><h4 id="getcurrentprocess"><a class="markdownIt-Anchor" href="#getcurrentprocess"></a> GetCurrentProcess</h4><p><code>GetCurrentProcess</code> 是 Windows 操作系统中的一个函数，通常在 Windows API 中使用。该函数用于获取当前执行代码的进程句柄（handle）。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">HANDLE GetCurrentProcess(void);</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">返回一个 HANDLE 类型的值，代表当前进程的句柄。HANDLE 是一个通用的操作系统句柄类型，在 Windows 中用于表示各种内核对象，如进程、线程、文件等。在这种情况下，返回的 HANDLE 是当前进程的句柄。</span><br></pre></td></tr></table></figure><h4 id="lookupprivilegevalue"><a class="markdownIt-Anchor" href="#lookupprivilegevalue"></a> LookupPrivilegeValue</h4><p><code>LookupPrivilegeValue</code> 是 Windows 操作系统中的一个函数，用于查找指定系统的特权（privilege）的本地名称和权限值。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">BOOL LookupPrivilegeValueA(</span><br><span class="line">    LPCSTR lpSystemName,</span><br><span class="line">    LPCSTR lpName,</span><br><span class="line">    PLUID  lpLuid</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line"></span><br><span class="line">lpSystemName：指向包含系统名的字符串的指针，一般为 NULL，表示本地计算机。</span><br><span class="line">lpName：指向包含特权名的字符串的指针，例如 &quot;SeShutdownPrivilege&quot;。</span><br><span class="line">lpLuid：指向 LUID 结构的指针，用于接收查找到的特权的本地唯一标识符。</span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回非零值；如果函数调用失败，返回零。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="closehandle"><a class="markdownIt-Anchor" href="#closehandle"></a> CloseHandle</h4><p><code>CloseHandle</code> 是 Windows 操作系统中的一个函数，用于关闭一个打开的对象句柄。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">BOOL CloseHandle(</span><br><span class="line">    HANDLE hObject</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line"></span><br><span class="line">hObject：要关闭的对象句柄。</span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回非零值；如果函数调用失败，返回零。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="adjusttokenprivileges"><a class="markdownIt-Anchor" href="#adjusttokenprivileges"></a> AdjustTokenPrivileges</h4><p><code>AdjustTokenPrivileges</code> 是 Windows 操作系统中的一个函数，用于修改访问令牌（access token）的权限。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">BOOL AdjustTokenPrivileges(</span><br><span class="line">    HANDLE       TokenHandle,</span><br><span class="line">    BOOL         DisableAllPrivileges,</span><br><span class="line">    PTOKEN_PRIVILEGES NewState,</span><br><span class="line">    DWORD        BufferLength,</span><br><span class="line">    PTOKEN_PRIVILEGES PreviousState,</span><br><span class="line">    PDWORD       ReturnLength</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">TokenHandle：要修改权限的令牌的句柄。</span><br><span class="line">DisableAllPrivileges：指定是否禁用所有权限。如果为 TRUE，将禁用所有权限；如果为 FALSE，将启用或禁用由 NewState 参数指定的权限。</span><br><span class="line">NewState：指向 TOKEN_PRIVILEGES 结构的指针，该结构包含了要设置的权限信息。</span><br><span class="line">BufferLength：指定 NewState 参数指向的缓冲区的大小。</span><br><span class="line">PreviousState：可选参数，指向 TOKEN_PRIVILEGES 结构的指针，用于接收修改之前的权限信息。</span><br><span class="line">ReturnLength：可选参数，用于接收实际写入 PreviousState 缓冲区的字节数。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回非零值；如果函数调用失败，返回零。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="getmodulefilename"><a class="markdownIt-Anchor" href="#getmodulefilename"></a> GetModuleFileName</h4><p><code>GetModuleFileName</code> 是 Windows 操作系统中的一个函数，用于获取指定模块的文件名。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">DWORD GetModuleFileNameA(</span><br><span class="line">    HMODULE hModule,</span><br><span class="line">    LPSTR   lpFilename,</span><br><span class="line">    DWORD   nSize</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line"></span><br><span class="line">hModule：指定要获取文件名的模块的句柄。如果为 NULL，表示获取当前执行代码的模块文件名。</span><br><span class="line">lpFilename：指向一个缓冲区的指针，用于接收模块文件名的字符串。</span><br><span class="line">nSize：指定缓冲区的大小，以字节为单位。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回字符串的长度，不包括终止 null 字符；如果函数调用失败，返回零。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="openprocess"><a class="markdownIt-Anchor" href="#openprocess"></a> OpenProcess</h4><p><code>OpenProcess</code> 是 Windows 操作系统中的一个函数，用于打开一个已存在的进程，并返回该进程的句柄。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">HANDLE OpenProcess(</span><br><span class="line">    DWORD dwDesiredAccess,</span><br><span class="line">    BOOL bInheritHandle,</span><br><span class="line">    DWORD dwProcessId</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">dwDesiredAccess：指定打开进程的访问权限。这是一个常量，如 PROCESS_ALL_ACCESS 表示完全访问权限。</span><br><span class="line">bInheritHandle：指定返回的句柄是否可被子进程继承。一般设置为 FALSE。</span><br><span class="line">dwProcessId：指定要打开的进程的标识符（ID）。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回进程的句柄；如果函数调用失败，返回 NULL。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="virtualallocex"><a class="markdownIt-Anchor" href="#virtualallocex"></a> VirtualAllocEx</h4><p><code>VirtualAllocEx</code> 是 Windows 操作系统中的一个函数，用于在指定的远程进程中分配内存空间。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">LPVOID VirtualAllocEx(</span><br><span class="line">    HANDLE hProcess,</span><br><span class="line">    LPVOID lpAddress,</span><br><span class="line">    SIZE_T dwSize,</span><br><span class="line">    DWORD  flAllocationType,</span><br><span class="line">    DWORD  flProtect</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">hProcess：要分配内存的目标进程的句柄。</span><br><span class="line">lpAddress：指定分配内存的起始地址，如果为 NULL，由系统决定分配的地址。</span><br><span class="line">dwSize：指定要分配的内存大小，以字节为单位。</span><br><span class="line">flAllocationType：指定内存分配的类型，例如 MEM_COMMIT 表示提交内存，MEM_RESERVE 表示保留内存。</span><br><span class="line">flProtect：指定内存区域的访问权限，例如 PAGE_READWRITE 表示可读写的内存。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回分配的内存的起始地址；如果函数调用失败，返回 NULL。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="writeprocessmemory"><a class="markdownIt-Anchor" href="#writeprocessmemory"></a> WriteProcessMemory</h4><p><code>WriteProcessMemory</code> 是 Windows 操作系统中的一个函数，用于向指定的远程进程写入数据到指定的内存地址。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">BOOL WriteProcessMemory(</span><br><span class="line">    HANDLE  hProcess,</span><br><span class="line">    LPVOID  lpBaseAddress,</span><br><span class="line">    LPCVOID lpBuffer,</span><br><span class="line">    SIZE_T  nSize,</span><br><span class="line">    SIZE_T  *lpNumberOfBytesWritten</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">hProcess：要写入数据的目标进程的句柄。</span><br><span class="line">lpBaseAddress：指定要写入数据的远程进程的内存地址。</span><br><span class="line">lpBuffer：指向包含要写入数据的缓冲区的指针。</span><br><span class="line">nSize：指定要写入数据的字节数。</span><br><span class="line">lpNumberOfBytesWritten：指向变量的指针，用于接收成功写入的字节数。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回非零值；如果函数调用失败，返回零。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="getmodulehandle"><a class="markdownIt-Anchor" href="#getmodulehandle"></a> GetModuleHandle</h4><p><code>GetModuleHandle</code> 是 Windows 操作系统中的一个函数，用于获取指定模块的句柄。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">HMODULE GetModuleHandleA(</span><br><span class="line">    LPCSTR lpModuleName</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">lpModuleName：指定要获取句柄的模块的名称。如果为 NULL，表示获取当前执行代码的模块句柄。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回模块的句柄；如果函数调用失败，返回 NULL。可以使用 GetLastError 函数获取更多错误信息</span><br></pre></td></tr></table></figure><h4 id="getprocaddress"><a class="markdownIt-Anchor" href="#getprocaddress"></a> GetProcAddress</h4><p><code>GetProcAddress</code> 是 Windows 操作系统中的一个函数，用于获取指定动态链接库（DLL）中导出函数或变量的地址。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">FARPROC GetProcAddress(</span><br><span class="line">    HMODULE hModule,</span><br><span class="line">    LPCSTR lpProcName</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">hModule：指定包含导出函数或变量的 DLL 的句柄。可以使用 LoadLibrary 或 GetModuleHandle 获取 DLL 的句柄。</span><br><span class="line">lpProcName：指定要获取地址的导出函数或变量的名称。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回导出函数或变量的地址；如果函数调用失败，返回 NULL。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="createremotethread"><a class="markdownIt-Anchor" href="#createremotethread"></a> CreateRemoteThread</h4><p><code>CreateRemoteThread</code> 是 Windows 操作系统中的一个函数，用于在远程进程中创建一个新的线程。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">HANDLE CreateRemoteThread(</span><br><span class="line">    HANDLE hProcess,</span><br><span class="line">    LPSECURITY_ATTRIBUTES lpThreadAttributes,</span><br><span class="line">    SIZE_T dwStackSize,</span><br><span class="line">    LPTHREAD_START_ROUTINE lpStartAddress,</span><br><span class="line">    LPVOID lpParameter,</span><br><span class="line">    DWORD dwCreationFlags,</span><br><span class="line">    LPDWORD lpThreadId</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line">hProcess：指定目标进程的句柄，新线程将在该进程中创建。</span><br><span class="line">lpThreadAttributes：指定线程的安全性，通常设置为 NULL。</span><br><span class="line">dwStackSize：指定新线程的堆栈大小，通常设置为 0 使用默认堆栈大小。</span><br><span class="line">lpStartAddress：指定新线程的起始地址，即线程将从该地址开始执行。</span><br><span class="line">lpParameter：传递给新线程的参数，可以为 NULL。</span><br><span class="line">dwCreationFlags：指定线程的创建标志，通常设置为 0。</span><br><span class="line">lpThreadId：指向变量的指针，用于接收新线程的标识符。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回新线程的句柄；如果函数调用失败，返回 NULL。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="getlasterror"><a class="markdownIt-Anchor" href="#getlasterror"></a> GetLastError</h4><p><code>GetLastError</code> 是 Windows 操作系统中的一个函数，用于获取最近一次调用发生错误的错误代码。以下是其 C 语言描述：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">DWORD GetLastError(void);</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">返回一个表示错误代码的 DWORD 类型的值。如果函数调用成功，返回的值通常是一个非零的错误代码。如果函数调用成功，返回的值通常是零。</span><br></pre></td></tr></table></figure><h4 id="waitforsingleobject"><a class="markdownIt-Anchor" href="#waitforsingleobject"></a> WaitForSingleObject</h4><p><code>WaitForSingleObject</code> 是 Windows 操作系统中的一个函数，用于等待一个对象的状态变为 signaled。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">DWORD WaitForSingleObject(</span><br><span class="line">    HANDLE hHandle,</span><br><span class="line">    DWORD  dwMilliseconds</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">参数：</span><br><span class="line"></span><br><span class="line">hHandle：要等待的对象的句柄。</span><br><span class="line">dwMilliseconds：指定等待的时间，以毫秒为单位。如果为 INFINITE，则表示无限等待。</span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回等待对象的状态。可能的返回值有：</span><br><span class="line"></span><br><span class="line">WAIT_OBJECT_0：对象的状态变为 signaled。</span><br><span class="line">WAIT_TIMEOUT：等待超时。</span><br><span class="line">WAIT_FAILED：函数调用失败，可以使用 GetLastError 获取更多错误信息。</span><br></pre></td></tr></table></figure><h4 id="virtualfreeex"><a class="markdownIt-Anchor" href="#virtualfreeex"></a> VirtualFreeEx</h4><p><code>VirtualFreeEx</code> 是 Windows 操作系统中的一个函数，用于释放在指定的远程进程中分配的虚拟内存空间。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">BOOL VirtualFreeEx(</span><br><span class="line">    HANDLE hProcess,</span><br><span class="line">    LPVOID lpAddress,</span><br><span class="line">    SIZE_T dwSize,</span><br><span class="line">    DWORD  dwFreeType</span><br><span class="line">);</span><br><span class="line">参数：</span><br><span class="line">hProcess：目标进程的句柄，其中分配了虚拟内存空间。</span><br><span class="line">lpAddress：要释放的虚拟内存的起始地址。</span><br><span class="line">dwSize：要释放的虚拟内存的大小，以字节为单位。</span><br><span class="line">dwFreeType：释放类型，可以是以下值之一：</span><br><span class="line">MEM_DECOMMIT：释放虚拟内存的物理存储，但保留内存中的地址空间。</span><br><span class="line">MEM_RELEASE：释放虚拟内存的物理存储和地址空间。</span><br><span class="line"></span><br><span class="line">返回值：</span><br><span class="line">如果函数调用成功，返回非零值；如果函数调用失败，返回零。可以使用 GetLastError 函数获取更多错误信息。</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;原理：在目标进程中开启一个线程以执行LoadLibrary(Ex)操作。&lt;br&gt;
步骤：&lt;br&gt;
(1)   提升加载进程的权限&lt;br&gt;
(1)   用VirtualAllocEx函数在远程进程的地址空间中分配一块内存存放参数&lt;br&gt;
(2)   用WriteProcess
      
    
    </summary>
    
      <category term="windows程序设计2" scheme="https://xiaowuyoucy.github.io/categories/windows%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A12/"/>
    
    
  </entry>
  
  <entry>
    <title>使用钩子注入DLL</title>
    <link href="https://xiaowuyoucy.github.io/2023/12/04/%E4%BD%BF%E7%94%A8%E9%92%A9%E5%AD%90%E6%B3%A8%E5%85%A5DLL/"/>
    <id>https://xiaowuyoucy.github.io/2023/12/04/使用钩子注入DLL/</id>
    <published>2023-12-04T14:47:56.000Z</published>
    <updated>2023-12-06T16:05:24.927Z</updated>
    
    <content type="html"><![CDATA[<p>原理：通过SetWindowsHookEx函数将DLL注入到进程的地址空间中，最后一个参数dwThreadId指向的是被注入进程内的某个线程ID。<br>(1)    进程A对线程dwThread挂键盘钩子<br>(2)    线程dwThreadId获取到的键盘消息会实现被钩子拦截<br>(3)    系统检查hMod指向的DLL是否已被载入到线程dwThreadId所在的进程地址空间中，若否，则载入。这时，假设DLL被载入到进程B<br>(4)    系统在进程B的地址空间中调用lpfn函数</p><p>钩子的回调函数格式</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">LRESULT CALLBACK FunProc(</span><br><span class="line">int code,       // hook code</span><br><span class="line">WPARAM wParam,  // virtual-key code</span><br><span class="line">LPARAM lParam   // keystroke-message information</span><br><span class="line">)</span><br></pre></td></tr></table></figure><p>消息框</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/*</span><br><span class="line"> * @brief 显示一个消息框，并等待用户的响应。</span><br><span class="line"> * </span><br><span class="line"> * @param hwndParent 父窗口的句柄，如果为nullptr，则消息框将居中显示在屏幕上。</span><br><span class="line"> * @param lpText 要显示的消息文本。</span><br><span class="line"> * @param lpCaption 消息框标题。</span><br><span class="line"> * @param uType 消息框的类型，可以是以下值的组合：</span><br><span class="line"> *   - MB_ABORTRETRYIGNORE</span><br><span class="line"> *   - MB_CANCELTRYCONTINUE</span><br><span class="line"> *   - MB_HELP</span><br><span class="line"> *   - MB_OK</span><br><span class="line"> *   - MB_OKCANCEL</span><br><span class="line"> *   - MB_RETRYCANCEL</span><br><span class="line"> *   - MB_YESNO</span><br><span class="line"> *   - MB_YESNOCANCEL</span><br><span class="line"> * @return 用户的响应。可能的值包括：</span><br><span class="line"> *   - IDABORT</span><br><span class="line"> *   - IDCANCEL</span><br><span class="line"> *   - IDCONTINUE</span><br><span class="line"> *   - IDIGNORE</span><br><span class="line"> *   - IDNO</span><br><span class="line"> *   - IDOK</span><br><span class="line"> *   - IDRETRY</span><br><span class="line"> *   - IDTRYAGAIN</span><br><span class="line"> *   - IDYES</span><br><span class="line"> */</span><br><span class="line">int MessageBox(</span><br><span class="line">    HWND hwndParent,</span><br><span class="line">    LPCTSTR lpText,</span><br><span class="line">    LPCTSTR lpCaption,</span><br><span class="line">    UINT uType</span><br><span class="line">);</span><br></pre></td></tr></table></figure><h4 id="callnexthookex"><a class="markdownIt-Anchor" href="#callnexthookex"></a> CallNextHookEx</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * @brief 调用下一个钩子程序在钩子链中。</span><br><span class="line"> * </span><br><span class="line"> * @param hhk 钩子句柄，由SetWindowsHookEx函数返回。</span><br><span class="line"> * @param nCode 钩子代码，表示事件类型。具体取值取决于使用的钩子类型。</span><br><span class="line"> * @param wParam 与事件相关的附加信息，具体含义取决于使用的钩子类型。</span><br><span class="line"> * @param lParam 与事件相关的附加信息，具体含义取决于使用的钩子类型。</span><br><span class="line"> * @return 下一个钩子程序的返回值，具体含义取决于使用的钩子类型。</span><br><span class="line"> */</span><br><span class="line">LRESULT CallNextHookEx(</span><br><span class="line">    HHOOK hhk,</span><br><span class="line">    int nCode,</span><br><span class="line">    WPARAM wParam,</span><br><span class="line">    LPARAM lParam</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">CallNextHookEx是Windows API中用于调用下一个钩子程序的函数。在使用钩子函数时，它允许当前的钩子程序调用下一个钩子程序，以确保整个钩子链能够正常运行。</span><br><span class="line"></span><br><span class="line">参数说明：</span><br><span class="line"></span><br><span class="line">hhk：钩子句柄，由 SetWindowsHookEx 函数返回。</span><br><span class="line">nCode：钩子代码，表示事件类型。具体取值取决于使用的钩子类型。</span><br><span class="line">wParam：与事件相关的附加信息，具体含义取决于使用的钩子类型。</span><br><span class="line">lParam：与事件相关的附加信息，具体含义取决于使用的钩子类型。</span><br><span class="line">返回值：</span><br><span class="line">CallNextHookEx 的返回值取决于使用的钩子类型，通常是下一个钩子程序的返回值。</span><br></pre></td></tr></table></figure><h4 id="findwindow"><a class="markdownIt-Anchor" href="#findwindow"></a> FindWindow</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * @brief 根据窗口类名和窗口标题查找顶层窗口的句柄。</span><br><span class="line"> * </span><br><span class="line"> * @param lpClassName 窗口类名，如果为NULL，则匹配所有类名。</span><br><span class="line"> * @param lpWindowName 窗口标题，如果为NULL，则匹配所有标题。</span><br><span class="line"> * @return 找到的窗口的句柄，如果未找到则为NULL。</span><br><span class="line"> */</span><br><span class="line">HWND FindWindow(</span><br><span class="line">    LPCSTR lpClassName,</span><br><span class="line">    LPCSTR lpWindowName</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">lpClassName：窗口类名，如果为NULL，则匹配所有类名。</span><br><span class="line">lpWindowName：窗口标题，如果为NULL，则匹配所有标题。</span><br><span class="line">返回值：找到的窗口的句柄，如果未找到则为NULL。</span><br></pre></td></tr></table></figure><h4 id="getwindowthreadprocessid"><a class="markdownIt-Anchor" href="#getwindowthreadprocessid"></a> GetWindowThreadProcessId</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * @brief 获取指定窗口的线程标识符和进程标识符。</span><br><span class="line"> * </span><br><span class="line"> * @param hWnd 目标窗口的句柄。</span><br><span class="line"> * @param lpdwProcessId 接收进程标识符的指针，如果为NULL则不检索。</span><br><span class="line"> * @return 返回目标窗口所在的线程标识符。</span><br><span class="line"> */</span><br><span class="line">DWORD GetWindowThreadProcessId(</span><br><span class="line">    HWND hWnd,</span><br><span class="line">    LPDWORD lpdwProcessId</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">hWnd：目标窗口的句柄。</span><br><span class="line">lpdwProcessId：接收进程标识符的指针。如果为NULL，则不检索进程标识符。</span><br><span class="line">返回值：返回目标窗口所在的线程标识符。</span><br><span class="line">该函数允许您获取与指定窗口相关联的线程标识符和进程标识符。可以使用这些标识符来进行诸如线程注入和进程间通信等操作。</span><br></pre></td></tr></table></figure><h4 id="setwindowshookex"><a class="markdownIt-Anchor" href="#setwindowshookex"></a> SetWindowsHookEx</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * @brief 安装一个钩子函数来监视指定类型的事件。</span><br><span class="line"> * </span><br><span class="line"> * @param idHook 要安装的钩子类型。</span><br><span class="line"> * @param lpfn 钩子过程的地址。</span><br><span class="line"> * @param hMod 包含钩子过程的 DLL 的句柄。如果为NULL，则将使用当前进程的句柄。</span><br><span class="line"> * @param dwThreadId 与要监视的事件相关联的线程的标识符。如果为0，则表示安装全局钩子。</span><br><span class="line"> * @return 成功时返回钩子的句柄，失败时返回NULL。</span><br><span class="line"> */</span><br><span class="line">HHOOK SetWindowsHookEx(</span><br><span class="line">    int idHook,</span><br><span class="line">    HOOKPROC lpfn,</span><br><span class="line">    HINSTANCE hMod,</span><br><span class="line">    DWORD dwThreadId</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">其中idHook参数可以取如下常量：</span><br><span class="line">WH_CALLWNDPROC     //窗口钩子，当系统向目标窗口发送消息时将触发此钩子</span><br><span class="line">WH_CALLWNDPROCRET     //窗口钩子，当窗口处理完消息后将触发此钩子</span><br><span class="line">WH_CBT   //当Windows激活、产生、释放（关闭）、最小化、最大化或改变窗口时都将触发此事件</span><br><span class="line">WH_DEBUG    //调试钩子</span><br><span class="line">WH_GETMESSAGE    //当往消息队列中增加一个消息时将触发此钩子</span><br><span class="line">WH_JOURNALPLAYBACK     //回放钩子，可以用于播放已记录的鼠标和键盘的操作</span><br><span class="line">WH_JOURNALRECORD     //记录钩子，可以用于记录鼠标和键盘的操作，木马程序可以使用此钩子窃取受控方在屏幕中敲入的密码</span><br><span class="line">WH_KEYBOARD     //当敲击键盘时将触发此钩子</span><br><span class="line">WH_MOUSE    //当有鼠标操作时将触发此钩子</span><br><span class="line">WH_MSGFILTER   //消息过滤钩子</span><br><span class="line">WH_SHELL   //Shell钩子</span><br><span class="line">WH_SYSMSGFILTER    //系统消息过滤钩子</span><br><span class="line">其他特定类型的钩子，具体取决于您的需求。</span><br><span class="line"></span><br><span class="line">lpfn：指向钩子过程的函数指针。此函数在发生事件时被调用。</span><br><span class="line">hMod：包含钩子过程的 DLL 的句柄。如果为NULL，则将使用当前进程的句柄。</span><br><span class="line">dwThreadId：与要监视的事件相关联的线程的标识符。如果为0，则表示安装全局钩子，针对所有线程的事件。</span><br><span class="line">返回值：成功时返回钩子的句柄，失败时返回NULL。</span><br><span class="line">SetWindowsHookEx函数用于安装一个钩子，允许您监视并拦截指定类型的事件。成功安装后，钩子过程将在事件发生时被调用。通常，钩子过程是在DLL中实现的，以便可以在不同进程间共享。</span><br></pre></td></tr></table></figure><h4 id="unhookwindowshookex"><a class="markdownIt-Anchor" href="#unhookwindowshookex"></a> UnhookWindowsHookEx</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">/**</span><br><span class="line"> * @brief 卸载之前安装的钩子。</span><br><span class="line"> * </span><br><span class="line"> * @param hhk 先前安装的钩子的句柄。</span><br><span class="line"> * @return 如果成功，返回非零值；如果失败，返回零。</span><br><span class="line"> */</span><br><span class="line">BOOL UnhookWindowsHookEx(</span><br><span class="line">    HHOOK hhk</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">hhk：先前安装的钩子的句柄，由 SetWindowsHookEx 返回。</span><br><span class="line">返回值：如果成功，返回非零值；如果失败，返回零。</span><br><span class="line">UnhookWindowsHookEx函数用于卸载之前通过 SetWindowsHookEx 安装的钩子。在不再需要钩子时，调用此函数以确保释放相关资源，并停止钩子过程的调用。成功卸载后，钩子句柄将不再有效。</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;Windows.h&gt;</span><br><span class="line"></span><br><span class="line">LRESULT CALLBACK FunProc(</span><br><span class="line">int code,       // hook code</span><br><span class="line">WPARAM wParam,  // virtual-key code</span><br><span class="line">LPARAM lParam   // keystroke-message information</span><br><span class="line">)</span><br><span class="line">&#123;</span><br><span class="line">MessageBox(NULL,&quot;KEY PRESS&quot;,&quot;hook inject&quot;,MB_OK);</span><br><span class="line">return CallNextHookEx(0,code,wParam,lParam);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">HHOOK g_HookHandle;</span><br><span class="line"></span><br><span class="line">__declspec(dllexport) void SetHook()</span><br><span class="line">&#123;</span><br><span class="line">DWORD tid = 0;</span><br><span class="line">// 获取窗口句柄</span><br><span class="line">HWND gameh = FindWindow(NULL,&quot;test.txt - 记事本&quot;);</span><br><span class="line">if (gameh == 0)</span><br><span class="line">&#123;</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line">// 获取创建这个窗口的线程</span><br><span class="line">tid = GetWindowThreadProcessId(gameh,NULL);</span><br><span class="line">// 安装钩子到指定线程 WH_KEYBOARD 键盘钩子</span><br><span class="line">g_HookHandle = SetWindowsHookEx(WH_KEYBOARD, FunProc, GetModuleHandle(&quot;HOOKInject.dll&quot;),tid);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">__declspec(dllexport) void UnHook()  </span><br><span class="line">&#123;  </span><br><span class="line">UnhookWindowsHookEx(g_HookHandle);  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;windows.h&gt;</span><br><span class="line"></span><br><span class="line">typedef void (*lpFun)();</span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">HINSTANCE hDll; //DLL句柄 </span><br><span class="line">lpFun SetHook;  //函数指针</span><br><span class="line">lpFun UnHook;   //函数指针</span><br><span class="line">hDll = LoadLibrary(&quot;..\\Debug\\HOOKInject.dll&quot;);</span><br><span class="line">if (hDll != NULL)</span><br><span class="line">&#123;</span><br><span class="line">SetHook = (lpFun)GetProcAddress(hDll, &quot;SetHook&quot;);</span><br><span class="line">UnHook = (lpFun)GetProcAddress(hDll, &quot;UnHook&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">if (SetHook != NULL)</span><br><span class="line">&#123;</span><br><span class="line">SetHook();</span><br><span class="line">&#125;</span><br><span class="line">getchar();</span><br><span class="line">UnHook();</span><br><span class="line">if (hDll != NULL)</span><br><span class="line">&#123;</span><br><span class="line">FreeLibrary(hDll);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;原理：通过SetWindowsHookEx函数将DLL注入到进程的地址空间中，最后一个参数dwThreadId指向的是被注入进程内的某个线程ID。&lt;br&gt;
(1)    进程A对线程dwThread挂键盘钩子&lt;br&gt;
(2)    线程dwThreadId获取到的键盘消息会
      
    
    </summary>
    
      <category term="windows程序设计2" scheme="https://xiaowuyoucy.github.io/categories/windows%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A12/"/>
    
    
  </entry>
  
  <entry>
    <title>动态库与静态库</title>
    <link href="https://xiaowuyoucy.github.io/2023/12/02/%E5%8A%A8%E6%80%81%E5%BA%93%E4%B8%8E%E9%9D%99%E6%80%81%E5%BA%93/"/>
    <id>https://xiaowuyoucy.github.io/2023/12/02/动态库与静态库/</id>
    <published>2023-12-02T14:02:14.000Z</published>
    <updated>2023-12-04T14:42:57.709Z</updated>
    
    <content type="html"><![CDATA[<p>静态库 :链接时候被链接到可执行文件，文件体积较大</p><p>使用静态库需要有头文件和 *.lib文件</p><p>动态库：不被链接进入，动态加载，生成文件体积小</p><p>使用动态库需要有头文件 lib dll或者dll文件</p><p>库的用途：调用不同的库实现不同的功能，实现代码复用</p><h3 id="静态库编写"><a class="markdownIt-Anchor" href="#静态库编写"></a> 静态库编写</h3><p>加上<code>extern &quot;C&quot;</code>代表用C语言实现的函数</p><p>通常C语言写出来的库都比较通用</p><h4 id="头文件xxxh"><a class="markdownIt-Anchor" href="#头文件xxxh"></a> 头文件xxx.h</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">#ifndef LIB_H</span><br><span class="line">#define LIB_H</span><br><span class="line">/*extern &quot;C&quot; */int add(int x,int y);</span><br><span class="line">#endif</span><br></pre></td></tr></table></figure><h4 id="源文件xxxc"><a class="markdownIt-Anchor" href="#源文件xxxc"></a> 源文件xxx.c</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;staticlib.h&quot;</span><br><span class="line"></span><br><span class="line">int add(int x,int y)</span><br><span class="line">&#123;</span><br><span class="line">return x + y;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="动态库编写"><a class="markdownIt-Anchor" href="#动态库编写"></a> 动态库编写</h3><p>加上<code>__stdcall</code>后库中函数的名字会改变</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">#ifndef _DLL_H_</span><br><span class="line">#define _DLL_H_</span><br><span class="line"></span><br><span class="line">#ifdef _EXPORT</span><br><span class="line">#define DECLSPEC  __declspec(dllexport) // 导出 </span><br><span class="line">#else</span><br><span class="line">#define DECLSPEC  __declspec(dllimport) // 导入</span><br><span class="line">#endif</span><br><span class="line"></span><br><span class="line">DECLSPEC  int  add(int x,int y);</span><br><span class="line">DECLSPEC  int __stdcall add2(int x,int y);</span><br><span class="line">#endif // _DLL_H_</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;dll.h&quot;</span><br><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;Windows.h&gt;</span><br><span class="line">int  add(int x,int y)</span><br><span class="line">&#123;</span><br><span class="line">return x + y;</span><br><span class="line">&#125;</span><br><span class="line">int  __stdcall add2(int x,int y)</span><br><span class="line">&#123;</span><br><span class="line">return x + y;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">BOOL APIENTRY DllMain( HANDLE hModule, </span><br><span class="line">DWORD ul_reason_for_call, </span><br><span class="line">LPVOID lpReserved</span><br><span class="line">)</span><br><span class="line">&#123;</span><br><span class="line">switch (ul_reason_for_call)</span><br><span class="line">&#123;</span><br><span class="line">case DLL_PROCESS_ATTACH:</span><br><span class="line">printf(&quot;process attach of dll\r\n&quot;);</span><br><span class="line">break;</span><br><span class="line">case DLL_THREAD_ATTACH:</span><br><span class="line">printf(&quot;thread attach of dll\r\n&quot;);</span><br><span class="line">break;</span><br><span class="line">case DLL_THREAD_DETACH:</span><br><span class="line">printf(&quot;thread detach of dll\r\n&quot;);</span><br><span class="line">break;</span><br><span class="line">case DLL_PROCESS_DETACH:</span><br><span class="line">printf(&quot;process detach of dll\r\n&quot;);</span><br><span class="line">break;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">return TRUE;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="调用静态库和动态库"><a class="markdownIt-Anchor" href="#调用静态库和动态库"></a> 调用静态库和动态库</h3><h4 id="调用静态库"><a class="markdownIt-Anchor" href="#调用静态库"></a> 调用静态库</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;windows.h&gt;</span><br><span class="line">#include &quot;..\staticlib\staticlib.h&quot;</span><br><span class="line"></span><br><span class="line">#pragma comment(lib, &quot;..\\Debug\\staticlib.lib&quot; ) </span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line">// 静态库调用</span><br><span class="line">int c = add(1,2);</span><br><span class="line">printf(&quot;%d\r\n&quot;, c);</span><br><span class="line"></span><br><span class="line">system(&quot;pause&quot;);</span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">//告诉编译器将staticlib.lib链接到本程序中</span><br><span class="line">#pragma comment(lib, &quot;..\\Debug\\staticlib.lib&quot; )</span><br></pre></td></tr></table></figure><p>或者可以在VS中添加</p><p><img src="./images/javawz/image-20231203232614373.png" alt="image-20231203232614373"></p><h4 id="调用动态库"><a class="markdownIt-Anchor" href="#调用动态库"></a> 调用动态库</h4><p>第一种方法隐式调用需要有头文件,lib文件,dll文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;windows.h&gt;</span><br><span class="line">#include &quot;..\dll\dll.h&quot;</span><br><span class="line">#pragma comment(lib, &quot;..\\Debug\\dll.lib&quot; )</span><br><span class="line"></span><br><span class="line">typedef int (*lpAddFun)(int, int);</span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">// 隐式调用</span><br><span class="line"> int c = add(1,2);</span><br><span class="line"> printf(&quot;%d\r\n&quot;, c);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">system(&quot;pause&quot;);</span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>第二种方法只需要有dll文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;windows.h&gt;</span><br><span class="line">#include &quot;..\dll\dll.h&quot;</span><br><span class="line">#pragma comment(lib, &quot;..\\Debug\\dll.lib&quot; )</span><br><span class="line"></span><br><span class="line">typedef int (__stdcall *lpAddFun)(int, int);</span><br><span class="line">typedef int (*lpAddFun2)(int, int);</span><br><span class="line"></span><br><span class="line">int main()</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">// 显示调用DLL</span><br><span class="line">HINSTANCE hDll; //DLL句柄 </span><br><span class="line">lpAddFun addFun; //函数指针</span><br><span class="line">hDll = LoadLibrary(&quot;..\\Debug\\dll.dll&quot;);</span><br><span class="line">if (hDll != NULL)</span><br><span class="line">&#123;</span><br><span class="line">addFun = (lpAddFun)GetProcAddress(hDll, &quot;_add@8&quot;);</span><br><span class="line">//addFun = (lpAddFun)GetProcAddress(hDll, MAKEINTRESOURCE(1));</span><br><span class="line">if (addFun != NULL)</span><br><span class="line">&#123;</span><br><span class="line">int result = addFun(1, 2);</span><br><span class="line">printf(&quot;%d\r\n&quot;, result);</span><br><span class="line">&#125;</span><br><span class="line">FreeLibrary(hDll);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">system(&quot;pause&quot;);</span><br><span class="line">return 0;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如果在函数调用约定使用的是<code>__stdcall</code> ,函数名字就会发生改变</p><p>def文件可以告诉编译器那个函数要作为输出函数</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">LIBRARY dll文件名</span><br><span class="line">EXPORTS// 代表导出</span><br><span class="line">函数名 @ 序号</span><br></pre></td></tr></table></figure><p>例如</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">LIBRARY my.dll</span><br><span class="line">EXPORTS</span><br><span class="line">add @ 1</span><br><span class="line">push @ 3</span><br><span class="line">sub @ 2</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;静态库 :链接时候被链接到可执行文件，文件体积较大&lt;/p&gt;
&lt;p&gt;使用静态库需要有头文件和 *.lib文件&lt;/p&gt;
&lt;p&gt;动态库：不被链接进入，动态加载，生成文件体积小&lt;/p&gt;
&lt;p&gt;使用动态库需要有头文件 lib dll或者dll文件&lt;/p&gt;
&lt;p&gt;库的用途：调用不同的库
      
    
    </summary>
    
      <category term="windows程序设计2" scheme="https://xiaowuyoucy.github.io/categories/windows%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A12/"/>
    
    
  </entry>
  
  <entry>
    <title>重逢悦儿</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/31/%E9%87%8D%E9%80%A2%E6%82%A6%E5%84%BF/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/31/重逢悦儿/</id>
    <published>2023-10-30T21:35:56.000Z</published>
    <updated>2023-10-30T23:45:22.807Z</updated>
    
    <content type="html"><![CDATA[<p>欧阳村，一名丫鬟从小悦儿府上走出。只见她魂不守舍的走着，像是去慌忙的向某个目的地走着。</p><p>就在这时，叶辰使用五行遁出现在那丫鬟身前，只听</p><p>“砰” 一声</p><p>“哎呀，那个不长眼睛的家伙！”</p><p>只见那躺在地上的丫鬟说道</p><p>“姑娘，你没事吧！”</p><p>叶辰搀扶着那丫鬟说道</p><p>“能没事吗？你这家伙怎么神出鬼没的，突然就出现在我跟前！要不是我还得快点去找大夫去救我家小姐，我跟你没完！”</p><p>此时叶辰心想</p><p>“救小姐？莫非这位小姐就是师傅述说的等我救的人？”</p><p>随后叶辰问道</p><p>“敢问这位姑娘，你家小姐出来什么事了？”</p><p>那名丫鬟缓缓的站起身子，随后答道</p><p>“我家小姐突然卧床不起——哎，我家小姐怎么了，关你什么事！不行不行，我还得赶紧去找大夫，要是耽搁了，唯你是问。”</p><p>“卧床不起？那我得去看看，这十年来在茅山也学了不少治病的道术，正好可以施展一下！”</p><p>叶辰心里沉思了一会儿，又说道</p><p>“那姑娘可遇对人了！这世上要是我都治不好的病，那你也某找别人了！我乃当今世上叶神医，世人称之在世华佗”</p><p>话音刚毕，叶辰心里笑道</p><p>“哈哈哈，反正出门在外，身份都是自己给的！”</p><p>那丫鬟愣了愣，随后目光扫向叶辰，打量了一下，想道</p><p>“这二十出头的毛头小子也敢自称在世华佗！怕不是大头菜吃多了吧？算了，反正夫人让我找大夫，既然他会的话，那就让他试试”</p><p>“那你还愣在这干嘛！还不赶紧和我回去救我家小姐！要是我家小姐有什么差池，本小姐唯你是问！”</p><p>只见那丫鬟话音刚毕，便匆忙的拉着叶辰往小悦儿府上赶去……</p><p>此时小悦儿躺在床上,双目无神，身体颤抖，那口中还发出轻微的声音</p><p>“叶哥哥，你怎么还不来找悦儿，悦———悦儿我好想你啊!”</p><p>“悦儿！悦儿！你到底怎么了！怎么前几天还好好的，今天就突然这样了？”</p><p>只见小悦儿母亲那颤抖的手抚摸着小悦儿额头，忐忑不安的说道。</p><p>“夫人莫急，小翠不是已经出去找大夫了吗？你在这干着急也没用啊！”</p><p>一位中年男子，在小悦儿房间，焦急的对着那妇人说道。</p><p>此人正是小悦儿的父亲，欧阳明岳</p><p>这时，门外传来一阵吵闹声……</p><p>“这位姑娘，要不要这么着急啊！快放手，衣裳都要被你扯破了”</p><p>叶辰挣脱了那丫鬟的手，说道</p><p>“老爷——老爷，大夫请来了。”</p><p>那丫鬟慌忙的边跑向悦儿房间边喊道。</p><p>此时叶辰眉心一颤，突然一种不祥的预感由心而生。</p><p>随后便紧紧的跟在身后，当踏进悦儿房间时，扫视了一遍房间，然后皱起眉头目视着躺在床上的姑娘。</p><p>悦儿母亲听到小翠声音的时候，脸上漏出些许期待的表情，说道</p><p>“太好了——太好了！我们家悦儿有救了！”</p><p>欧阳明岳望了望叶辰，随后邹起眉头，口中疑惑的问道</p><p>“这位兄弟，看起来面生！不像是本村大夫啊！”</p><p>叶辰没有理会那名中年男子，大步的走向悦儿床前，只因那名妇人刚刚口中提及悦儿两字。</p><p>只见叶辰撑开悦儿眼睛望了望，随后又拿起她的手腕，摸着脉象。</p><p>此刻叶辰心里嘀咕着</p><p>“眼睛显露红丝，可脉象平稳，不像是得病啊！难不成——？”</p><p>待叶辰嘀咕完后，目光望向那悦儿父亲，然后问道</p><p>“这几天，府上可发生过什么事？又或者她是否和什么人接触过？”</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;欧阳村，一名丫鬟从小悦儿府上走出。只见她魂不守舍的走着，像是去慌忙的向某个目的地走着。&lt;/p&gt;
&lt;p&gt;就在这时，叶辰使用五行遁出现在那丫鬟身前，只听&lt;/p&gt;
&lt;p&gt;“砰” 一声&lt;/p&gt;
&lt;p&gt;“哎呀，那个不长眼睛的家伙！”&lt;/p&gt;
&lt;p&gt;只见那躺在地上的丫鬟说道&lt;/p&gt;
&lt;
      
    
    </summary>
    
      <category term="小说" scheme="https://xiaowuyoucy.github.io/categories/%E5%B0%8F%E8%AF%B4/"/>
    
    
  </entry>
  
  <entry>
    <title>第三篇走出茅山</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/27/%E7%AC%AC%E4%B8%89%E7%AB%A0%E8%B5%B0%E5%87%BA%E8%8C%85%E5%B1%B1/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/27/第三章走出茅山/</id>
    <published>2023-10-26T16:11:53.000Z</published>
    <updated>2023-10-30T22:56:09.505Z</updated>
    
    <content type="html"><![CDATA[<p>张广正望了望叶辰，又继续说道</p><p>“十八年前，救下那名婴儿的人正是为师，那婴儿是徒儿你！”</p><p>叶辰愣了一下，心里想道</p><p>“这么多年来一直疑惑为什么从小就无父无母，而自己的养父养母却从来不提及”</p><p>随后叶辰掀开腹中的衣裳继续想道</p><p>“原来这腹中的阴阳八卦的图案，原来是师傅施的阴阳八卦封印。”</p><p>“不知师傅是否能告知，为什么会有那么强大的怨气在我体内呢？”</p><p>叶辰满脸疑惑的问道</p><p>此时只见张广正对着那后山长长的叹了口气，然后继续望着叶辰回答道</p><p>“根据记载，若是出生婴儿体内带有怨气，前世一定有着极大的冤屈，死后怨气封入魂体，待投胎转世获得新的肉身时，这股怨气就会慢慢苏醒过来。”</p><p>“好徒儿，为师自知无涯，未能以道化解你体内的怨气，至于怨气的缘由，待你今日下山后自行参透。”</p><p>叶辰心里暗想</p><p>“师傅这是要赶我下山了？就算赶我下山，也得让我找个落脚出先把。”</p><p>随后说道</p><p>“不知师傅让弟子去哪？”</p><p>此时张广正身影一闪，来到叶辰背后，一手抓着他肩膀，另一只竖起食中指，一道微弱的红光浮现在两指上，随后慢慢显现出一把模糊的剑影，最后由双指改为掌心，打入叶辰手臂。</p><p>“徒儿莫怕，在你下山前，为师赐你一把五行剑，此剑可斩断世间任何的五行之物，望徒儿往后得以善用！”</p><p>叶辰眉心一颤，震惊的望着张广正那手心中的红光慢慢融入到自己手臂。</p><p>随后双手抱拳，单膝下跪，说道</p><p>“感谢师傅！”</p><p>“起来吧，此次下山，你就先去欧阳村吧，那里有个人在等着你施救呢！”</p><p>张广正对着叶辰说道</p><p>叶辰缓慢的站起身子，心里沉思着</p><p>“欧阳村？莫非——是小悦儿的村子？不会的不会的，世界那么大，不可能那么巧的。”</p><p>然而，叶辰越是怕什么就来什么。当然这是后话</p><p>待叶辰从沉思中醒悟过来时，张广正的身影早已从原地消失，这时只听空中慢慢回响他的声音</p><p>“人道渺渺，仙道茫茫，鬼道乐兮，当人生门，仙道贵生，鬼道贵终。望徒儿早日参透！”</p><p>那话音刚落，叶辰面朝张广正府中，双膝下跪，磕了三个头后，慢慢的走下茅山。</p><p>“人道渺渺，仙道茫茫……，不知师傅说的这话有何含义？算了算了，不想了，还是先去欧阳村看看吧！”</p><p>此时欧阳村中，小悦儿正躺在床上，身旁还有个妇人心神不宁，着急的等待着什么……</p><p>此人便是小悦儿母亲，上官雨萍</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;张广正望了望叶辰，又继续说道&lt;/p&gt;
&lt;p&gt;“十八年前，救下那名婴儿的人正是为师，那婴儿是徒儿你！”&lt;/p&gt;
&lt;p&gt;叶辰愣了一下，心里想道&lt;/p&gt;
&lt;p&gt;“这么多年来一直疑惑为什么从小就无父无母，而自己的养父养母却从来不提及”&lt;/p&gt;
&lt;p&gt;随后叶辰掀开腹中的衣裳继续想道&lt;
      
    
    </summary>
    
      <category term="小说" scheme="https://xiaowuyoucy.github.io/categories/%E5%B0%8F%E8%AF%B4/"/>
    
    
  </entry>
  
  <entry>
    <title>Qt编程第二天</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/24/Qt%E7%AC%AC%E4%BA%8C%E5%A4%A9/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/24/Qt第二天/</id>
    <published>2023-10-24T14:04:42.000Z</published>
    <updated>2023-11-28T16:30:53.211Z</updated>
    
    <content type="html"><![CDATA[<h3 id="菜单栏"><a class="markdownIt-Anchor" href="#菜单栏"></a> 菜单栏</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">//1、菜单栏 只能有一个</span><br><span class="line"> QMenuBar * bar = menuBar();//创建菜单栏</span><br><span class="line"> setMenuBar(bar);//将菜单栏添加到窗口</span><br><span class="line"></span><br><span class="line">    //创建菜单</span><br><span class="line">QMenu * fileMenu = bar-&gt;addMenu(&quot;文件&quot;);</span><br><span class="line">QMenu * editMenu = bar-&gt;addMenu(&quot;编辑&quot;);</span><br><span class="line"></span><br><span class="line">    //创建菜单项</span><br><span class="line">QAction * newAction = fileMenu-&gt;addAction(&quot;新建&quot;);</span><br><span class="line"></span><br><span class="line">    //添加分割线</span><br><span class="line">fileMenu-&gt;addSeparator();</span><br><span class="line"></span><br><span class="line">QAction * openAction = fileMenu-&gt;addAction(&quot;打开&quot;);</span><br></pre></td></tr></table></figure><h3 id="工具栏"><a class="markdownIt-Anchor" href="#工具栏"></a> 工具栏</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">//2、工具栏 可以有多个</span><br><span class="line">    QToolBar * toolBar = new QToolBar(this);</span><br><span class="line">    addToolBar(Qt::LeftToolBarArea,toolBar);</span><br><span class="line"></span><br><span class="line">    //设置只允许左右停靠</span><br><span class="line">    toolBar-&gt;setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);</span><br><span class="line"></span><br><span class="line">    //设置浮动</span><br><span class="line">    toolBar-&gt;setFloatable(false);</span><br><span class="line"></span><br><span class="line">    //设置移动 （总开关）</span><br><span class="line">    toolBar-&gt;setMovable(false);</span><br><span class="line"></span><br><span class="line">    //工具栏中放入小部件</span><br><span class="line">    toolBar-&gt;addAction(newAction);</span><br><span class="line">    //添加分割线</span><br><span class="line">    toolBar-&gt;addSeparator();</span><br><span class="line">    toolBar-&gt;addAction(openAction);</span><br></pre></td></tr></table></figure><h3 id="状态栏"><a class="markdownIt-Anchor" href="#状态栏"></a> 状态栏</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">//状态栏  只能有一个</span><br><span class="line">QStatusBar * stBar = statusBar();</span><br><span class="line">setStatusBar(stBar);</span><br><span class="line"></span><br><span class="line">QLabel * label1 = new QLabel(&quot;左侧提示信息&quot;,this);</span><br><span class="line">stBar-&gt;addWidget(label1);</span><br><span class="line"></span><br><span class="line">QLabel * label2 = new QLabel(&quot;右侧提示信息&quot;,this);</span><br><span class="line">stBar-&gt;addPermanentWidget(label2);</span><br></pre></td></tr></table></figure><h3 id="铆接部件-浮动窗口"><a class="markdownIt-Anchor" href="#铆接部件-浮动窗口"></a> 铆接部件 （浮动窗口）</h3><pre><code>//铆接部件 （浮动窗口）  可以有多个QDockWidget * dock = new QDockWidget(&quot;aaa&quot; ,this);addDockWidget(Qt::BottomDockWidgetArea,dock); //只允许左右停靠dock-&gt;setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);</code></pre><h3 id="核心部件-只能有一个"><a class="markdownIt-Anchor" href="#核心部件-只能有一个"></a> 核心部件  只能有一个</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">//核心部件  只能有一个</span><br><span class="line">   QTextEdit * edit = new QTextEdit(this); </span><br><span class="line">   setCentralWidget(edit); //将记事本设置成核心部件</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;mainwindow.h&quot;</span><br><span class="line">#include &lt;QMenuBar&gt;</span><br><span class="line">#include &lt;QToolBar&gt;</span><br><span class="line">#include &lt;QLabel&gt;</span><br><span class="line">#include &lt;QStatusBar&gt;</span><br><span class="line">#include &lt;QDockWidget&gt;</span><br><span class="line">#include &lt;QTextEdit&gt;</span><br><span class="line">MainWindow::MainWindow(QWidget *parent)</span><br><span class="line">    : QMainWindow(parent)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">    resize(600,400);</span><br><span class="line"></span><br><span class="line">    //1、菜单栏 只能有一个</span><br><span class="line">    QMenuBar * bar = menuBar();</span><br><span class="line">    setMenuBar(bar);</span><br><span class="line"></span><br><span class="line">    //创建菜单</span><br><span class="line">    QMenu * fileMenu = bar-&gt;addMenu(&quot;文件&quot;);</span><br><span class="line">    QMenu * editMenu = bar-&gt;addMenu(&quot;编辑&quot;);</span><br><span class="line"></span><br><span class="line">    //创建菜单项</span><br><span class="line">    QAction * newAction = fileMenu-&gt;addAction(&quot;新建&quot;);</span><br><span class="line"></span><br><span class="line">    //添加分割线</span><br><span class="line">    fileMenu-&gt;addSeparator();</span><br><span class="line"></span><br><span class="line">    QAction * openAction = fileMenu-&gt;addAction(&quot;打开&quot;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //2、工具栏 可以有多个</span><br><span class="line">    QToolBar * toolBar = new QToolBar(this);</span><br><span class="line">    addToolBar(Qt::LeftToolBarArea,toolBar);</span><br><span class="line"></span><br><span class="line">    //设置只允许左右停靠</span><br><span class="line">    toolBar-&gt;setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);</span><br><span class="line"></span><br><span class="line">    //设置浮动</span><br><span class="line">    toolBar-&gt;setFloatable(false);</span><br><span class="line"></span><br><span class="line">    //设置移动 （总开关）</span><br><span class="line">    toolBar-&gt;setMovable(false);</span><br><span class="line"></span><br><span class="line">    //工具栏中放入小部件</span><br><span class="line">    toolBar-&gt;addAction(newAction);</span><br><span class="line">    //添加分割线</span><br><span class="line">    toolBar-&gt;addSeparator();</span><br><span class="line">    toolBar-&gt;addAction(openAction);</span><br><span class="line"></span><br><span class="line">    //状态栏  只能有一个</span><br><span class="line">    QStatusBar * stBar = statusBar();</span><br><span class="line">    setStatusBar(stBar);</span><br><span class="line"></span><br><span class="line">    QLabel * label1 = new QLabel(&quot;左侧提示信息&quot;,this);</span><br><span class="line">    stBar-&gt;addWidget(label1);</span><br><span class="line"></span><br><span class="line">    QLabel * label2 = new QLabel(&quot;右侧提示信息&quot;,this);</span><br><span class="line">    stBar-&gt;addPermanentWidget(label2);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //铆接部件 （浮动窗口）  可以有多个</span><br><span class="line">    QDockWidget * dock = new QDockWidget(&quot;aaa&quot; ,this);</span><br><span class="line">    addDockWidget(Qt::BottomDockWidgetArea,dock);</span><br><span class="line"></span><br><span class="line">    //只允许左右停靠</span><br><span class="line">    dock-&gt;setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);</span><br><span class="line"></span><br><span class="line">    //核心部件  只能有一个</span><br><span class="line">    QTextEdit * edit = new QTextEdit(this);</span><br><span class="line">    setCentralWidget(edit);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">MainWindow::~MainWindow()</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><br><br></p><h3 id="ui界面设计"><a class="markdownIt-Anchor" href="#ui界面设计"></a> UI界面设计</h3><p>这里面不能输入中文</p><p><img src="/images/javawz/image-20231025222114426.png" alt="image-20231025222114426"></p><p>输入英文后再这里可以修改为中文</p><p><img src="/images/javawz/image-20231025222220405.png" alt="image-20231025222220405"></p><p><br><br></p><h3 id="资源文件"><a class="markdownIt-Anchor" href="#资源文件"></a> 资源文件</h3><p>添加资源文件</p><p><img src="/images/javawz/wps1.jpg" alt="img"></p><p><img src="/images/javawz/wps2.jpg" alt="img"></p><p>打开资源文件需要鼠标右键选择 Open in Editor</p><p><img src="/images/javawz/image-20231025011538366.png" alt="image-20231025011538366"></p><p><img src="/images/javawz/wps3-1698167691853.jpg" alt="img"></p><p>添加前缀用以区分资源文件,相当于文件夹</p><p><img src="/images/javawz/image-20231025011639424.png" alt="image-20231025011639424"></p><p><img src="/images/javawz/image-20231025011612121.png" alt="image-20231025011612121"></p><p>添加文件</p><p><img src="/images/javawz/image-20231025011704071.png" alt="image-20231025011704071">.</p><p>如果上面添加不了,可以用鼠标右键选择对应的选项来添加</p><p><img src="/images/javawz/image-20231025011853479.png" alt="image-20231025011853479"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">资源文件添加   语法：   &quot;: + 前缀名  + 文件名称&quot;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;mainwindow.h&quot;</span><br><span class="line">#include &quot;ui_mainwindow.h&quot;</span><br><span class="line"></span><br><span class="line">MainWindow::MainWindow(QWidget *parent) :</span><br><span class="line">    QMainWindow(parent),</span><br><span class="line">    ui(new Ui::MainWindow)</span><br><span class="line">&#123;</span><br><span class="line">    ui-&gt;setupUi(this);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //给新建添加小图标</span><br><span class="line">    //ui-&gt;actionNew-&gt;setIcon(QIcon(&quot;E:/Image/Luffy.png&quot;));</span><br><span class="line"></span><br><span class="line">    //资源文件添加   语法：   &quot;: + 前缀名  + 文件名称&quot;</span><br><span class="line">    ui-&gt;actionNew-&gt;setIcon(QIcon(&quot;:/Image/Luffy.png&quot;));</span><br><span class="line"></span><br><span class="line">    ui-&gt;actionOpen-&gt;setIcon(QIcon(&quot;:/Image/LuffyQ.png&quot;));</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">MainWindow::~MainWindow()</span><br><span class="line">&#123;</span><br><span class="line">    delete ui;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><br><br><br><br></p><h3 id="对话框"><a class="markdownIt-Anchor" href="#对话框"></a> 对话框</h3><h4 id="模态对话框创建"><a class="markdownIt-Anchor" href="#模态对话框创建"></a> 模态对话框创建</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">//模态对话框创建</span><br><span class="line">//        QDialog dlg(this);</span><br><span class="line">//        dlg.resize(120,30);</span><br><span class="line">//        dlg.exec();</span><br></pre></td></tr></table></figure><h4 id="非模态对话框"><a class="markdownIt-Anchor" href="#非模态对话框"></a> 非模态对话框</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">//非模态对话框创建</span><br><span class="line">//          QDialog *dlg2 = new QDialog(this);</span><br><span class="line">//          dlg2-&gt;resize(120,30);</span><br><span class="line">//          dlg2-&gt;show();</span><br><span class="line">//          //设置 55号属性</span><br><span class="line">//          dlg2-&gt;setAttribute(Qt::WA_DeleteOnClose);</span><br></pre></td></tr></table></figure><h4 id="qmessagebox对话框"><a class="markdownIt-Anchor" href="#qmessagebox对话框"></a> QMessageBox对话框</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">//错误提示对话框</span><br><span class="line">//QMessageBox::critical(this,&quot;错误&quot;,&quot;critical&quot;);</span><br><span class="line"></span><br><span class="line">//信息提示对话框</span><br><span class="line">//QMessageBox::information(this,&quot;信息&quot;,&quot;info&quot;);</span><br><span class="line"></span><br><span class="line">//询问提示对话框</span><br><span class="line"> // 参数1   父窗口  参数2  标题  参数3  提示信息  参数4  按键类型  参数5  默认关联回车按键</span><br><span class="line">//        if( QMessageBox::Save ==  QMessageBox::question(this,&quot;询问&quot;,&quot;question&quot; , QMessageBox::Save | QMessageBox::Cancel ,QMessageBox::Cancel))</span><br><span class="line">//        &#123;</span><br><span class="line">//             qDebug()&lt;&lt;&quot;点击的是保存&quot;;</span><br><span class="line">//        &#125;</span><br><span class="line">//        else</span><br><span class="line">//        &#123;</span><br><span class="line">//             qDebug()&lt;&lt;&quot;点击的是取消&quot;;</span><br><span class="line">//        &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">//警告提示对话框</span><br><span class="line">//QMessageBox::warning(this,&quot;警告&quot;,&quot;warning&quot;);</span><br></pre></td></tr></table></figure><h4 id="标准常用的对话框"><a class="markdownIt-Anchor" href="#标准常用的对话框"></a> 标准常用的对话框</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">QColorDialog：选择颜色；</span><br><span class="line">QFileDialog：选择文件或者目录；</span><br><span class="line">QFontDialog：选择字体；</span><br><span class="line">QInputDialog：允许用户输入一个值，并将其值返回；</span><br><span class="line">QMessageBox：模态对话框，用于显示信息、询问问题等；</span><br><span class="line">QPageSetupDialog：为打印机提供纸张相关的选项；</span><br><span class="line">QPrintDialog：打印机配置；</span><br><span class="line">QPrintPreviewDialog：打印预览；</span><br><span class="line">QProgressDialog：显示操作过程。</span><br></pre></td></tr></table></figure><p><br><br></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">//颜色对话框</span><br><span class="line">//         QColor color = QColorDialog::getColor(Qt::red);</span><br><span class="line">//         qDebug() &lt;&lt; color.red() &lt;&lt; color.green() &lt;&lt; color.blue() ;</span><br><span class="line"></span><br><span class="line">//文件对话框</span><br><span class="line">//          QString fileName = QFileDialog::getOpenFileName(this,&quot;打开文件&quot;,&quot;C:\\Users\\zhangtao\\Desktop&quot;,&quot;(*.doc)&quot;);</span><br><span class="line">//          qDebug () &lt;&lt;fileName;</span><br><span class="line"></span><br><span class="line">//字体对话框</span><br><span class="line">        bool flag;</span><br><span class="line">        QFont font = QFontDialog::getFont(&amp;flag,QFont(&quot;华文彩云&quot;,36));</span><br><span class="line">        qDebug() &lt;&lt; &quot;字体&quot; &lt;&lt; font.family().toUtf8().data() &lt;&lt; &quot;字号&quot;&lt;&lt; font.pointSize()</span><br><span class="line">                 &lt;&lt; &quot;是否加粗&quot;&lt;&lt;font.bold() &lt;&lt; &quot;是否倾斜&quot; &lt;&lt; font.italic();</span><br></pre></td></tr></table></figure><h3 id="界面布局"><a class="markdownIt-Anchor" href="#界面布局"></a> 界面布局</h3><h4 id="标签"><a class="markdownIt-Anchor" href="#标签"></a> 标签</h4><p><img src="/images/javawz/image-20231107221304796.png" alt="image-20231107221304796"></p><p><br><br></p><h4 id="单行编辑框"><a class="markdownIt-Anchor" href="#单行编辑框"></a> 单行编辑框</h4><p><img src="/images/javawz/image-20231107221411172.png" alt="image-20231107221411172"></p><p>echoMode属性</p><p><img src="/images/javawz/image-20231107224230784.png" alt="image-20231107224230784"></p><ol><li><strong>Normal（正常模式）</strong>：这是默认模式，用户输入的文本以明文形式显示在编辑框中。这是最常见的使用方式，适用于大多数文本输入场景。</li><li><strong>NoEcho（无回显模式）</strong>：在这个模式下，用户输入的文本不会显示在编辑框内，用于隐藏用户输入的文本，例如用于密码输入，以保护敏感信息。</li><li><strong>Password（密码模式）</strong>：在这个模式下，用户输入的文本以密码掩码字符（通常是圆点或星号）显示在编辑框内。这是用于密码输入框的常见设置，以保护密码的机密性。</li><li><strong>PasswordEchoOnEdit（编辑时密码模式）</strong>：用户在输入时，文本以明文形式显示在编辑框内，但当编辑框失去焦点后，文本会以密码掩码字符显示。这是一种用户友好的密码输入方式，让用户能够确认他们输入的内容。</li></ol><p><br><br></p><h4 id="容器"><a class="markdownIt-Anchor" href="#容器"></a> 容器</h4><p><img src="/images/javawz/image-20231107221630854.png" alt="image-20231107221630854"></p><p>容器属性:</p><p>​固定容器大小</p><p><br><br></p><p><img src="/images/javawz/image-20231107223351226.png" alt="image-20231107223351226"></p><h4 id="水平布局"><a class="markdownIt-Anchor" href="#水平布局"></a> 水平布局</h4><p><img src="/images/javawz/image-20231107222105903.png" alt="image-20231107222105903"></p><p><br><br></p><h4 id="垂直布局"><a class="markdownIt-Anchor" href="#垂直布局"></a> 垂直布局</h4><p><img src="/images/javawz/image-20231107222141029.png" alt="image-20231107222141029"></p><p><br><br></p><h4 id="栅格布局"><a class="markdownIt-Anchor" href="#栅格布局"></a> 栅格布局</h4><p>几行几列的选栅格布局,然后再选垂直布局</p><p><img src="/images/javawz/image-20231107222937304.png" alt="image-20231107222937304"></p><p>没有布局会有红圈</p><p><img src="/images/javawz/image-20231107222017658.png" alt="image-20231107222017658"></p><p><br><br></p><h4 id="弹簧"><a class="markdownIt-Anchor" href="#弹簧"></a> 弹簧</h4><p>固定布局的</p><p><img src="/images/javawz/image-20231107222349302.png" alt="image-20231107222349302"></p><h5 id="弹簧属性"><a class="markdownIt-Anchor" href="#弹簧属性"></a> 弹簧属性</h5><p><img src="/images/javawz/image-20231107222510511.png" alt="image-20231107222510511"></p><p>Fixed是固定弹簧大小</p><p>Expanding是可伸缩的</p><p><br><br></p><h4 id="打破布局"><a class="markdownIt-Anchor" href="#打破布局"></a> 打破布局</h4><p><img src="/images/javawz/image-20231107222718372.png" alt="image-20231107222718372"></p><p><img src="/images/javawz/image-20231107222802528.png" alt="image-20231107222802528"></p><p><br><br></p><h4 id="修改窗口标题"><a class="markdownIt-Anchor" href="#修改窗口标题"></a> 修改窗口标题</h4><p><img src="/images/javawz/image-20231107223711556.png" alt="image-20231107223711556"></p><p><br><br></p><h4 id="修改容器内边距"><a class="markdownIt-Anchor" href="#修改容器内边距"></a> 修改容器内边距</h4><p><img src="/images/javawz/image-20231107223909831.png" alt="image-20231107223909831"></p><p><img src="/images/javawz/image-20231107223938922.png" alt="image-20231107223938922"></p><p><br><br></p><h4 id="固定窗口大小"><a class="markdownIt-Anchor" href="#固定窗口大小"></a> 固定窗口大小</h4><p><img src="/images/javawz/image-20231107224614856.png" alt="image-20231107224614856"></p><p>把minimumSize和maximumSize值都设置一样</p><h3 id="常用控件按钮组"><a class="markdownIt-Anchor" href="#常用控件按钮组"></a> 常用控件–按钮组</h3>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;菜单栏&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#菜单栏&quot;&gt;&lt;/a&gt; 菜单栏&lt;/h3&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span
      
    
    </summary>
    
      <category term="Qt" scheme="https://xiaowuyoucy.github.io/categories/Qt/"/>
    
    
  </entry>
  
  <entry>
    <title>第二篇 揭晓身世</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/21/%E7%AC%AC%E4%BA%8C%E7%AB%A0%E4%B8%8B%E5%B1%B1/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/21/第二章下山/</id>
    <published>2023-10-20T16:22:54.000Z</published>
    <updated>2023-10-25T17:40:12.833Z</updated>
    
    <content type="html"><![CDATA[<p>茅山又名句曲山，在茅山大堂缓缓走出一名老者，只见老者手握拳头，伸出食指中指运气灵气说道</p><p>​“净儿，你过来一下，为师今日有特别的话要和你说！”</p><p>原来此乃茅山中的传音术，而灵气乃又是每个修行道人所需，修行人需要每天刻苦修炼，最后吸灵入体，最后才能驱使万千道法。</p><p>此时茅山后院的森林内，一人正在打坐，然后缓缓睁开双眼</p><p>​“师傅有特别的事要对我说？会是什么事儿呢！”</p><p>此人正是十年前救下小悦儿的叶辰，原来十年前叶辰把悦儿送到二婶婶家后，就来到了茅山修行，做起了茅山的俗家弟子，故而道号为玄净。</p><p>只见叶辰站起身,食指中指夹着一道黄符，口中念道</p><p>​“日遁千里，夜遁八百，五行土遁，敕令”</p><p>突然，叶辰从原地瞬间消失不见</p><p>茅山院内骤然出现了一道身影，此人正是刚刚从森林中消失不见的叶辰，只见叶辰大步走向茅山大堂，然后双手抱拳，单膝下跪地说道</p><p>“弟子，拜见师傅，不知师傅找弟子有何事”</p><p>老者单手一挥，口中说道</p><p>“净儿，起来吧”</p><p>此时只见叶辰被一股无形的力量托起，可见那老者的道行深不可测啊。</p><p>老者说道</p><p>”净儿啊，为师找你来是想告诉你，你已经随为师修行有十余载了吧“</p><p>当叶辰回忆起自救下小悦儿之后，已经过去了整整十年了，便赶忙说道</p><p>“是的，不知师傅为何提起此事儿？”</p><p>“就让为师给你讲一个故事吧” 只见那老者口中缓缓说道</p><p>十八年前，叶家村中一名丫鬟急匆匆在大街人群中边跑边呼喊着</p><p>“叶老爷，叶老爷！”</p><p>人群中一名男子，手里拿着一把扇子，缓缓地回过头，望着那匆匆赶来的丫鬟说道</p><p>“什么事儿，大街上大喊大叫，成何体统！”</p><p>只见那丫鬟来到叶老爷身旁，边喘气边来回的抚摸着胸口，咽了咽嗓子说道：</p><p>“老~老爷，夫人要生了，您——您赶紧回去一趟吧！ ”</p><p>“什么？” ，男子手中扇子一合，立马拍打在另一只手心上目视着那丫鬟</p><p>“老爷，你还是先赶紧回去一趟吧！”  只见那丫鬟面露着慌张的神色，似乎有不好的事情即将到来。</p><p>此时只见那男子迈起腿大步的朝叶家方向走去。</p><p>这时叶家家中卧室里传来一阵阵人群中慌乱的嘈杂声</p><p>”啊——啊————我要不行了~“</p><p>只见一名即将临盆的妇人额头布满汗珠，双手紧抓床褥，面带痛苦表情地喊道。</p><p>“妇人，坚持住啊，已经可以看到孩子的脑袋了，用力~再用点力气”</p><p>一位身穿古老的绸袍，头戴一顶古朴帽子的产婆在旁安抚着那妇人。</p><p>就在这时那妇人突然发出</p><p>“啊————！”</p><p>长长的一声随即瘫软在床上一动也不动便失去了气息。紧接着，一连串的婴儿哭声，打破了这卧室里先前的嘈杂慌乱声。</p><p>门外传来匆忙的加不上,没一会过分,叶老爷便出现在门口。</p><p>“夫人！ 夫人怎么了？，这到底发生什么事儿了？”，叶老爷瞪大了双眼，目视着那床上一动不动的妇人，随后慌忙的对着屋内的几人问道。</p><p>“老爷，夫人难产死了——，刚刚你~你出去的时候，夫人突然感觉到肚子疼，于是我们便赶忙叫来产婆……”</p><p>此时几位丫鬟，踉跄的走到他身旁随后带着哭腔地将刚刚所发生的事情，，都一五一十的告诉叶老爷。</p><p>几位丫鬟刚说完，只见叶老爷的双手微微一颤，哐当一声，那把手中拿着的扇子早已掉落在地上。</p><p>只见叶老爷来到那妇人身边，单手抚摸着那妇人额头</p><p>“夫人，你怎么忍心丢下我和…”</p><p>叶老爷话还没来得及说完，那产婆手里抱着的孩子突然散发着一股强大的怨气，在这个强大的怨气影响下，众人便纷纷倒下，再无声息。</p><p>此时门外渐渐的出现了一个老者的身影。</p><p>“好强大的怨气！想不到一个婴儿身上竟带着这么强劲的怨气！”</p><p>只见那老者竖起食中指，嘴里念着奇怪的咒语，随后由食中指改向无名指、食指、拇指往那婴儿点去， 一股无形强大的灵气瞬间出现，正在慢慢的压制住那股婴儿身上散发出来的怨气，直到那股怨气被完全压制住，消失不见。</p><p>此刻那名婴儿腹中慢慢出现了一个阴阳八卦的图案。</p><p>那老者抱起婴儿走向门外，经过多方询问，最后此婴儿才被一户膝下无儿无女的人家收留。</p><p>那老者临走前嘱咐到</p><p>“待这孩子八岁时，让他来茅山来找本道。”</p><p>那户人家上前询问     “不知这位道长怎么称呼？ ”</p><p>“贫道乃张广正”</p><p>话刚说完，那张广正的身影慢慢从原地散去。</p><p>“啊—原来是茅山张真人啊！这孩子有救了！”</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;茅山又名句曲山，在茅山大堂缓缓走出一名老者，只见老者手握拳头，伸出食指中指运气灵气说道&lt;/p&gt;
&lt;p&gt;​				“净儿，你过来一下，为师今日有特别的话要和你说！”&lt;/p&gt;
&lt;p&gt;原来此乃茅山中的传音术，而灵气乃又是每个修行道人所需，修行人需要每天刻苦修炼，最后吸灵入体，最后
      
    
    </summary>
    
      <category term="小说" scheme="https://xiaowuyoucy.github.io/categories/%E5%B0%8F%E8%AF%B4/"/>
    
    
  </entry>
  
  <entry>
    <title>第一篇  初遇悦儿</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/19/%E7%AC%AC%E4%B8%80%E7%AB%A0%E7%BC%98%E7%9A%84%E7%94%B1%E6%9D%A5/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/19/第一章缘的由来/</id>
    <published>2023-10-19T15:04:51.000Z</published>
    <updated>2023-10-20T17:11:01.422Z</updated>
    
    <content type="html"><![CDATA[<p>​故事还得从孤云镇秋风村说起，一位少年在树林小道里悠哉悠哉的赶着路，</p><p>​ ”呜呜呜呜~“</p><p>少年喊道：</p><p>​”是谁在哭啊！快给本少爷出来！“</p><p>只听树林里传来的女孩的哭声却不见有任何人回答，</p><p>少年心想：</p><p>​”不会这么倒霉吧！大白天遇到鬼了？不对呀，常听村里人说起，这条路经常有野兽出没，该不会是前方有人遇到危险了吧？“  ，</p><br><p>少年急急忙忙从路旁抄起一根坚硬的木棍，毅然地朝着哭声的来源地跑去。，此时只见前方有个小女孩坐在地上哭泣着，旁边还有一只老虎凶猛地注视着她。</p><p>突然，老虎走到小女孩跟前，张开巨大的嘴巴准备扑向她。</p><p>​“小妹妹别怕！畜生东西快滚开”，</p><p>少年挥舞着木棍，狠狠地敲击了老虎的腹部。老虎发出痛苦的嗷叫声，后退了几步，然后再次扑向了少年。</p><p>““砰””</p><p>只见那少年被扑倒在地，那猛虎张开血盆大口就要往少年脑袋咬去。</p><br><p>“混账东西，刚刚打得还不够疼是吧！”</p><p>少年用木棍顶住老虎的嘴巴，一手从口袋里抽出小刀，直取老虎的眼睛。老虎吃痛，大吼一声</p><p>“嗷~”，</p><p>用力地将少年甩开，然后迅速消失在树林深处。</p><p>​“畜生东西，再慢两步，爷爷皮都给你剥下来”</p><p>少年起身，拍打身上的泥尘，检查了一下自己的伤势。除了手臂上被老虎甩伤外，其他部位都没有受伤。然后，他走向小女孩。</p><p>​“小妹妹，不要哭啦，老虎已经被哥哥赶跑了！”</p><p>小女孩边哭泣边说道</p><p>​“真的吗？”</p><p>少年摸着小女孩的脑袋回答</p><p>​“嗯，小妹妹你怎么一个人跑到这啊，这里很危险的！“</p><p>小女孩：</p><p>​“呜呜呜~     娘亲叫我拿点蘑菇到二婶婶家，我走着走着就不知道怎么着就走到这了。”</p><br><p>​“好啦好啦，小妹妹你叫什么名字呢！不许哭了哦，哥哥给你吃冰糖葫芦”</p><p>说完少年就从包袱里拿出用纸张包着的冰糖葫芦递到小女孩面前。</p><p>​“谢谢大哥哥，我叫欧阳子悦，家里人都叫我悦儿，大哥哥你又叫什么名字呢？”</p><p>小女孩带着抽泣的声音回答少年。</p><p>​“我呀，我叫叶辰，你叫我叶哥哥吧~，你二婶婶家在哪儿？我送你过去吧！”</p><p>叶辰扶起悦儿说道。</p><br><p>​“二婶婶在一里外的柳岚村，啊~,叶哥哥，我脚疼，应该是刚刚遇到大老虎，慌忙跑的时候摔到了，扭伤了。”</p><p>这时悦儿用手捂住脚踝。</p><p>​“哥哥背你过去吧， 恰好我也顺路”</p><p>叶辰背起小悦儿就往柳岚村走去。</p><p>​“叶哥哥谢谢你刚刚救了我，幸好叶哥哥及时出现帮我赶走了大老虎，要不然我都不知道怎么办呢，叶哥哥真勇敢!”</p><p>此时小悦儿心里悄悄的埋下了对叶哥哥喜爱和崇拜的种子。</p><p>小悦儿脑袋靠着叶辰的肩膀上说道</p><br><p>​“傻丫头，以后一个人就不要走这条……。”</p><p>话还没说完，叶辰就听到身后传来了细小的呼呼声。只见那小悦儿面带笑容的睡着了。估计被刚刚那只大老虎吓到，然后哭累了吧。</p><br><p>不知过了多久，叶辰走到了一处村口，只见村口牌匾上写着柳岚村。</p><p>​“呦，这不是小悦儿吗！怎么和一个陌生人过来了~”</p><p>在不远处一位妇人对着村口的叶辰叫道。</p><p>​“想必你就是悦儿的二婶婶吧！”</p><p>叶辰对着那不远处的妇人说道。</p><br><p>​“是是是，敢问这位小兄弟是悦儿的什么人呢？”</p><p>妇人疑惑的望着那小伙子问道。</p><br><p>这时小悦儿估计是听到了二婶婶的叫喊，醒了过来。叶辰轻轻的将悦儿放下来后，便将刚刚发生的前因后果给二婶婶道来。</p><br><p>二婶婶听完后，先是吃惊，然后欣慰的说道</p><p>​“这悦儿的母亲也真是的，小悦儿还这么小，就让她一个人过来，幸好遇到小兄弟你及时出手相救，要不然咱们家小悦儿就……，小兄弟要是不嫌弃的话就留下来吃个饭，住一晚上在做打算呀，就当是我们家报答你今天对小悦儿的救命之恩，不知小兄弟意下如何？&quot;</p><br><p>叶辰连忙摇手道</p><p>​“不了不了，我还得着急赶路去大孤镇呢。把小悦儿安全的送到你这里来我就放心了。”</p><p>叶辰对二婶说完后便准备起身出发。</p><p>​“叶哥哥，我们什么时候才能再见面啊！”</p><p>小悦儿对着叶辰温柔的说道</p><br><p>叶辰轻轻地摸了摸悦儿的脑袋回答道</p><p>​“等小悦儿长大的时候，我们还会再见面哒。小悦儿要乖乖听话哦。要不然叶哥哥就不见你了哦。”</p><br><p>叶辰说完便往大孤镇的方向走去。</p><p>只见悦儿恋恋不舍的望着叶辰的身影大声喊到</p><p>​“叶哥哥，不要忘记了咱们的约定呀，等我长大后，一定要来看小悦儿~”</p><p>叶辰慢慢的远去，直到身影完全消失不见。</p><br><p>十年后……</p><p>​</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;​	故事还得从孤云镇秋风村说起，一位少年在树林小道里悠哉悠哉的赶着路，&lt;/p&gt;
&lt;p&gt;​					 ”呜呜呜呜~“&lt;/p&gt;
&lt;p&gt;少年喊道：&lt;/p&gt;
&lt;p&gt;​					”是谁在哭啊！快给本少爷出来！“&lt;/p&gt;
&lt;p&gt;只听树林里传来的女孩的哭声却不见有任何人回答，&lt;/p&gt;
&lt;
      
    
    </summary>
    
      <category term="小说" scheme="https://xiaowuyoucy.github.io/categories/%E5%B0%8F%E8%AF%B4/"/>
    
    
  </entry>
  
  <entry>
    <title>yydc0001</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/11/yydc0001/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/11/yydc0001/</id>
    <published>2023-10-11T15:58:48.000Z</published>
    <updated>2023-10-11T16:19:02.473Z</updated>
    
    <content type="html"><![CDATA[<p><img src="../../themes/pure/source/images/javawz/image-20231011235857309.png" alt="image-20231011235857309"></p><p><img src="../../themes/pure/source/images/javawz/image-20231012000014948.png" alt="image-20231012000014948"></p><p><img src="../../themes/pure/source/images/javawz/image-20231012001900471.png" alt="image-20231012001900471"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;img src=&quot;../../themes/pure/source/images/javawz/image-20231011235857309.png&quot; alt=&quot;image-20231011235857309&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../theme
      
    
    </summary>
    
      <category term="英语单词" scheme="https://xiaowuyoucy.github.io/categories/%E8%8B%B1%E8%AF%AD%E5%8D%95%E8%AF%8D/"/>
    
    
  </entry>
  
  <entry>
    <title>Qt编程第一天</title>
    <link href="https://xiaowuyoucy.github.io/2023/10/11/Qt%E7%BC%96%E7%A8%8B%E7%AC%AC%E4%B8%80%E5%A4%A9/"/>
    <id>https://xiaowuyoucy.github.io/2023/10/11/Qt编程第一天/</id>
    <published>2023-10-11T15:09:49.000Z</published>
    <updated>2023-10-25T15:44:05.373Z</updated>
    
    <content type="html"><![CDATA[<h3 id="pro文件"><a class="markdownIt-Anchor" href="#pro文件"></a> .pro文件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">QT       += core gui  //包含的模块</span><br><span class="line">greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于Qt4版本 才包含widget模块</span><br><span class="line">TARGET = QtFirst  //应用程序名  生成的.exe程序名称</span><br><span class="line">TEMPLATE = app    //模板类型    应用程序模板</span><br><span class="line">SOURCES += main.cpp\   //源文件</span><br><span class="line">        mywidget.cpp</span><br><span class="line">HEADERS  += mywidget.h   //头文件</span><br></pre></td></tr></table></figure><p><strong>.pro就是工程文件(project)，它是qmake自动生成的用于生产makefile的配置文件</strong>。.pro文件的写法如下：</p><h4 id="注释"><a class="markdownIt-Anchor" href="#注释"></a> 注释</h4><p>从“#”开始，到这一行结束。</p><h4 id="模板变量"><a class="markdownIt-Anchor" href="#模板变量"></a> 模板变量</h4><p>告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择：<strong>TEMPLATE</strong> = app</p><p>app -建立一个应用程序的makefile。这是默认值，所以如果模板没有被指定，这个将被使用。</p><p>lib - 建立一个库的makefile。</p><p>vcapp - 建立一个应用程序的VisualStudio项目文件。</p><p>vclib - 建立一个库的VisualStudio项目文件。</p><p>subdirs -这是一个特殊的模板，它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。</p><h4 id="配置信息"><a class="markdownIt-Anchor" href="#配置信息"></a> 配置信息</h4><p>CONFIG用来告诉qmake关于应用程序的配置信息。</p><p>CONFIG +=  c<ins>11 //使用c</ins>11的特性</p><p>在这里使用“+=”，是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项更安全。</p><hr><h3 id="命名规范"><a class="markdownIt-Anchor" href="#命名规范"></a> 命名规范</h3><p>类名：首字母 大小  单词和单词之间 首字母 大写<br>变量、函数名： 首字母小写 单词和单词之间 首字母 大写</p><h3 id="快捷键"><a class="markdownIt-Anchor" href="#快捷键"></a> 快捷键</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">运行 ctrl + R</span><br><span class="line">编译 ctrl + B</span><br><span class="line">查询 ctrl + F</span><br><span class="line">注释 ctrl + /</span><br><span class="line">帮助 F1</span><br><span class="line">字体缩放  ctrl + 鼠标滚轮</span><br><span class="line">整行代码移动  ctrl + shift + ↑ ↓</span><br><span class="line">自动对齐  ctrl + i</span><br><span class="line">同名之间的.h .cpp切换  F4</span><br><span class="line"></span><br><span class="line">帮助文档 F1    左侧列表中按钮    C:\Qt\Qt5.6.0\5.6\mingw49_32\bin</span><br></pre></td></tr></table></figure><h3 id="qpushbutton基本创建"><a class="markdownIt-Anchor" href="#qpushbutton基本创建"></a> QPushButton基本创建</h3><p>mywidget.h</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">#ifndef MYWIDGET_H</span><br><span class="line">#define MYWIDGET_H</span><br><span class="line"></span><br><span class="line">#include &lt;QWidget&gt;</span><br><span class="line"></span><br><span class="line">class MyWidget : public QWidget</span><br><span class="line">&#123;</span><br><span class="line">    Q_OBJECT  //Q_OBJECT宏  支持信号和槽</span><br><span class="line"></span><br><span class="line">public:</span><br><span class="line">    MyWidget(QWidget *parent = 0);</span><br><span class="line">    ~MyWidget();</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">#endif // MYWIDGET_H</span><br></pre></td></tr></table></figure><p>mywidget.cpp</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mywidget.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QPushButton&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mypushbutton.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QDebug&gt;</span></span></span><br><span class="line"><span class="comment">//命名规范</span></span><br><span class="line"><span class="comment">// 类名 首字母 大小  单词和单词之间 首字母 大写</span></span><br><span class="line"><span class="comment">// 变量、函数名 首字母小写 单词和单词之间 首字母 大写</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//快捷键</span></span><br><span class="line"><span class="comment">// 运行 ctrl + R</span></span><br><span class="line"><span class="comment">// 编译 ctrl + B</span></span><br><span class="line"><span class="comment">// 查询 ctrl + F</span></span><br><span class="line"><span class="comment">// 注释 ctrl + /</span></span><br><span class="line"><span class="comment">// 帮助 F1</span></span><br><span class="line"><span class="comment">// 字体缩放  ctrl + 鼠标滚轮</span></span><br><span class="line"><span class="comment">// 整行代码移动  ctrl + shift + ↑ ↓</span></span><br><span class="line"><span class="comment">// 自动对齐  ctrl + i</span></span><br><span class="line"><span class="comment">// 同名之间的.h .cpp切换  F4</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 帮助文档 F1    左侧列表中按钮    C:\Qt\Qt5.6.0\5.6\mingw49_32\bin</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">MyWidget::MyWidget(QWidget *parent)</span><br><span class="line">    : QWidget(parent)</span><br><span class="line">&#123;</span><br><span class="line">    <span class="comment">//按钮</span></span><br><span class="line">    QPushButton * btn = <span class="keyword">new</span> QPushButton;</span><br><span class="line"></span><br><span class="line">    <span class="comment">//btn-&gt;show(); //show用顶层方式弹出</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">//如果想显示到当前窗口中 ，需要做依赖,设置父亲</span></span><br><span class="line">    btn-&gt;setParent(<span class="keyword">this</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//显示文本</span></span><br><span class="line">    btn-&gt;setText(<span class="string">"德玛西亚"</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//按钮2</span></span><br><span class="line">    QPushButton * btn2 = <span class="keyword">new</span> QPushButton(<span class="string">"第二个"</span>,<span class="keyword">this</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//移动btn2</span></span><br><span class="line">    btn2-&gt;move(<span class="number">100</span>,<span class="number">100</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//重置窗口大小</span></span><br><span class="line">    resize(<span class="number">600</span>,<span class="number">400</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//按钮 可以重置大小吗？ 可以</span></span><br><span class="line">    <span class="comment">//btn-&gt;resize(300,200);</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">//指定窗口标题</span></span><br><span class="line">    setWindowTitle(<span class="string">"第一个窗口"</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//设置窗口固定大小</span></span><br><span class="line">    setFixedSize(<span class="number">600</span>,<span class="number">400</span>);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="comment">//创建自定义的按钮</span></span><br><span class="line">    MyPushButton * myBtn  = <span class="keyword">new</span> MyPushButton;</span><br><span class="line">    myBtn-&gt;setParent(<span class="keyword">this</span>);</span><br><span class="line">    myBtn-&gt;setText(<span class="string">"我的按钮"</span>);</span><br><span class="line">    myBtn-&gt;move( <span class="number">300</span>,<span class="number">200</span>);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="comment">//点击按钮  关闭窗口</span></span><br><span class="line">    <span class="comment">//connect(  信号发送者，发送的信号，信号的接受者，处理的槽函数）</span></span><br><span class="line">    <span class="comment">//信号和槽 优点： 松散耦合</span></span><br><span class="line">   <span class="comment">// connect(myBtn, &amp;QPushButton::clicked , this, &amp;QWidget::close );</span></span><br><span class="line">    connect( myBtn , &amp;MyPushButton::clicked ,<span class="keyword">this</span>, &amp;MyWidget::close);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">MyWidget::~MyWidget()</span><br><span class="line">&#123;</span><br><span class="line">    qDebug() &lt;&lt; <span class="string">"MyWidget析构调用"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>mypushbutton.h</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">ifndef</span> MYPUSHBUTTON_H</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MYPUSHBUTTON_H</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QPushButton&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="comment">//这个类作用于什么,就继承什么</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MyPushButton</span> :</span> <span class="keyword">public</span> QPushButton</span><br><span class="line">&#123;</span><br><span class="line">    Q_OBJECT</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">MyPushButton</span><span class="params">(QWidget *parent = <span class="number">0</span>)</span></span>;</span><br><span class="line"></span><br><span class="line">    ~MyPushButton();</span><br><span class="line"></span><br><span class="line">signals:</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> slots:</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">endif</span> <span class="comment">// MYPUSHBUTTON_H</span></span></span><br></pre></td></tr></table></figure><p>mypushbutton.cpp</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mypushbutton.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QDebug&gt;</span></span></span><br><span class="line">MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">MyPushButton::~MyPushButton()</span><br><span class="line">&#123;</span><br><span class="line">    qDebug() &lt;&lt; <span class="string">"MyPushButton的析构函数调用"</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="对象模型对象树"><a class="markdownIt-Anchor" href="#对象模型对象树"></a> 对象模型（对象树）</h3><p>一定程度上简化了内存回收机制</p><p>当创建的对象 指定的父亲是由QObject或者Object派生的类时候，这个对象被加载到对象树上，当窗口关闭掉时候，树上的对象也都会被释放掉</p><h3 id="qt中的坐标系"><a class="markdownIt-Anchor" href="#qt中的坐标系"></a> Qt中的坐标系</h3><p>x以右侧为正</p><p>y以下侧为正</p><p>左上角是 0,0点</p><h3 id="qt中信号和槽基本使用"><a class="markdownIt-Anchor" href="#qt中信号和槽基本使用"></a> Qt中信号和槽基本使用</h3><p>![Qt信号和槽 ](/images/javawz/Qt信号和槽 .png)</p><p><img src="/images/javawz/image-20231017231902044.png" alt="image-20231017231902044"></p><p>需求：点击按钮关闭窗口</p><p>连接  connect ( 信号的发送者，发送的信号，信号的接受者，处理的槽函数)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">connect( myBtn , &amp;MyPushButton::clicked ,this, &amp;MyWidget::close);</span><br></pre></td></tr></table></figure><p>当自定义插槽类有多个信号时,要使用函数指针来传递给connect函数,否则会出现歧义性,导致出错。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;mywidget.h&quot;</span><br><span class="line">#include &lt;QPushButton&gt;</span><br><span class="line">#include &quot;mypushbutton.h&quot;</span><br><span class="line">#include &lt;QDebug&gt;</span><br><span class="line">//命名规范</span><br><span class="line">// 类名 首字母 大小  单词和单词之间 首字母 大写</span><br><span class="line">// 变量、函数名 首字母小写 单词和单词之间 首字母 大写</span><br><span class="line"></span><br><span class="line">//快捷键</span><br><span class="line">// 运行 ctrl + R</span><br><span class="line">// 编译 ctrl + B</span><br><span class="line">// 查询 ctrl + F</span><br><span class="line">// 注释 ctrl + /</span><br><span class="line">// 帮助 F1</span><br><span class="line">// 字体缩放  ctrl + 鼠标滚轮</span><br><span class="line">// 整行代码移动  ctrl + shift + ↑ ↓</span><br><span class="line">// 自动对齐  ctrl + i</span><br><span class="line">// 同名之间的.h .cpp切换  F4</span><br><span class="line"></span><br><span class="line">// 帮助文档 F1    左侧列表中按钮    C:\Qt\Qt5.6.0\5.6\mingw49_32\bin</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">MyWidget::MyWidget(QWidget *parent)</span><br><span class="line">    : QWidget(parent)</span><br><span class="line">&#123;</span><br><span class="line">    //按钮</span><br><span class="line">    QPushButton * btn = new QPushButton;</span><br><span class="line"></span><br><span class="line">    //btn-&gt;show(); //show用顶层方式弹出</span><br><span class="line"></span><br><span class="line">    //如果想显示到当前窗口中 ，需要做依赖</span><br><span class="line">    btn-&gt;setParent(this);</span><br><span class="line"></span><br><span class="line">    //显示文本</span><br><span class="line">    btn-&gt;setText(&quot;德玛西亚&quot;);</span><br><span class="line"></span><br><span class="line">    //按钮2</span><br><span class="line">    QPushButton * btn2 = new QPushButton(&quot;第二个&quot;,this);</span><br><span class="line"></span><br><span class="line">    //移动btn2</span><br><span class="line">    btn2-&gt;move(100,100);</span><br><span class="line"></span><br><span class="line">    //重置窗口大小</span><br><span class="line">    resize(600,400);</span><br><span class="line"></span><br><span class="line">    //按钮 可以重置大小吗？ 可以</span><br><span class="line">    //btn-&gt;resize(300,200);</span><br><span class="line"></span><br><span class="line">    //指定窗口标题</span><br><span class="line">    setWindowTitle(&quot;第一个窗口&quot;);</span><br><span class="line"></span><br><span class="line">    //设置窗口固定大小</span><br><span class="line">    setFixedSize(600,400);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //创建自定义的按钮</span><br><span class="line">    MyPushButton * myBtn  = new MyPushButton;</span><br><span class="line">    myBtn-&gt;setParent(this);</span><br><span class="line">    myBtn-&gt;setText(&quot;我的按钮&quot;);</span><br><span class="line">    myBtn-&gt;move( 300,200);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //点击按钮  关闭窗口</span><br><span class="line">    //connect(  信号发送者，发送的信号，信号的接受者，处理的槽函数）</span><br><span class="line">    //信号和槽 优点： 松散耦合</span><br><span class="line">   // connect(myBtn, &amp;QPushButton::clicked , this, &amp;QWidget::close );</span><br><span class="line">    connect( myBtn , &amp;MyPushButton::clicked ,this, &amp;MyWidget::close);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">MyWidget::~MyWidget()</span><br><span class="line">&#123;</span><br><span class="line">    qDebug() &lt;&lt; &quot;MyWidget析构调用&quot;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如果一个类找不到继承,可以选择QObject类</p><p>student.h</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">#ifndef STUDENT_H</span><br><span class="line">#define STUDENT_H</span><br><span class="line"></span><br><span class="line">#include &lt;QObject&gt;</span><br><span class="line"></span><br><span class="line">class Student : public QObject</span><br><span class="line">&#123;</span><br><span class="line">    Q_OBJECT</span><br><span class="line">public:</span><br><span class="line">    explicit Student(QObject *parent = 0);</span><br><span class="line"></span><br><span class="line">signals:</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //自定义槽函数 写到public slots  Qt 5.0版本以上 可以写成全局函数或者public作用域下 或者 lambda表达式</span><br><span class="line">public slots:</span><br><span class="line"></span><br><span class="line">    //返回值是void</span><br><span class="line">    //需要声明 也需要有实现</span><br><span class="line">    //可以有参数  可以发生重载</span><br><span class="line">    void treat();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    void treat(QString foodName);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">#endif // STUDENT_H</span><br></pre></td></tr></table></figure><p>student.cpp</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;student.h&quot;</span><br><span class="line">#include &lt;QDebug&gt;</span><br><span class="line">Student::Student(QObject *parent) : QObject(parent)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">void Student::treat()</span><br><span class="line">&#123;</span><br><span class="line">    qDebug() &lt;&lt; &quot;请老师吃饭&quot;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">void Student::treat(QString foodName)</span><br><span class="line">&#123;</span><br><span class="line">//如果打印QString类型的字符串会自带双引号,除非转换为chat * 类型</span><br><span class="line">    //QString 转 char *    通过.toUtf8转为 QByteArray 类型  通过 .data()转为 char *</span><br><span class="line"></span><br><span class="line">     qDebug() &lt;&lt; &quot;请老师吃饭 , 老师要吃： &quot; &lt;&lt; foodName.toUtf8().data();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>teacher.h</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">#ifndef TEACHER_H</span><br><span class="line">#define TEACHER_H</span><br><span class="line"></span><br><span class="line">#include &lt;QObject&gt;</span><br><span class="line"></span><br><span class="line">class Teacher : public QObject</span><br><span class="line">&#123;</span><br><span class="line">    Q_OBJECT</span><br><span class="line">public:</span><br><span class="line">    explicit Teacher(QObject *parent = 0);</span><br><span class="line"></span><br><span class="line">//自定义信号  写到signals下</span><br><span class="line"></span><br><span class="line">signals:</span><br><span class="line">    //返回值是void</span><br><span class="line">    //只需要声明 不需要实现</span><br><span class="line">    //可以有参数  可以发生重载</span><br><span class="line">    void hungry();</span><br><span class="line"></span><br><span class="line">    void hungry( QString foodName);</span><br><span class="line"></span><br><span class="line">public slots:</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">#endif // TEACHER_H</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;teacher.h&quot;</span><br><span class="line"></span><br><span class="line">Teacher::Teacher(QObject *parent) : QObject(parent)</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>widget.h</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">#ifndef WIDGET_H</span><br><span class="line">#define WIDGET_H</span><br><span class="line"></span><br><span class="line">#include &lt;QWidget&gt;</span><br><span class="line">#include &quot;student.h&quot;</span><br><span class="line">#include &quot;teacher.h&quot;</span><br><span class="line"></span><br><span class="line">class Widget : public QWidget</span><br><span class="line">&#123;</span><br><span class="line">    Q_OBJECT</span><br><span class="line"></span><br><span class="line">public:</span><br><span class="line">    Widget(QWidget *parent = 0);</span><br><span class="line">    ~Widget();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    Teacher * zt;</span><br><span class="line">    Student * st;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //下课</span><br><span class="line">    void classIsOver();</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">#endif // WIDGET_H</span><br></pre></td></tr></table></figure><p>widget.cpp</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br></pre></td><td class="code"><pre><span class="line">#include &quot;widget.h&quot;</span><br><span class="line">#include &lt;QPushButton&gt;</span><br><span class="line">#include &lt;QDebug&gt;</span><br><span class="line">// Teacher老师类</span><br><span class="line">// Student学生类</span><br><span class="line">// 下课后  老师会触发一个 饿了 的信号</span><br><span class="line">// 学生响应这个信号 并且 请老师吃饭</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Widget::Widget(QWidget *parent)</span><br><span class="line">    : QWidget(parent)</span><br><span class="line">&#123;</span><br><span class="line">//参数带this代表窗口关闭会执行析构函数</span><br><span class="line">    this-&gt;zt = new Teacher(this);</span><br><span class="line">    this-&gt;st = new Student(this);</span><br><span class="line"></span><br><span class="line">    //连接信号和槽</span><br><span class="line">    //connect(zt,&amp;Teacher::hungry,st,&amp;Student::treat);</span><br><span class="line"></span><br><span class="line">    //classIsOver();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //连接有参信号和槽</span><br><span class="line">    // 函数指针 可以指向 函数地址</span><br><span class="line">//    void(Teacher:: *teacherSignal)(QString) = &amp;Teacher::hungry;</span><br><span class="line"></span><br><span class="line">//    void(Student:: *studentSlot)(QString ) = &amp;Student::treat;</span><br><span class="line"></span><br><span class="line">//    connect(zt,teacherSignal, st,studentSlot);</span><br><span class="line"></span><br><span class="line">   // classIsOver();</span><br><span class="line"></span><br><span class="line">    //创建按钮</span><br><span class="line">    QPushButton * btn = new QPushButton(&quot;下课&quot; , this);</span><br><span class="line"></span><br><span class="line">    resize(600,400);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    void(Teacher:: *teacherSignal2)() = &amp;Teacher::hungry;</span><br><span class="line"></span><br><span class="line">    void(Student:: *studentSlot2)() = &amp;Student::treat;</span><br><span class="line"></span><br><span class="line">    connect(zt,teacherSignal2, st,studentSlot2);</span><br><span class="line"></span><br><span class="line">    //1、信号是可以连接信号</span><br><span class="line">    connect(btn,&amp;QPushButton::clicked,zt,teacherSignal2);</span><br><span class="line">    //2、可以断开信号和槽</span><br><span class="line">    disconnect(zt,teacherSignal2, st,studentSlot2);</span><br><span class="line"></span><br><span class="line">    //3、一个信号可以响应多个槽函数</span><br><span class="line"></span><br><span class="line">    //4、多个信号可以连接同一个槽函数</span><br><span class="line"></span><br><span class="line">    //5、信号和槽函数的参数类型 必须一一对应</span><br><span class="line">    //   信号的参数个数 可以多余槽函数的参数个数，反之不可以 , 参数类型要一一对应</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //Qt4版本信号和槽写法</span><br><span class="line">    //利用Qt4版本连接有参信号和槽</span><br><span class="line">    //优势 ：参数直观</span><br><span class="line">    //劣势 ：参数类型不做匹配检测</span><br><span class="line">    // Qt4本质   SIGNAL(&quot;hungry(int)&quot;)SLOT(&quot;treat(QString)&quot;)</span><br><span class="line">//    connect(zt, SIGNAL(hungry(QString)) , st , SLOT(treat(QString)));</span><br><span class="line"></span><br><span class="line">//    classIsOver();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    //[=] 函数体内可以使用Lambda所在作用范围内所有可见的局部变量</span><br><span class="line">    QPushButton * btn2 = new QPushButton(&quot;aaa&quot;,this);</span><br><span class="line">    QPushButton * btn3 = new QPushButton(&quot;aaa&quot;,this);</span><br><span class="line">    [=]()&#123;</span><br><span class="line">        btn2-&gt;setText(&quot;bbb&quot;);</span><br><span class="line">        btn3-&gt;setText(&quot;bbb&quot;);</span><br><span class="line">    &#125;();</span><br><span class="line"></span><br><span class="line">    //最常用lambda使用 [=]()&#123;&#125;</span><br><span class="line">    QPushButton * btn4 = new QPushButton(&quot;aaa&quot;,this);</span><br><span class="line">    btn4-&gt;move( 100, 0);</span><br><span class="line"></span><br><span class="line">    //当进行信号和槽连接时候，控件内会进入一个锁的状态</span><br><span class="line">    connect(btn4,&amp;QPushButton::clicked,this,[=]()&#123;</span><br><span class="line">        btn4-&gt;setText(&quot;bbb&quot;);</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   //加上mutable修饰符后，可以修改按值传递进来的拷贝</span><br><span class="line">   QPushButton * myBtn = new QPushButton (this);</span><br><span class="line">   QPushButton * myBtn2 = new QPushButton (this);</span><br><span class="line">   myBtn2-&gt;move(100,100);</span><br><span class="line">   int m = 10;</span><br><span class="line"></span><br><span class="line">   connect(myBtn,&amp;QPushButton::clicked,this,[m] () mutable &#123; m = 20; qDebug() &lt;&lt; m; &#125;);</span><br><span class="line"></span><br><span class="line">   connect(myBtn2,&amp;QPushButton::clicked,this,[=] ()  &#123; qDebug() &lt;&lt; m; &#125;);</span><br><span class="line"></span><br><span class="line">   qDebug() &lt;&lt; m;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   //-&gt; 返回值类型</span><br><span class="line">   int num = [=]()-&gt;int&#123;</span><br><span class="line">        return 1000;</span><br><span class="line">   &#125;();</span><br><span class="line">   qDebug() &lt;&lt; &quot;num = &quot; &lt;&lt; num ;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   //点击按钮 关闭窗口</span><br><span class="line">   connect(btn4,&amp;QPushButton::clicked,[=]()&#123;</span><br><span class="line">        //this-&gt;close();</span><br><span class="line">        st-&gt;treat(&quot;宫保鸡丁&quot;);</span><br><span class="line">   &#125;);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">void Widget::classIsOver()</span><br><span class="line">&#123;</span><br><span class="line">    //触发自定义信号</span><br><span class="line">//    emit this-&gt;zt-&gt;hungry();</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   emit this-&gt;zt-&gt;hungry(&quot;宫保鸡丁&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">Widget::~Widget()</span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="lambda表达式"><a class="markdownIt-Anchor" href="#lambda表达式"></a> Lambda表达式</h3><p>C++11中的Lambda表达式<strong>用于定义并创建匿名的函数对象</strong>，以简化编程工作。首先看一下Lambda表达式的基本构成：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[capture](parameters) mutable -&gt;return-type</span><br><span class="line">&#123;</span><br><span class="line">statement</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">[函数对象参数](操作符重载函数参数)mutable -&gt;返回值&#123;函数体&#125;</span><br></pre></td></tr></table></figure><p>函数对象参数有以下形式：<br>空。没有使用任何函数对象参数。</p><br><p>= ：函数体内可以使用Lambda所在作用范围内所有可见的局部变量（包括Lambda所在类的this），并且是值传递方式（相当于编译器自动为我们按值传递了所有局部变量）。</p><br><p>&amp; ：函数体内可以使用Lambda所在作用范围内所有可见的局部变量（包括Lambda所在类的this），并且是引用传递方式（相当于编译器自动为我们按引用传递了所有局部变量）。this。函数体内可以使用Lambda所在类中的成员变量。</p><br><p>a ：将a按值进行传递。按值进行传递时，函数体内不能修改传递进来的a的拷贝，因为默认情况下函数是const的。要修改传递进来的a的拷贝，可以添加mutable修饰符。</p><br><p>&amp;a ：将a按引用进行传递。</p><br><p>a, &amp;b ：将a按值进行传递，b按引用进行传递。</p><br><p>=，&amp;a, &amp;b ：除a和b按引用进行传递外，其他参数都按值进行传递。</p><br><p>&amp;, a, b ：除a和b按值进行传递外，其他参数都按引用进行传递。</p><br><p>操作符重载函数参数；<br>标识重载的()操作符的参数，没有参数时，这部分可以省略。参数可以通过按值（如：(a,b)）和按引用（如：(&amp;a,&amp;b)）两种方式进行传递。</p><br><p>可修改标示符；<br>mutable声明，这部分可以省略。按值传递函数对象参数时，加上mutable修饰符后，可以修改按值传递进来的拷贝（注意是能修改拷贝，而不是值本身）。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">QPushButton * myBtn = new QPushButton (this);</span><br><span class="line">QPushButton * myBtn2 = new QPushButton (this);</span><br><span class="line">myBtn2-&gt;move(100,100);</span><br><span class="line">int m = 10;</span><br><span class="line"></span><br><span class="line">connect(myBtn,&amp;QPushButton::clicked,this,[m] ()mutable &#123; m = 20; qDebug() &lt;&lt; m; &#125;);</span><br><span class="line"></span><br><span class="line">connect(myBtn2,&amp;QPushButton::clicked,this,[=] ()  &#123; qDebug() &lt;&lt; m; &#125;);</span><br><span class="line"></span><br><span class="line">qDebug() &lt;&lt; m;</span><br></pre></td></tr></table></figure><p>函数返回值；</p><p><code>-&gt;</code>返回值类型，标识函数返回值的类型，当返回值为void，或者函数体中只有一处return的地方（此时编译器可以自动推断出返回值类型）时，这部分可以省略。</p><p>{}是函数体；</p><p>​<code>{}</code>，标识函数的实现，这部分不能省略，但函数体可以为空。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;pro文件&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#pro文件&quot;&gt;&lt;/a&gt; .pro文件&lt;/h3&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pr
      
    
    </summary>
    
      <category term="Qt" scheme="https://xiaowuyoucy.github.io/categories/Qt/"/>
    
    
  </entry>
  
  <entry>
    <title>安装与配置Linux操作系统</title>
    <link href="https://xiaowuyoucy.github.io/2023/04/10/%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AELinux%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/"/>
    <id>https://xiaowuyoucy.github.io/2023/04/10/安装与配置Linux操作系统/</id>
    <published>2023-04-10T14:29:52.000Z</published>
    <updated>2023-04-11T16:16:03.934Z</updated>
    
    <content type="html"><![CDATA[<p>Linux一般由3个部分组成：内核(kernel)、命令解析层（Shell或其他操作环境）、实用工具。</p><h3 id="重置root管理员密码"><a class="markdownIt-Anchor" href="#重置root管理员密码"></a> 重置root管理员密码</h3><p>（1）先确认是RHEL8</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat /etc/redhat-release</span><br></pre></td></tr></table></figure><p>（2）在终端输入reboot，重启之后按E进入内核编辑模式</p><p>（3） 在linux参数行的最后面追加 “rd.break” 然后按下CTRL+X 运行修改过的内核程序</p><p>（4）进入紧急模式。依次输入以下命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">mount -o remount,rw /sysroot</span><br><span class="line">chroot /sysroot</span><br><span class="line">passwd   这一步按下回车后要输入新密码和确认新密码,输入过程不显示</span><br><span class="line">touch /.autorelabel</span><br><span class="line">exit</span><br><span class="line">reboot</span><br></pre></td></tr></table></figure><h3 id="yum软件仓库"><a class="markdownIt-Anchor" href="#yum软件仓库"></a> yum软件仓库</h3><p>yum软件仓库是为了解决安装软件的时候,如果需要大量的依赖,安装起来是非常痛苦的,所以yum的出现是为了降低软件安装的难度。</p><p>RHEL 先将发布的软件存放到yum服务器内，然后分析软件的依赖属性，将分析出来的软件信息生成清单列表</p><p>容器：软件清单列表数据和软件所在的位置称为容器</p><p>Linux用户安装程序—&gt; 先yum服务器中的容器发起下载xxxx软件清单的请求-------客户机得到清单列表后会和本机的RPM数据库做比较,比较后把不存在的依赖一步下载过来就可以了.</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;Linux一般由3个部分组成：内核(kernel)、命令解析层（Shell或其他操作环境）、实用工具。&lt;/p&gt;
&lt;h3 id=&quot;重置root管理员密码&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#重置root管理员密码&quot;&gt;&lt;/a&gt; 重置root
      
    
    </summary>
    
      <category term="RHEL8" scheme="https://xiaowuyoucy.github.io/categories/RHEL8/"/>
    
    
  </entry>
  
  <entry>
    <title>逆向工程基础</title>
    <link href="https://xiaowuyoucy.github.io/2022/07/10/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B%E5%9F%BA%E7%A1%80/"/>
    <id>https://xiaowuyoucy.github.io/2022/07/10/逆向工程基础/</id>
    <published>2022-07-10T09:21:30.000Z</published>
    <updated>2022-07-13T17:31:26.457Z</updated>
    
    <content type="html"><![CDATA[<h1 id="关于逆向工程"><a class="markdownIt-Anchor" href="#关于逆向工程"></a> 关于逆向工程</h1><h3 id="逆向工程reverse-engineering简称re"><a class="markdownIt-Anchor" href="#逆向工程reverse-engineering简称re"></a> 逆向工程（Reverse Engineering，简称RE)</h3><h3 id="代码逆向工程reverse-code-engineering简称rce"><a class="markdownIt-Anchor" href="#代码逆向工程reverse-code-engineering简称rce"></a> 代码逆向工程（Reverse Code Engineering，简称RCE）</h3><h4 id="逆向分析法"><a class="markdownIt-Anchor" href="#逆向分析法"></a> 逆向分析法</h4><ul><li>静态分析法<ul><li>在不执行代码文件的情形下，对代码进行静态分析的一种方法。</li></ul></li><li>动态分析法<ul><li>在程序文件的执行过程中对代码进行动态分析</li></ul></li></ul><p>Hex Editor是一个简单易用的工具，使用它可以轻松地把二进制文件转换为十六进制文件。</p><p><img src="/images/javawz/image-20220710181629406.png" alt="image-20220710181629406"></p><h4 id="打补丁与破解"><a class="markdownIt-Anchor" href="#打补丁与破解"></a> “打补丁”与“破解”</h4><p>对应用程序文件或进程内存内容的更改被称为“打补丁”（Patch），“破解”（Crack）与其含义类似</p><h1 id="逆向分析hello-world程序"><a class="markdownIt-Anchor" href="#逆向分析hello-world程序"></a> 逆向分析Hello World！程序</h1><p>OllyDbg: <a href="http://www.ollydbg.de" target="_blank" rel="noopener">http://www.ollydbg.de</a></p><p>OllyDbg是一种强大的Win32调试工具</p><p><img src="/images/javawz/image-20220710182151607.png" alt="image-20220710182151607"></p><h3 id="入口点"><a class="markdownIt-Anchor" href="#入口点"></a> 入口点</h3><p>EP是Windows可执行文件（EXE、DLL、SYS等）的代码入口点，是执行应用程序时最先执行的代码的起始位置，它依赖于CPU。</p><p>调试器停止的地点即为HelloWorld.exe执行的起始地址，它是一段EP （EntryPoint，入口点）代码。</p><p>地址：进程的虚拟内存地址（Virtual Address， VA）<br>指令：IA32 （或x86） CPU指令<br>反汇编代码：将OP code转换为便于查看的汇编指令<br>注释：调试器添加的注释（根据选项不同，显示的注释略有不同）</p><h3 id="ollydbg基本指令"><a class="markdownIt-Anchor" href="#ollydbg基本指令"></a> OllyDbg基本指令</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">F2：设置断点/取消断点</span><br><span class="line"></span><br><span class="line">F7：单步步入</span><br><span class="line"></span><br><span class="line">F8：单步执行</span><br><span class="line"></span><br><span class="line">Ctrl + F2：重新调试</span><br><span class="line"></span><br><span class="line">Ctrl+G：跳转到指定地址（查看代码时使用，非运行时命令）</span><br><span class="line"></span><br><span class="line">F9：运行（遇到断点时暂停）</span><br><span class="line"></span><br><span class="line">Ctrl+F9：执行函数代码内的命令，直到遇到RETN命令，用于跳出函数体</span><br><span class="line"></span><br><span class="line">F4：执行到光标所在位置（直接转到要调试的位置）</span><br><span class="line"></span><br><span class="line">;    添加注释</span><br><span class="line"></span><br><span class="line">:  添加标签</span><br><span class="line"></span><br><span class="line">*     显示当前EIP(命令指针)位置</span><br><span class="line"></span><br><span class="line">-     显示上一个光标位置</span><br><span class="line"></span><br><span class="line">Enter：若光标处有CALL/JMP等指令，则跟踪并显示相关地址（运行时不可用，简单查看函数内容时非常有用）</span><br><span class="line"></span><br><span class="line">空格键：编辑汇编代码</span><br></pre></td></tr></table></figure><h3 id="设置大本营的四种方法"><a class="markdownIt-Anchor" href="#设置大本营的四种方法"></a> 设置“大本营”的四种方法</h3><h4 id="1goto命令"><a class="markdownIt-Anchor" href="#1goto命令"></a> 1.Goto命令</h4><p>执行Go to（Ctrl+G）命令</p><p><img src="/images/javawz/image-20220710195834481.png" alt="image-20220710195834481"></p><h4 id="2设置断点"><a class="markdownIt-Anchor" href="#2设置断点"></a> 2.设置断点</h4><p>在OllyDbg菜单栏中依次选择View-Breakpoints选项（快捷键（ALT+B）），打开Breakpoints对话框，列出代码中设置的断点</p><p><img src="/images/javawz/image-20220710200136557.png" alt="image-20220710200136557"></p><p>在断点列表中双击某个断点会直接跳转到相应位置。</p><h4 id="3注释"><a class="markdownIt-Anchor" href="#3注释"></a> 3.注释</h4><p>按键盘上的“；”键可以在指定地址处添加注释，还可以通过查找命令找到它。</p><p>在鼠标右键菜单中依次选择Search for-User defined comment，这样就能看到用户输入的所有注释</p><p><img src="/images/javawz/image-20220710200340518.png" alt="image-20220710200340518"></p><p>双击相应注释，光标将自动定位到相应位置。</p><h4 id="4标签"><a class="markdownIt-Anchor" href="#4标签"></a> 4.标签</h4><p>单击鼠标右键，依次选择Search forlUser defined labels菜单即可打开User defined labels窗口，该窗口列出了用户设置的标签</p><p>在User defined labels窗口中双击某个标签，光标即移动到相应位置。</p><p><img src="/images/javawz/image-20220710200640747.png" alt="image-20220710200640747"></p><p><img src="/images/javawz/image-20220710200714534.png" alt="image-20220710200714534"></p><h3 id="快速查找指定代码的四种方法"><a class="markdownIt-Anchor" href="#快速查找指定代码的四种方法"></a> 快速查找指定代码的四种方法</h3><p>1.代码执行法</p><p>2.字符串检索法</p><p>鼠标右键菜单-Search for-All referenced text strings</p><p><img src="/images/javawz/image-20220710201316743.png" alt="image-20220710201316743"></p><p>双击字符串，光标定位到使用该字符串的指令处</p><p>VC++中， static字符串会被默认保存为Unicode码形式， static字符串是指在程序内部被硬编码（Hard Coding）的字符串。</p><h4 id="api检索法1在调用代码中设置断点"><a class="markdownIt-Anchor" href="#api检索法1在调用代码中设置断点"></a> API检索法（1）：在调用代码中设置断点</h4><p>鼠标右键菜单-Search for-All intermodular calls</p><p><img src="/images/javawz/image-20220710201618956.png" alt="image-20220710201618956"></p><p>双击它，光标即定位到调用它的地址处</p><h4 id="api检索法2在api代码中设置断点"><a class="markdownIt-Anchor" href="#api检索法2在api代码中设置断点"></a> API检索法（2）：在API代码中设置断点</h4><p>鼠标右键菜单-Search for-Name in all calls</p><p>在OllyDbg菜单栏中依次选择View-Memory菜单（快捷键Alt+M），打开内存映射窗口。内存映射窗口中显示了一部分HelloWorld.exe进程内存。在图底部的方框中可以看到，USER32库被加载到了内存。</p><p><img src="/images/javawz/image-20220710202412666.png" alt="image-20220710202412666"></p><p>使用OllyDbg中的Name in all modules命令可以列出被加载的DLL文件中提供的所有API。使用Name in all modules命令打开All names窗口，单击Name栏目按名称排序，通过键盘敲出MessageBoxW后，光标会自动定位到MessageBoxW上</p><p><img src="/images/javawz/image-20220710203219441.png" alt="image-20220710203219441"></p><p>双击MessageBoxW函数后就会显示其代码，它实现于USER32.dll库中</p><p><img src="/images/javawz/image-20220710203502389.png" alt="image-20220710203502389"></p><p>模块中的地址和本程序的地址是完全不同的。</p><h3 id="修改字符串的两种方法"><a class="markdownIt-Anchor" href="#修改字符串的两种方法"></a> 修改字符串的两种方法</h3><h4 id="1直接修改字符串缓冲区"><a class="markdownIt-Anchor" href="#1直接修改字符串缓冲区"></a> 1.直接修改字符串缓冲区</h4><p>在Dump窗口中按Ctrl+G快捷键执行Go to命令，在弹出窗口中输入地址进入字符串缓冲区。然后使用鼠标选中地址处的字符串，按Ctrl+E快捷键打开编辑窗口</p><p><img src="/images/javawz/image-20220710220035154.png" alt="image-20220710220035154"></p><p>注意:<br>若新字符串长度大于原有字符串，执行覆盖操作时可能损坏字符串后面的数据，所以一定要小心。特别是字符串后面有非常重要的数据时，覆盖操作导致数据损坏就会引发程序内存引用错误。</p><p>新字符串的长度不应比原字符串长。</p><h4 id="保存更改到可执行文件"><a class="markdownIt-Anchor" href="#保存更改到可执行文件"></a> 保存更改到可执行文件</h4><p>选中更改后的“Hello Reversing”字符串，单击鼠标右键，在弹出的菜单中选择Copy to executable file菜单</p><p><img src="/images/javawz/image-20220710220428077.png" alt="image-20220710220428077"></p><p>在弹出的Hex窗口中单击鼠标右键，选择Save file菜单，在Save file as对话框中输人文件名“Hello Reversing.exe”后保存为.exe可执行文件。</p><p>2.在其他内存区域新建字符串并传递给消息函数</p><p><img src="/images/javawz/image-20220710220905979.png" alt="image-20220710220905979"></p><p><img src="/images/javawz/image-20220710220921112.png" alt="image-20220710220921112"></p><p><img src="/images/javawz/image-20220710220933154.png" alt="image-20220710220933154"></p><p><img src="/images/javawz/image-20220710220950573.png" alt="image-20220710220950573"></p><br><br><br><br><h1 id="小端序标记法"><a class="markdownIt-Anchor" href="#小端序标记法"></a> 小端序标记法</h1><h3 id="字节序"><a class="markdownIt-Anchor" href="#字节序"></a> 字节序</h3><p><img src="/images/javawz/image-20220713005301379.png" alt="image-20220713005301379"></p><p>字节型: 大小端的字节顺序都是一样的。</p><p>大端：低地址放数据的高位</p><p>小端：高地址放数据的低位</p><p>OD中查看小端序</p><p><img src="/images/javawz/image-20220713005536736.png" alt="image-20220713005536736"></p><p><br><br></p><h1 id="ia-32寄存器基本讲解"><a class="markdownIt-Anchor" href="#ia-32寄存器基本讲解"></a> IA-32寄存器基本讲解</h1><h3 id="什么是cpu寄存器"><a class="markdownIt-Anchor" href="#什么是cpu寄存器"></a> 什么是CPU寄存器</h3><p>寄存器是CPU内部用来存放数据的一些小型存储区域</p><p><br><br></p><h4 id="基本程序运行寄存器"><a class="markdownIt-Anchor" href="#基本程序运行寄存器"></a> 基本程序运行寄存器</h4><p>通用寄存器（ General Purpose Registers， 32位， 8个）<br>段寄存器（ Segment Registers， 16位， 6个）<br>程序状态与控制寄存器（ Program Status and Control Registers， 32位， 1个）<br>指令指针寄存器（Instruction Pointer， 32位， 1个）</p><p><img src="/images/javawz/image-20220713005855404.png" alt="image-20220713005855404"></p><p><img src="/images/javawz/image-20220713005916672.png" alt="image-20220713005916672"></p><br><p>EAX：（0~31）32位<br>AX：（0~15）EAX的低16位<br>AH：（8~15）AX的高8位<br>AL：（0-7）AX的低8位</p><br><p>循环命令（LOOP）中，ECX用来循环计数（loop count），每执行一次循环，ECX都会减1。EAX一般用在函数返回值中，所有Win32API函数都会先把返回值保存到EAX再返回。</p><br><p>Win32 API函数在内部会使用ECX与EDX</p><br><br><p>EBP：（SS段中栈内数据指针）扩展基址指针寄存器<br>ESI：（字符串操作源指针）源变址寄存器<br>EDI：（字符串操作目标指针）目的变址寄存器<br>ESP：（SS段中栈指针）栈指针寄存器</p><br><p>ESP指示栈区域的栈顶地址</p><p>EBP表示栈区域的基地址，函数被调用时保存ESP的值，函数返回时再把值返回ESP，保证栈不会崩溃，这称为栈帧技术。</p><br><p>ESI和EDI与特定指令（LODS、STOS、REP、MOVS等）一起使用，主要用于内存复制。</p><p><br><br></p><h4 id="段寄存器"><a class="markdownIt-Anchor" href="#段寄存器"></a> 段寄存器</h4><p>段内存记录在SDT（Segment Descriptor Table，段描述符表）</p><p>段寄存器就持有这些SDT的索引（index）。</p><p>段寄存器有6各个：CS 、SS、DS、ES、FS、GS 每个寄存器大小为16位，2个字节。</p><p>每个段寄存器指向的段描述符（Segment Descriptor）与虚拟内存结合，形成一个线性地址（Linear Address），借助分页技术，线性地址最终被转换为实际的物理地址（Physical Address）。</p><br><p>CS： Code Segment，代码段寄存器<br>SS： Stack Segment，栈段寄存器<br>DS： Data Segment，数据段寄存器<br>ES： Extra （Data） Segment，附加（数据）段寄存器<br>FS： Data Segment，数据段寄存器<br>GS： Data Segment，数据段寄存器</p><br><p><img src="/images/javawz/image-20220713013432002.png" alt="image-20220713013432002"></p><br><p>程序调试中会经常用到FS寄存器，它用于计算SEH（Structured Exception Handler，结构化异常处理机制）、TEB（Thread Environment Block，线程环境块）、PEB（Process Environment Block，进程环境块）等地址</p><p><br><br></p><h4 id="程序状态与控制寄存器"><a class="markdownIt-Anchor" href="#程序状态与控制寄存器"></a> 程序状态与控制寄存器</h4><p>EFLAGS：Flag Register，标志寄存器</p><p>其大小为4个字节（32位）</p><p>EFLAGS寄存器的每位都有意义，每位的值或为1或为0，代表On/Off或True/False。</p><p>ZF（Zero Flag，零标志）</p><p>OF（Overflow Flag，溢出标志)</p><p>CF（Carry Flag，进位标志）</p><p><img src="/images/javawz/image-20220713014111043.png" alt="image-20220713014111043"></p><p>ZF<br>若运算结果为0，则其值为1（True），否则其值为0（False）。<br>OF<br>有符号整数（signed integer）溢出时， OF值被置为1。此外， MSB （Most Significant Bit，<br>最高有效位）改变时，其值也被设为1。<br>CF<br>无符号整数（unsigned integer）溢出时，其值也被置为1。</p><p><br><br></p><h4 id="指令指针寄存器"><a class="markdownIt-Anchor" href="#指令指针寄存器"></a> 指令指针寄存器</h4><p>EIP：Instruction Pointer，指令指针寄存器</p><p>程序运行时，CPU会读取EIP中一条指令的地址，传送指令到指令缓冲区后，EIP寄存器的值自动增加，增加的大小即是读取指令的字节大小。</p><p>不能直接修改EIP的值，只能通过其他指令间接修改</p><p><br><br></p><br><h1 id="栈"><a class="markdownIt-Anchor" href="#栈"></a> 栈</h1><p>（1）暂时保存函数内的局部变量。<br>（2）调用函数时传递参数。<br>（3）保存函数返回后的地址。</p><p>栈其实是一种数据结构，它按照FILO（First In Last Out，后进先出）的原则存储数据。</p><p><img src="/images/javawz/image-20220714011408035.png" alt="image-20220714011408035"></p><p>栈顶指针（ESP）初始状态指向栈底端。</p><p>执行PUSH命令将数据压入栈时，栈顶指针就会上移到栈顶端。</p><p>执行POP命令从栈中弹出数据时，若栈为空，则栈顶指针重新移动到栈底端。</p><p>栈是一种由高地址向低地址扩展的数据结构</p><p>栈是逆向扩展的</p><p>从栈中弹出数据后，ESP随之向下移动。</p><p>向栈压入数据时，栈顶指针减小，向低地址移动；从栈中弹出数据时，栈顶指针增<br>加，向高地址移动。</p><h1 id="汇编指令"><a class="markdownIt-Anchor" href="#汇编指令"></a> 汇编指令</h1><p><img src="/images/javawz/image-20220714012232945.png" alt="image-20220714012232945"></p><p>函数参数压入栈时是从最后一个参数开始压入的。</p><p><img src="/images/javawz/image-20220714012419678.png" alt="image-20220714012419678"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;关于逆向工程&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#关于逆向工程&quot;&gt;&lt;/a&gt; 关于逆向工程&lt;/h1&gt;
&lt;h3 id=&quot;逆向工程reverse-engineering简称re&quot;&gt;&lt;a class=&quot;markdownIt-Ancho
      
    
    </summary>
    
      <category term="逆向工程" scheme="https://xiaowuyoucy.github.io/categories/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>Qt操作Json</title>
    <link href="https://xiaowuyoucy.github.io/2022/06/26/Qt%E6%93%8D%E4%BD%9CJson/"/>
    <id>https://xiaowuyoucy.github.io/2022/06/26/Qt操作Json/</id>
    <published>2022-06-25T16:30:11.000Z</published>
    <updated>2022-06-27T08:07:00.698Z</updated>
    
    <content type="html"><![CDATA[<h3 id="json介绍"><a class="markdownIt-Anchor" href="#json介绍"></a> json介绍:</h3><p>json分为:</p><ul><li>json对象</li><li>json数组</li></ul><h4 id="json对象"><a class="markdownIt-Anchor" href="#json对象"></a> json对象:</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">&quot;class&quot;:31,</span><br><span class="line">&quot;count&quot;:51,</span><br><span class="line">&quot;master&quot;:&quot;yalong&quot;,</span><br><span class="line">&quot;banzhuren&quot;:&quot;chenlaoshi&quot;,</span><br><span class="line">&quot;like&quot;:[&quot;dancing&quot;, &quot;sing&quot;, &quot;drinking&quot;], </span><br><span class="line">&quot;hometown&quot;:&#123;&quot;hebei&quot;:&quot;baoding&quot;, &quot;henan&quot;:&quot;xinyang&quot;&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br><h4 id="json数组"><a class="markdownIt-Anchor" href="#json数组"></a> json数组:</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[10, 10.5, [&quot;xiaohu&quot;, &quot;liming&quot;, 10], &#123;&quot;name&quot;:&quot;xiaohu&quot;, &quot;age&quot;:32, &quot;sex&quot;:&quot;man&quot;&#125;]</span><br></pre></td></tr></table></figure><p>1 json对象格式的数据都是以key:value的形式存在的, 其中key值是字符串形式的.<br>2 在json对象中, value值可以是子对象, 也可以是数组<br>3 在json格式的文件中, 只能是json对象或者是json数组<br>4 在json数组中, 数据的类型不定, 可以是double int string 子对象, 子数组.</p><br><br><h3 id="头文件"><a class="markdownIt-Anchor" href="#头文件"></a> 头文件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;QJsonDocument&gt;</span><br><span class="line">#include &lt;QJsonArray&gt;</span><br><span class="line">#include &lt;QJsonObject&gt;</span><br><span class="line">#include &lt;QByteArray&gt;</span><br><span class="line">#include &lt;QJsonValue&gt;</span><br><span class="line">#include &lt;QFile&gt;</span><br></pre></td></tr></table></figure><br><br><h3 id="json对象操作"><a class="markdownIt-Anchor" href="#json对象操作"></a> json对象操作</h3><h4 id="创建json对象"><a class="markdownIt-Anchor" href="#创建json对象"></a> 创建json对象</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">QJsonObject json;</span><br></pre></td></tr></table></figure><br><h4 id="给json对象插入值"><a class="markdownIt-Anchor" href="#给json对象插入值"></a> 给json对象插入值</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">iterator QJsonObject::insert(const QString &amp;key, const QJsonValue &amp;value)</span><br></pre></td></tr></table></figure><br><h3 id="json数组操作"><a class="markdownIt-Anchor" href="#json数组操作"></a> json数组操作</h3><h4 id="创建json数组"><a class="markdownIt-Anchor" href="#创建json数组"></a> 创建json数组</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">QJsonArray jsonArr;</span><br></pre></td></tr></table></figure><br><p>给json数组插入值</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">void QJsonArray::append(const QJsonValue &amp;value)</span><br></pre></td></tr></table></figure><br><h4 id="将qjsonobject-或qjsonarray转换为-qjsondocument"><a class="markdownIt-Anchor" href="#将qjsonobject-或qjsonarray转换为-qjsondocument"></a> 将QJsonObject 或QJsonArray转换为 QJsonDocument</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">JsonDocument::QJsonDocument(const QJsonObject &amp;object) //将json对象转换为QJsonDocument</span><br><span class="line"></span><br><span class="line">JsonDocument::QJsonDocument(const QJsonArray &amp;array)//将json数组转换为QJsonDocument</span><br></pre></td></tr></table></figure><br><h4 id="将qjsondocument对象转换为qbytearray对象"><a class="markdownIt-Anchor" href="#将qjsondocument对象转换为qbytearray对象"></a> 将QJsonDocument对象转换为QByteArray对象</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">QByteArray QJsonDocument::toJson(JsonFormat format = Indented) const</span><br></pre></td></tr></table></figure><p><br><br></p><h3 id="操作文件"><a class="markdownIt-Anchor" href="#操作文件"></a> 操作文件</h3><h4 id="创建文件对象"><a class="markdownIt-Anchor" href="#创建文件对象"></a> 创建文件对象</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">QFile::QFile(const QString &amp;name)</span><br><span class="line"></span><br><span class="line">QFile file(fileName);</span><br></pre></td></tr></table></figure><p><br><br></p><h4 id="打开文件"><a class="markdownIt-Anchor" href="#打开文件"></a> 打开文件</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">virtual bool open(OpenMode mode)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">QIODevice::NotOpen0x0000The device is not open.</span><br><span class="line">QIODevice::ReadOnly0x0001The device is open for reading.</span><br><span class="line">QIODevice::WriteOnly0x0002The device is open for writing. Note that this mode implies Truncate.</span><br><span class="line">QIODevice::ReadWriteReadOnly | WriteOnlyThe device is open for reading and writing.</span><br><span class="line">QIODevice::Append0x0004The device is opened in append mode so that all data is written to the end of the file.</span><br><span class="line"></span><br><span class="line">QIODevice::Truncate0x0008If possible, the device is truncated before it is opened. All earlier contents of the device are lost.</span><br><span class="line"></span><br><span class="line">QIODevice::Text0x0010When reading, the end-of-line terminators are translated to &apos;\n&apos;. When writing, the end-of-line terminators are translated to the local encoding, for example &apos;\r\n&apos; for Win32.</span><br><span class="line"></span><br><span class="line">QIODevice::Unbuffered0x0020Any buffer in the device is bypassed.</span><br></pre></td></tr></table></figure><br><br><h4 id="读文件"><a class="markdownIt-Anchor" href="#读文件"></a> 读文件</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">QByteArray QIODevice::readAll()//一次性读完</span><br><span class="line"></span><br><span class="line">QByteArray byteArray = file.readAll();</span><br></pre></td></tr></table></figure><br><h4 id="将qbytearray类对象转换为qjsondocument"><a class="markdownIt-Anchor" href="#将qbytearray类对象转换为qjsondocument"></a> 将QByteArray类对象转换为QJsonDocument</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">QJsonDocument fromJson(const QByteArray &amp;json, QJsonParseError *error = Q_NULLPTR)</span><br><span class="line"></span><br><span class="line">QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray);</span><br></pre></td></tr></table></figure><br><h4 id="判断是不是对象"><a class="markdownIt-Anchor" href="#判断是不是对象"></a> 判断是不是对象</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bool QJsonDocument::isObject() const</span><br></pre></td></tr></table></figure><br><h4 id="将qjsondocument转换为qjsonobject"><a class="markdownIt-Anchor" href="#将qjsondocument转换为qjsonobject"></a> 将QJsonDocument转换为QJsonObject</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">QJsonObject QJsonDocument::object() const</span><br></pre></td></tr></table></figure><h4 id="将qjsondocument转换为qjsonarray"><a class="markdownIt-Anchor" href="#将qjsondocument转换为qjsonarray"></a> 将QJsonDocument转换为QJsonArray</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">QJsonArray QJsonDocument::array() const</span><br></pre></td></tr></table></figure><h4 id="获取对象中所有的key值"><a class="markdownIt-Anchor" href="#获取对象中所有的key值"></a> 获取对象中所有的key值</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">QStringList QJsonObject::keys() const</span><br></pre></td></tr></table></figure><h4 id="返回key的数量"><a class="markdownIt-Anchor" href="#返回key的数量"></a> 返回key的数量</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int QJsonObject::size() const</span><br></pre></td></tr></table></figure><h4 id="根据key值获取value值"><a class="markdownIt-Anchor" href="#根据key值获取value值"></a> 根据key值获取value值</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">QJsonValue QJsonObject::value(const QString &amp;key) const</span><br><span class="line">QJsonValue QJsonObject::value(QLatin1String key) const</span><br></pre></td></tr></table></figure><h4 id="判断value值的类型"><a class="markdownIt-Anchor" href="#判断value值的类型"></a> 判断value值的类型</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">bool isArray() const</span><br><span class="line">bool isBool() const</span><br><span class="line">bool isDouble() const</span><br><span class="line">bool isNull() const</span><br><span class="line">bool isObject() const</span><br><span class="line">bool isString() const</span><br><span class="line">bool isUndefined() const</span><br></pre></td></tr></table></figure><h4 id="将value转换到对应类型的值"><a class="markdownIt-Anchor" href="#将value转换到对应类型的值"></a> 将value转换到对应类型的值</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">QJsonArray toArray(const QJsonArray &amp;defaultValue) const//转换到数组</span><br><span class="line">QJsonArray toArray() const//转换到数组</span><br><span class="line"></span><br><span class="line">bool toBool(bool defaultValue = false) const//转换到布尔</span><br><span class="line"></span><br><span class="line">double toDouble(double defaultValue = 0) const//转换到到double</span><br><span class="line"></span><br><span class="line">int toInt(int defaultValue = 0) const//转换到整型</span><br><span class="line"></span><br><span class="line">QJsonObject toObject(const QJsonObject &amp;defaultValue) const//转换到对象</span><br><span class="line">QJsonObject toObject() const//转换到对象</span><br><span class="line"></span><br><span class="line">QString toString() const//转换到字符串</span><br><span class="line">QString toString(const QString &amp;defaultValue) const//转换到字符串</span><br><span class="line"></span><br><span class="line">QVariant toVariant() const</span><br></pre></td></tr></table></figure><p><br><br></p><h4 id="将qjsondocument转换为const-char"><a class="markdownIt-Anchor" href="#将qjsondocument转换为const-char"></a> 将QJsonDocument转换为const char *</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">const char *QJsonDocument::rawData(int *size) const</span><br></pre></td></tr></table></figure><h4 id="将const-char-转换为qjsondocument"><a class="markdownIt-Anchor" href="#将const-char-转换为qjsondocument"></a> 将const char * 转换为QJsonDocument</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fromRawData(const char *data, int size, DataValidation validation = Validate)</span><br></pre></td></tr></table></figure><p><br><br><br></p><h2 id="例子"><a class="markdownIt-Anchor" href="#例子"></a> 例子</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QCoreApplication&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QJsonDocument&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QJsonArray&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QJsonObject&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QByteArray&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QJsonValue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QFile&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;QDebug&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">writeJsonToFile</span><span class="params">(<span class="keyword">char</span> *fileName)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="comment">//第一种: 将json对象写入磁盘文件</span></span><br><span class="line">    <span class="comment">//创建一个json对象</span></span><br><span class="line">    <span class="comment">/*QJsonObject json;</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">    //给json对象插入值</span></span><br><span class="line"><span class="comment">    // iterator insert(const QString &amp;key, const QJsonValue &amp;value)</span></span><br><span class="line"><span class="comment">    json.insert("name", "xiaowu");</span></span><br><span class="line"><span class="comment">    json.insert("age", 21);</span></span><br><span class="line"><span class="comment">    json.insert("sex", "female");</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">    //插入子对象</span></span><br><span class="line"><span class="comment">    QJsonObject subJson;</span></span><br><span class="line"><span class="comment">    subJson.insert("father", "longji");</span></span><br><span class="line"><span class="comment">    subJson.insert("mather", "liwei");</span></span><br><span class="line"><span class="comment">    subJson.insert("sister", "wangjin");</span></span><br><span class="line"><span class="comment">    json.insert("family", subJson);</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">    //插入json数组</span></span><br><span class="line"><span class="comment">    QJsonArray jsonArr;</span></span><br><span class="line"><span class="comment">    jsonArr.append("english"); </span></span><br><span class="line"><span class="comment">    jsonArr.append("chinese");</span></span><br><span class="line"><span class="comment">    jsonArr.append("math");</span></span><br><span class="line"><span class="comment">    jsonArr.append("history");</span></span><br><span class="line"><span class="comment">    json.insert("course", jsonArr);*/</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">//第二种: 将json数组写入磁盘文件</span></span><br><span class="line">    <span class="comment">//构造一个QJsonArray对象</span></span><br><span class="line">    QJsonArray <span class="built_in">array</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">//void append(const QJsonValue &amp;value)</span></span><br><span class="line">    <span class="comment">//给array对象添加值</span></span><br><span class="line">    <span class="built_in">array</span>.append(<span class="number">10</span>);</span><br><span class="line">    <span class="built_in">array</span>.append(<span class="string">"jinyanlong"</span>);</span><br><span class="line">    <span class="built_in">array</span>.append(<span class="literal">true</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//添加子数组到array中</span></span><br><span class="line">    QJsonArray subArray;</span><br><span class="line">    subArray.append(<span class="string">"english"</span>);</span><br><span class="line">    subArray.append(<span class="string">"chinese"</span>);</span><br><span class="line">    subArray.append(<span class="string">"history"</span>);</span><br><span class="line">    <span class="built_in">array</span>.append(subArray);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//添加对象到array中</span></span><br><span class="line">    QJsonObject subObj;</span><br><span class="line">    subObj.insert(<span class="string">"mother"</span>, <span class="string">"xiaoling"</span>);</span><br><span class="line">    subObj.insert(<span class="string">"father"</span>, <span class="string">"xiaotong"</span>);</span><br><span class="line">    subObj.insert(<span class="string">"sister"</span>, <span class="string">"damiao"</span>);</span><br><span class="line">    <span class="built_in">array</span>.append(subObj);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//将QJsonObject 转换为 QJsonDocument</span></span><br><span class="line">    <span class="comment">//JsonDocument::QJsonDocument(const QJsonObject &amp;object)</span></span><br><span class="line">    <span class="comment">//QJsonDocument jsonDoc(json);</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">//QJsonDocument(const QJsonArray &amp;array)</span></span><br><span class="line">    <span class="function">QJsonDocument <span class="title">jsonDoc</span><span class="params">(<span class="built_in">array</span>)</span></span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">//将QJsonDocument对象转换为QByteArray对象</span></span><br><span class="line">    <span class="comment">//QByteArray toJson(JsonFormat format = Indented) const</span></span><br><span class="line">    QByteArray byteArray = jsonDoc.toJson();</span><br><span class="line"></span><br><span class="line">    <span class="comment">//文件操作--将byteArray写入文件</span></span><br><span class="line">    <span class="comment">//QFile(const QString &amp;name)</span></span><br><span class="line">    <span class="function">QFile <span class="title">file</span><span class="params">(fileName)</span></span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">//打开文件</span></span><br><span class="line">    <span class="comment">//virtual bool open(OpenMode mode)</span></span><br><span class="line">    file.open(QIODevice::WriteOnly);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//写文件</span></span><br><span class="line">    <span class="comment">//qint64 write(const QByteArray &amp;byteArray)</span></span><br><span class="line">    file.write(byteArray);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//关闭文件</span></span><br><span class="line">    <span class="comment">//virtual void close()</span></span><br><span class="line">    file.close();</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">readJsonFromFile</span><span class="params">(<span class="keyword">char</span> *fileName)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="comment">//构造QFile类对象</span></span><br><span class="line">    QFile file;</span><br><span class="line"></span><br><span class="line">    <span class="comment">//设置要读的文件</span></span><br><span class="line">    <span class="comment">//void setFileName(const QString &amp;name)</span></span><br><span class="line">    file.setFileName(fileName);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//打开文件</span></span><br><span class="line">    <span class="comment">//virtual bool open(OpenMode mode)</span></span><br><span class="line">    file.open(QIODevice::ReadOnly);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//读文件</span></span><br><span class="line">    <span class="comment">//QByteArray readAll()</span></span><br><span class="line">    QByteArray byteArray = file.readAll();</span><br><span class="line"></span><br><span class="line">    <span class="comment">//关闭文件</span></span><br><span class="line">    <span class="comment">//virtual void close()</span></span><br><span class="line">    file.close();</span><br><span class="line"></span><br><span class="line">    <span class="comment">//将QByteArray类对象转换为QJsonDocument</span></span><br><span class="line">    <span class="comment">//QJsonDocument fromJson(const QByteArray &amp;json, QJsonParseError *error = Q_NULLPTR)</span></span><br><span class="line">    QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//判断是数组还是对象</span></span><br><span class="line">    <span class="keyword">if</span>(jsonDoc.isObject())</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">//QJsonObject object() const</span></span><br><span class="line">        QJsonObject jsonObj = jsonDoc.object();</span><br><span class="line"></span><br><span class="line">        <span class="comment">//获取对象中所有的key值</span></span><br><span class="line">        <span class="comment">//QStringList keys() const</span></span><br><span class="line">        QStringList keys = jsonObj.keys();</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i&lt;keys.size(); i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="comment">//获取每一个key值</span></span><br><span class="line">            <span class="comment">//QString key = keys[i];</span></span><br><span class="line">            QString key = keys.at(i);</span><br><span class="line">            <span class="comment">//qDebug() &lt;&lt; key &lt;&lt; ":";</span></span><br><span class="line"></span><br><span class="line">            <span class="comment">//根据key值获取value值</span></span><br><span class="line">            <span class="comment">//QJsonValue value(const QString &amp;key) const</span></span><br><span class="line">            <span class="comment">//QJsonValue operator[](const QString &amp;key) const</span></span><br><span class="line">            QJsonValue jsonValue = jsonObj.value(key);</span><br><span class="line"></span><br><span class="line">            <span class="comment">//判断value值的类型</span></span><br><span class="line">            <span class="comment">//bool isString() const</span></span><br><span class="line">            <span class="keyword">if</span>(jsonValue.isString())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt;  key &lt;&lt; <span class="string">":"</span> &lt;&lt; jsonValue.toString();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(jsonValue.isDouble())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt;  key &lt;&lt; <span class="string">":"</span> &lt;&lt; jsonValue.toInt();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(jsonValue.isBool())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt;  key &lt;&lt; <span class="string">":"</span> &lt;&lt; jsonValue.toBool();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(jsonValue.isObject())</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="comment">//QJsonObject toObject() const</span></span><br><span class="line">                 QJsonObject obj = jsonValue.toObject();</span><br><span class="line">                 QStringList subKeys = obj.keys();</span><br><span class="line"></span><br><span class="line">                 qDebug() &lt;&lt; key &lt;&lt; <span class="string">":&#123;"</span>;</span><br><span class="line">                 <span class="keyword">for</span>(<span class="keyword">int</span> k=<span class="number">0</span>; k&lt;subKeys.size(); k++)</span><br><span class="line">                 &#123;</span><br><span class="line">                     QString subkey = subKeys[k];</span><br><span class="line">                     QJsonValue subJsonValue = obj.value(subkey);</span><br><span class="line">                     qDebug() &lt;&lt; <span class="string">"  "</span> &lt;&lt; subJsonValue.toString();</span><br><span class="line">                 &#125;</span><br><span class="line">                 qDebug() &lt;&lt; <span class="string">"&#125;"</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(jsonValue.isArray())</span><br><span class="line">            &#123;</span><br><span class="line">               <span class="comment">//QJsonArray toArray() const</span></span><br><span class="line">               qDebug() &lt;&lt; key &lt;&lt; <span class="string">":["</span>;</span><br><span class="line">               QJsonArray arr =  jsonValue.toArray();</span><br><span class="line">               <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>; j&lt;arr.size(); j++)</span><br><span class="line">               &#123;</span><br><span class="line">                   QJsonValue va = arr[j];</span><br><span class="line">                   <span class="keyword">if</span>(va.isString())</span><br><span class="line">                   &#123;</span><br><span class="line">                       qDebug() &lt;&lt; <span class="string">"    "</span> &lt;&lt; va.toString();</span><br><span class="line">                   &#125;</span><br><span class="line">               &#125;</span><br><span class="line">               qDebug() &lt;&lt;<span class="string">"]"</span>;</span><br><span class="line"></span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(jsonDoc.isArray())</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">//QJsonArray array() const</span></span><br><span class="line">        QJsonArray <span class="built_in">array</span> = jsonDoc.<span class="built_in">array</span>();</span><br><span class="line">        <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i&lt;<span class="built_in">array</span>.size(); i++)</span><br><span class="line">        &#123;</span><br><span class="line">            QJsonValue value = <span class="built_in">array</span>[i];</span><br><span class="line"></span><br><span class="line">            <span class="comment">//判断值的类型</span></span><br><span class="line">            <span class="keyword">if</span>(value.isString())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt; value.toString();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(value.isDouble())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt; value.toInt();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(value.isBool())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt; value.toBool();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(value.isArray())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt; <span class="string">"["</span>;</span><br><span class="line">                QJsonArray subArray = value.toArray();</span><br><span class="line">                <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>; j&lt;subArray.size(); j++)</span><br><span class="line">                &#123;</span><br><span class="line">                    qDebug() &lt;&lt; <span class="string">"   "</span> &lt;&lt; subArray[j].toString();</span><br><span class="line">                &#125;</span><br><span class="line">                qDebug() &lt;&lt; <span class="string">"]"</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(value.isObject())</span><br><span class="line">            &#123;</span><br><span class="line">                qDebug() &lt;&lt; <span class="string">"&#123;"</span>;</span><br><span class="line">                QJsonObject subObj = value.toObject();</span><br><span class="line">                QStringList subKeys = subObj.keys();</span><br><span class="line">                <span class="keyword">for</span>(<span class="keyword">int</span> k=<span class="number">0</span>; k&lt;subKeys.size(); k++)</span><br><span class="line">                &#123;</span><br><span class="line">                    QString subkey = subKeys[k];</span><br><span class="line">                    QJsonValue value = subObj[subkey];</span><br><span class="line">                    <span class="keyword">if</span>(value.isString())</span><br><span class="line">                    &#123;</span><br><span class="line">                        qDebug() &lt;&lt; <span class="string">"   "</span> &lt;&lt; value.toString();</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">                qDebug() &lt;&lt; <span class="string">"&#125;"</span>;</span><br><span class="line"></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="function">QCoreApplication <span class="title">a</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">//写json数据到文件</span></span><br><span class="line">    writeJsonToFile(<span class="string">"test.json"</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//读json文件</span></span><br><span class="line">    readJsonFromFile(<span class="string">"test.json"</span>);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> a.exec();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;json介绍&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#json介绍&quot;&gt;&lt;/a&gt; json介绍:&lt;/h3&gt;
&lt;p&gt;json分为:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;json对象&lt;/li&gt;
&lt;li&gt;json数组&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 
      
    
    </summary>
    
      <category term="Qt" scheme="https://xiaowuyoucy.github.io/categories/Qt/"/>
    
    
  </entry>
  
  <entry>
    <title>occi连接数据库getString函数报错</title>
    <link href="https://xiaowuyoucy.github.io/2022/06/17/occi%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93rs/"/>
    <id>https://xiaowuyoucy.github.io/2022/06/17/occi连接数据库rs/</id>
    <published>2022-06-17T13:40:16.000Z</published>
    <updated>2022-06-19T04:52:27.425Z</updated>
    
    <content type="html"><![CDATA[<p>1、报错代码：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">while (rs-&gt;next())</span><br><span class="line">&#123;</span><br><span class="line">int nID = rs-&gt;getInt(1);</span><br><span class="line">int nDVDID = rs-&gt;getInt(2);</span><br><span class="line">string strName = rs-&gt;getString(3);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>2、报错信息：</p><p>OcciToOracle.exe 中的 0x5c99336f (msvcp100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xffffffffffffffff 时发生访问冲突</p><p>错误定位：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">inline void _Container_base12::_Orphan_all()</span><br><span class="line"> &#123; // orphan all iterators</span><br><span class="line"> #if _ITERATOR_DEBUG_LEVEL == 2</span><br><span class="line"> if (_Myproxy != 0)</span><br><span class="line"> &#123; // proxy allocated, drain it</span><br><span class="line"> _Lockit _Lock(_LOCK_DEBUG);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> for (_Iterator_base12 **_Pnext = &amp;_Myproxy-&gt;_Myfirstiter;</span><br><span class="line"> *_Pnext != 0; *_Pnext = (*_Pnext)-&gt;_Mynextiter)</span><br><span class="line"> (*_Pnext)-&gt;_Myproxy = 0;</span><br><span class="line"> _Myproxy-&gt;_Myfirstiter = 0;</span><br><span class="line"> &#125;</span><br><span class="line"> #endif /* _ITERATOR_DEBUG_LEVEL == 2 */</span><br><span class="line"></span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure><p>3、解决方法：</p><p>将</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">string strName = rs-&gt;getString(3);</span><br></pre></td></tr></table></figure><p>更改为：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">static string strName = rs-&gt;getString(3);</span><br></pre></td></tr></table></figure><p>前面加上static。</p><p>问题解决了，但是不清楚问题原因！</p><p>重点：这也造成了多条记录循环取值时只能得到第一次的值。</p><p>可能是oracle客户端occi库版本和编译器版本不一致导致的,linux降低了g++版本之后就编译通过了,并且没有出现问题.</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;1、报错代码：&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;
      
    
    </summary>
    
      <category term="cpp" scheme="https://xiaowuyoucy.github.io/categories/cpp/"/>
    
    
  </entry>
  
</feed>
