<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Javascript &#8211; 个人随笔</title>
	<atom:link href="/classify/%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF/javascript/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sun, 20 May 2018 01:24:01 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>/wp-content/uploads/2022/01/cropped-截屏2022-01-01-18.57.09-32x32.png</url>
	<title>Javascript &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>JS 高级（一）数据类型转化、执行流程、错误处理、作用域</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3183.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3183.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 07:01:22 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[作用域]]></category>
		<category><![CDATA[执行流程]]></category>
		<category><![CDATA[数据类型转化]]></category>
		<category><![CDATA[错误处理]]></category>
		<guid isPermaLink="false">/?p=3183</guid>

					<description><![CDATA[JavaScript高级（1） 一、概述 1、JavaScript简介 JavaScript被认为是客户端“脚 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript高级（1）
</p>
<h1>一、概述</h1>
<p>
  1、JavaScript简介
</p>
<p>
  JavaScript被认为是客户端“脚本”，它不常叫“语言”，言外之意是比较简单，但是深入了解之后，你会发现 简单的外表下，蕴藏着丰富的内涵。
</p>
<p>
  JavaScript是由Netscape（网景）提出并发展，它起初名为“livescript”，后从营销角度考虑更名为“javascript”，但它和java没有直接关系，顶多是js被期望发展成java那样面向对象的语言（基于对象）。
</p>
<p>
  现在JavaScript标准由ECMA（European Computer Manufactures Assiocation）制定和维护，因此也叫“ECMAScript”，它是包含了网景的Javascript和微软的Jscript，最新的js版本是ES6（ECMAScript6.0）。
</p>
<p>
  作为客户端脚本的JavaScript常用于网页浏览器的开发，然则它的设计却是一种通用性的脚本语言，可以被嵌入任何应用，例如嵌入falsh脚本化falsh player 嵌入applet脚本化java。
</p>
<p>
  JavaScript应该包含：ECMAScript、DOM、BOM
</p>
<p><a id="post-3183-_Toc485386713"></a><br />
  2、应用场景
</p>
<p>
  ① 数据验证（表单验证）
</p>
<p>
  ② 网页特效（目前大多数的网页特效都是通过JS编写）
</p>
<p>
  ③ 编写网页小游戏
</p>
<p>
  ④ 服务器端编程，数据交互（Ajax、Node.js）
</p>
<h1>二、JavaScript基础回顾</h1>
<p>
  1、检测JavaScript的执行情况
</p>
<p>
  document<strong>.</strong>write();
</p>
<p>
  alert(); === window<strong>.</strong>alert();
</p>
<p>
  console.log(); &#8212; 它可以输出任何类型的变量，而且可以一次性输出多个变量。可以看到数据的结构。
</p>
<p>
  <img fetchpriority="high" decoding="async" width="761" height="471" src="/wp-content/uploads/2018/05/word-image-2803.png" class="wp-image-3184" srcset="/wp-content/uploads/2018/05/word-image-2803.png 761w, /wp-content/uploads/2018/05/word-image-2803-300x186.png 300w" sizes="(max-width: 761px) 100vw, 761px" />
</p>
<p>
  2、JavaScript变量
</p>
<p>
  1、命名规则
</p>
<ul>
<li>
    变量必须以字母开头
  </li>
<li>
    变量也能以 $ 和 _ 符号开头（不过我们不推荐这么做）
  </li>
<li>
    变量名称对大小写敏感（y 和 Y 是不同的变量）
  </li>
</ul>
<p>
  <img decoding="async" width="851" height="165" src="/wp-content/uploads/2018/05/word-image-2804.png" class="wp-image-3185" srcset="/wp-content/uploads/2018/05/word-image-2804.png 851w, /wp-content/uploads/2018/05/word-image-2804-300x58.png 300w, /wp-content/uploads/2018/05/word-image-2804-768x149.png 768w" sizes="(max-width: 851px) 100vw, 851px" />
</p>
<p>
  2、一条语句，多个变量
</p>
<p>
  <img decoding="async" width="344" height="25" src="/wp-content/uploads/2018/05/word-image-2805.png" class="wp-image-3186" srcset="/wp-content/uploads/2018/05/word-image-2805.png 344w, /wp-content/uploads/2018/05/word-image-2805-300x22.png 300w" sizes="(max-width: 344px) 100vw, 344px" />
</p>
<p>
  3、只声明变量，没有赋初值
</p>
<p>
  <img loading="lazy" decoding="async" width="458" height="57" src="/wp-content/uploads/2018/05/word-image-2806.png" class="wp-image-3187" srcset="/wp-content/uploads/2018/05/word-image-2806.png 458w, /wp-content/uploads/2018/05/word-image-2806-300x37.png 300w" sizes="(max-width: 458px) 100vw, 458px" />
</p>
<p>
  4、重新声明变量
</p>
<p>
  <img loading="lazy" decoding="async" width="807" height="141" src="/wp-content/uploads/2018/05/word-image-2807.png" class="wp-image-3188" srcset="/wp-content/uploads/2018/05/word-image-2807.png 807w, /wp-content/uploads/2018/05/word-image-2807-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2807-768x134.png 768w" sizes="(max-width: 807px) 100vw, 807px" />
</p>
<p>
  3、常量
</p>
<p>
  常量必须给初始值；
</p>
<p>
  常量不能改变值；
</p>
<p>
  常量不能重新定义；
</p>
<p>
  使用const来声明常量。
</p>
<p>
  <img loading="lazy" decoding="async" width="473" height="88" src="/wp-content/uploads/2018/05/word-image-2808.png" class="wp-image-3189" srcset="/wp-content/uploads/2018/05/word-image-2808.png 473w, /wp-content/uploads/2018/05/word-image-2808-300x56.png 300w" sizes="(max-width: 473px) 100vw, 473px" />
</p>
<p>
  4、运算符
</p>
<p>
  1、算数运算符
</p>
<p>
  加减乘除 累加 累减
</p>
<p>
  <img loading="lazy" decoding="async" width="633" height="150" src="/wp-content/uploads/2018/05/word-image-2809.png" class="wp-image-3190" srcset="/wp-content/uploads/2018/05/word-image-2809.png 633w, /wp-content/uploads/2018/05/word-image-2809-300x71.png 300w" sizes="(max-width: 633px) 100vw, 633px" />
</p>
<p>
  2、赋值运算符
</p>
<p>
  编程中，“=”表示赋值，意思是将等号后面的值赋值给等号前面的变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="534" height="154" src="/wp-content/uploads/2018/05/word-image-2810.png" class="wp-image-3191" srcset="/wp-content/uploads/2018/05/word-image-2810.png 534w, /wp-content/uploads/2018/05/word-image-2810-300x87.png 300w" sizes="(max-width: 534px) 100vw, 534px" />
</p>
<p>
  3、用于字符串的+运算符《》
</p>
<p>
  js中用“+”连接字符串，类似于php中的“点”。
</p>
<p>
  如果“+”前后都是数值型，那么“+”表示加法运算。
</p>
<p>
  <img loading="lazy" decoding="async" width="944" height="135" src="/wp-content/uploads/2018/05/word-image-2811.png" class="wp-image-3192" srcset="/wp-content/uploads/2018/05/word-image-2811.png 944w, /wp-content/uploads/2018/05/word-image-2811-300x43.png 300w, /wp-content/uploads/2018/05/word-image-2811-768x110.png 768w" sizes="(max-width: 944px) 100vw, 944px" />
</p>
<p>
  4、比较运算符
</p>
<p>
  大于、小于、大于等于….  全等于、不全等
</p>
<p>
  == ：表示相等判断，只判断值是否想等，不考虑数据类型。比如5 == &#8216;5&#8217;  结果为true
</p>
<p>
  === ：表示全等判断，即考虑值是否想等，也考虑数据类型是否相同。比如5===&#8217;5&#8217;，结果为false。
</p>
<p>
  5、三元运算符（三目、条件）
</p>
<p>
  PHP：
</p>
<p>
  $res = isset($_GET[&#8216;type&#8217;]) ? &#8216;a&#8217; : &#8216;b&#8217;;
</p>
<p>
  JavaScript：
</p>
<p>
  var a = 5==&#8217;5&#8242; ? &#8216;hello&#8217; : &#8216;nihao&#8217;;
</p>
<p>
  6、逻辑运算符
</p>
<p>
  and &amp;&amp;
</p>
<p>
  or ||
</p>
<p>
  !
</p>
<p>
  <img loading="lazy" decoding="async" width="1068" height="272" src="/wp-content/uploads/2018/05/word-image-2812.png" class="wp-image-3193" srcset="/wp-content/uploads/2018/05/word-image-2812.png 1068w, /wp-content/uploads/2018/05/word-image-2812-300x76.png 300w, /wp-content/uploads/2018/05/word-image-2812-768x196.png 768w, /wp-content/uploads/2018/05/word-image-2812-1024x261.png 1024w" sizes="(max-width: 1068px) 100vw, 1068px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1020" height="390" src="/wp-content/uploads/2018/05/word-image-2813.png" class="wp-image-3194" srcset="/wp-content/uploads/2018/05/word-image-2813.png 1020w, /wp-content/uploads/2018/05/word-image-2813-300x115.png 300w, /wp-content/uploads/2018/05/word-image-2813-768x294.png 768w" sizes="(max-width: 1020px) 100vw, 1020px" />
</p>
<p>
  5、流程控制
</p>
<p>
  循环：for  while  do…while  for…in
</p>
<p>
  跳出循环：break  continue
</p>
<p>
  循环结构另一种写法
</p>
<p>
  <img loading="lazy" decoding="async" width="461" height="203" src="/wp-content/uploads/2018/05/word-image-2814.png" class="wp-image-3195" srcset="/wp-content/uploads/2018/05/word-image-2814.png 461w, /wp-content/uploads/2018/05/word-image-2814-300x132.png 300w" sizes="(max-width: 461px) 100vw, 461px" />
</p>
<p>
  案例：
</p>
<p>
  查找质数（素数），只能被1和它本身整除的数就是质数。1既不是质数也不是和数。
</p>
<p>
  质数举例：2,3,5,7,11,13
</p>
<p>
  和数举例：4,6,8,9,10
</p>
<p>
  用程序查找100以内的质数。
</p>
<p>
  <img loading="lazy" decoding="async" width="939" height="401" src="/wp-content/uploads/2018/05/word-image-2815.png" class="wp-image-3196" srcset="/wp-content/uploads/2018/05/word-image-2815.png 939w, /wp-content/uploads/2018/05/word-image-2815-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2815-768x328.png 768w" sizes="(max-width: 939px) 100vw, 939px" />
</p>
<p>
  跳出循环：
</p>
<p>
  break跳出循环，终止该循环
</p>
<p>
  continue跳过当前这次循环，继续执行下一次循环
</p>
<p>
  <img loading="lazy" decoding="async" width="989" height="309" src="/wp-content/uploads/2018/05/word-image-2816.png" class="wp-image-3197" srcset="/wp-content/uploads/2018/05/word-image-2816.png 989w, /wp-content/uploads/2018/05/word-image-2816-300x94.png 300w, /wp-content/uploads/2018/05/word-image-2816-768x240.png 768w" sizes="(max-width: 989px) 100vw, 989px" />
</p>
<p>
  6、函数
</p>
<p>
  1、定义
</p>
<p>
  function  functionName(参数列表){
</p>
<p>
  	函数体
</p>
<p>
  	//return
</p>
<p>
  }
</p>
<p>
  2、函数参数默认值
</p>
<p>
  JavaScript中函数的参数不能有默认值。ES6中的函数才允许参数有默认值。目前IE11不支持函数参数有默认值，但是火狐、谷歌、UC支持。
</p>
<p>
  <img loading="lazy" decoding="async" width="517" height="108" src="/wp-content/uploads/2018/05/word-image-2817.png" class="wp-image-3198" srcset="/wp-content/uploads/2018/05/word-image-2817.png 517w, /wp-content/uploads/2018/05/word-image-2817-300x63.png 300w" sizes="(max-width: 517px) 100vw, 517px" />
</p>
<p>
  如果就想实现y有默认值这种效果，怎么办？
</p>
<p>
  <img loading="lazy" decoding="async" width="557" height="178" src="/wp-content/uploads/2018/05/word-image-2818.png" class="wp-image-3199" srcset="/wp-content/uploads/2018/05/word-image-2818.png 557w, /wp-content/uploads/2018/05/word-image-2818-300x96.png 300w" sizes="(max-width: 557px) 100vw, 557px" />
</p>
<p>
  3、函数参数不固定
</p>
<p>
  使用arguments可以获取到函数的所有参数。
</p>
<p>
  arguments[0]表示函数的第一个参数
</p>
<p>
  arguments[1]表示函数的第二个参数
</p>
<p>
  ….
</p>
<p>
  以此类推。
</p>
<p>
  arguments.length表示函数参数的个数。
</p>
<p>
  <img loading="lazy" decoding="async" width="1021" height="406" src="/wp-content/uploads/2018/05/word-image-2819.png" class="wp-image-3200" srcset="/wp-content/uploads/2018/05/word-image-2819.png 1021w, /wp-content/uploads/2018/05/word-image-2819-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2819-768x305.png 768w" sizes="(max-width: 1021px) 100vw, 1021px" />
</p>
<p>
  4、函数作为变量
</p>
<p>
  <img loading="lazy" decoding="async" width="739" height="237" src="/wp-content/uploads/2018/05/word-image-2820.png" class="wp-image-3201" srcset="/wp-content/uploads/2018/05/word-image-2820.png 739w, /wp-content/uploads/2018/05/word-image-2820-300x96.png 300w" sizes="(max-width: 739px) 100vw, 739px" />
</p>
<p>
  另一种把函数当做另一个函数的参数的形式：
</p>
<p>
  <img loading="lazy" decoding="async" width="621" height="178" src="/wp-content/uploads/2018/05/word-image-2821.png" class="wp-image-3202" srcset="/wp-content/uploads/2018/05/word-image-2821.png 621w, /wp-content/uploads/2018/05/word-image-2821-300x86.png 300w" sizes="(max-width: 621px) 100vw, 621px" />
</p>
<p>
  5、函数自调用
</p>
<p>
  <img loading="lazy" decoding="async" width="838" height="380" src="/wp-content/uploads/2018/05/word-image-2822.png" class="wp-image-3203" srcset="/wp-content/uploads/2018/05/word-image-2822.png 838w, /wp-content/uploads/2018/05/word-image-2822-300x136.png 300w, /wp-content/uploads/2018/05/word-image-2822-768x348.png 768w" sizes="(max-width: 838px) 100vw, 838px" />
</p>
<p>
  6、函数在内存中的形式
</p>
<p>
  <img loading="lazy" decoding="async" width="498" height="186" src="/wp-content/uploads/2018/05/word-image-2823.png" class="wp-image-3204" srcset="/wp-content/uploads/2018/05/word-image-2823.png 498w, /wp-content/uploads/2018/05/word-image-2823-300x112.png 300w" sizes="(max-width: 498px) 100vw, 498px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="878" height="158" src="/wp-content/uploads/2018/05/word-image-2824.png" class="wp-image-3205" srcset="/wp-content/uploads/2018/05/word-image-2824.png 878w, /wp-content/uploads/2018/05/word-image-2824-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2824-768x138.png 768w" sizes="(max-width: 878px) 100vw, 878px" />
</p>
<p>
  7、数组
</p>
<p>
  声明数组的方式：
</p>
<p>
  ①、var arr = new Array(数组的单元1, 单元2, 单元3….);
</p>
<p>
  ②、var arr = new Array(数字); //数字表示数组元素的个数
</p>
<p>
  ③、var arr = [数组的单元1, 单元2, 单元3….];
</p>
<p>
  用length表示数组元素的个数，数组的长度。
</p>
<p>
  <img loading="lazy" decoding="async" width="1236" height="307" src="/wp-content/uploads/2018/05/word-image-2825.png" class="wp-image-3206" srcset="/wp-content/uploads/2018/05/word-image-2825.png 1236w, /wp-content/uploads/2018/05/word-image-2825-300x75.png 300w, /wp-content/uploads/2018/05/word-image-2825-768x191.png 768w, /wp-content/uploads/2018/05/word-image-2825-1024x254.png 1024w" sizes="(max-width: 1236px) 100vw, 1236px" />
</p>
<p>
  8、数据类型
</p>
<p>
  1、类型种类
</p>
<p>
  PHP有8中数据类型：
</p>
<p>
  	4种基本数据类型：bool、string、int、float
</p>
<p>
  	2种复合数据类型：array、object
</p>
<p>
  	2种特殊数据类型：null、resource
</p>
<p>
  JavaScript有7种数据：
</p>
<p>
  	3种基本数据类型：string、bool、number
</p>
<p>
  	2种复合数据类型：array、object
</p>
<p>
  	2种特殊数据类型：null、undefined
</p>
<p>
  2、判断数据类型
</p>
<p>
  使用typeof来判断变量的数据类型：
</p>
<p>
  <img loading="lazy" decoding="async" width="842" height="430" src="/wp-content/uploads/2018/05/word-image-2826.png" class="wp-image-3207" srcset="/wp-content/uploads/2018/05/word-image-2826.png 842w, /wp-content/uploads/2018/05/word-image-2826-300x153.png 300w, /wp-content/uploads/2018/05/word-image-2826-768x392.png 768w" sizes="(max-width: 842px) 100vw, 842px" />
</p>
<p>
  undefined &#8211; 如果变量是 Undefined 类型的
</p>
<p>
  boolean &#8211; 如果变量是 Boolean 类型的
</p>
<p>
  number &#8211; 如果变量是 Number 类型的
</p>
<p>
  string &#8211; 如果变量是 String 类型的
</p>
<p>
  object &#8211; 如果变量是一种引用类型（数组、对象）或 Null 类型的
</p>
<p><strong>注释</strong>：您也许会问，为什么 typeof 运算符对于 null 值会返回 &#8220;object&#8221;。这实际上是 JavaScript 最初实现中的一个错误，然后被 ECMAScript 沿用了。现在，null 被认为是对象的占位符，从而解释了这一矛盾，但从技术上来说，它仍然是原始值。
</p>
<h1>三、数据类型转化</h1>
<p>
  1、转化成字符串
</p>
<p>
  1、使用toString()方法。
</p>
<p>
  常规转化：
</p>
<p>
  用法：变量<strong>.</strong>toString();
</p>
<p>
  <img loading="lazy" decoding="async" width="966" height="431" src="/wp-content/uploads/2018/05/word-image-2827.png" class="wp-image-3208" srcset="/wp-content/uploads/2018/05/word-image-2827.png 966w, /wp-content/uploads/2018/05/word-image-2827-300x134.png 300w, /wp-content/uploads/2018/05/word-image-2827-768x343.png 768w" sizes="(max-width: 966px) 100vw, 966px" />
</p>
<p>
  基模式：
</p>
<p>
  基模式针对的是整型的变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="700" height="113" src="/wp-content/uploads/2018/05/word-image-2828.png" class="wp-image-3209" srcset="/wp-content/uploads/2018/05/word-image-2828.png 700w, /wp-content/uploads/2018/05/word-image-2828-300x48.png 300w" sizes="(max-width: 700px) 100vw, 700px" />
</p>
<p>
  1110  十进制：
</p>
<p>
  0*2<sup>0</sup> + 1*2<sup>1</sup> + 1*2<sup>2</sup> + 1*2<sup>3</sup> = 0 + 2 + 4 + 8 = 14
</p>
<p>
  14  二进制：辗转相除法，最后取余数
</p>
<p>
  14/2 = 7 ….. 0
</p>
<p>
  7/2 = 3 …… 1
</p>
<p>
  3/2 = 1 …….1
</p>
<p>
  1/2 = 0 …….1
</p>
<p>
  将余数反过来就是结果：1110
</p>
<p>
  2、使用String()强制类型转化。
</p>
<p>
  强制类型转化使用的方法是String();
</p>
<p>
  用法：String(变量);
</p>
<p>
  <img loading="lazy" decoding="async" width="753" height="409" src="/wp-content/uploads/2018/05/word-image-2829.png" class="wp-image-3210" srcset="/wp-content/uploads/2018/05/word-image-2829.png 753w, /wp-content/uploads/2018/05/word-image-2829-300x163.png 300w" sizes="(max-width: 753px) 100vw, 753px" />
</p>
<p>
  2、转化成数字
</p>
<p>
  1、转化成整型parseInt()
</p>
<p>
  parseInt() 方法首先查看位置 0 处的字符，判断它是否是个有效数字；如果不是，该方法将返回 NaN（not a number），不再继续执行其他操作。但如果该字符是有效数字，该方法将查看位置 1 处的字符，进行同样的测试。这一过程将持续到发现非有效数字的字符为止，此时 parseInt() 将把该字符之前的字符串转换成数字。
</p>
<p>
  <img loading="lazy" decoding="async" width="931" height="158" src="/wp-content/uploads/2018/05/word-image-2830.png" class="wp-image-3211" srcset="/wp-content/uploads/2018/05/word-image-2830.png 931w, /wp-content/uploads/2018/05/word-image-2830-300x51.png 300w, /wp-content/uploads/2018/05/word-image-2830-768x130.png 768w" sizes="(max-width: 931px) 100vw, 931px" />
</p>
<p>
  字符串中包含的数字字面量会被正确转换为数字，比如 &#8220;0xA&#8221; 会被正确转换为数字 10。不过，字符串 &#8220;22.5&#8221; 将被转换成 22，因为对于整数来说，小数点是无效字符。
</p>
<p>
  parseInt() 方法还有基模式，可以把二进制、八进制、十六进制或其他任何进制的字符串转换成十进制整数。基是由 parseInt() 方法的第二个参数指定的.
</p>
<p>
  <img loading="lazy" decoding="async" width="874" height="57" src="/wp-content/uploads/2018/05/word-image-2831.png" class="wp-image-3212" srcset="/wp-content/uploads/2018/05/word-image-2831.png 874w, /wp-content/uploads/2018/05/word-image-2831-300x20.png 300w, /wp-content/uploads/2018/05/word-image-2831-768x50.png 768w" sizes="(max-width: 874px) 100vw, 874px" />
</p>
<p>
  2、转化成浮点型parseFloat()
</p>
<p>
  parseFloat() 方法与 parseInt() 方法的处理方式相似，从位置 0 开始查看每个字符，直到找到第一个非有效的字符为止，然后把该字符之前的字符串转换成整数。
</p>
<p>
  不过，对于这个方法来说，第一个出现的小数点是有效字符。如果有两个小数点，第二个小数点将被看作无效的。parseFloat() 会把这个小数点之前的字符转换成数字。这意味着字符串 &#8220;11.22.33&#8221; 将被解析成 11.22。
</p>
<p>
  使用 parseFloat() 方法的另一不同之处在于，字符串必须以十进制形式表示浮点数，而不是用八进制或十六进制。该方法会忽略前导 0，所以八进制数 0102 将被解析为 102。对于十六进制数 0xA，该方法将返回 NaN，因为在浮点数中，x 不是有效字符。（注释：经测试，具体的浏览器实现会返回 0，而不是 NaN。）
</p>
<p>
  <img loading="lazy" decoding="async" width="849" height="131" src="/wp-content/uploads/2018/05/word-image-2832.png" class="wp-image-3213" srcset="/wp-content/uploads/2018/05/word-image-2832.png 849w, /wp-content/uploads/2018/05/word-image-2832-300x46.png 300w, /wp-content/uploads/2018/05/word-image-2832-768x119.png 768w" sizes="(max-width: 849px) 100vw, 849px" />
</p>
<p>
  此外，parseFloat() 方法也没有基模式。
</p>
<p>
  3、强制类型转化Number()
</p>
<p>
  <img loading="lazy" decoding="async" width="720" height="276" src="/wp-content/uploads/2018/05/word-image-2833.png" class="wp-image-3214" srcset="/wp-content/uploads/2018/05/word-image-2833.png 720w, /wp-content/uploads/2018/05/word-image-2833-300x115.png 300w" sizes="(max-width: 720px) 100vw, 720px" />
</p>
<p>
  3、转化成布尔
</p>
<p>
  当要转换的值是至少有一个字符的字符串(非空字符串)、非 0 数字或对象时，Boolean() 函数将返回 true。
</p>
<p>
  如果该值是空字符串、数字 0、undefined 或 null，它将返回 false。
</p>
<p>
  <img loading="lazy" decoding="async" width="757" height="208" src="/wp-content/uploads/2018/05/word-image-2834.png" class="wp-image-3215" srcset="/wp-content/uploads/2018/05/word-image-2834.png 757w, /wp-content/uploads/2018/05/word-image-2834-300x82.png 300w" sizes="(max-width: 757px) 100vw, 757px" />
</p>
<h1>四、执行流程</h1>
<p>
  1、全局环境
</p>
<p>
  js在运行时，首先会创建一个全局执行环境，这个全局环境就是定义一个全局对象，页面中所有的内容（不同的script中的内容） 都是这个全局对象的成员，在浏览器javascript中（嵌入网页的js）这个全局对象是window。
</p>
<p>
  <img loading="lazy" decoding="async" width="1194" height="291" src="/wp-content/uploads/2018/05/word-image-2835.png" class="wp-image-3216" srcset="/wp-content/uploads/2018/05/word-image-2835.png 1194w, /wp-content/uploads/2018/05/word-image-2835-300x73.png 300w, /wp-content/uploads/2018/05/word-image-2835-768x187.png 768w, /wp-content/uploads/2018/05/word-image-2835-1024x250.png 1024w" sizes="(max-width: 1194px) 100vw, 1194px" />
</p>
<p>
  除此之外，还可以调用window对象中的a或者b，看一下window对象中是否有这两个成员。
</p>
<p>
  2、执行流程
</p>
<p>
  读一段（一个script标签）代码  编译（分析词法、句法）  执行（输出、调用）  继续读下一段script
</p>
<p>
  <img loading="lazy" decoding="async" width="585" height="419" src="/wp-content/uploads/2018/05/word-image-2836.png" class="wp-image-3217" srcset="/wp-content/uploads/2018/05/word-image-2836.png 585w, /wp-content/uploads/2018/05/word-image-2836-300x215.png 300w" sizes="(max-width: 585px) 100vw, 585px" />
</p>
<p>
  对于同一个script代码段中的函数来说，函数会预先加载。也就是说可以先调用函数，后声明函数。
</p>
<p>
  但是不能在前一个script代码段中调用后一个script代码段中的函数。
</p>
<p>
  <img loading="lazy" decoding="async" width="945" height="365" src="/wp-content/uploads/2018/05/word-image-2837.png" class="wp-image-3218" srcset="/wp-content/uploads/2018/05/word-image-2837.png 945w, /wp-content/uploads/2018/05/word-image-2837-300x116.png 300w, /wp-content/uploads/2018/05/word-image-2837-768x297.png 768w" sizes="(max-width: 945px) 100vw, 945px" />
</p>
<p>
  3、错误类型
</p>
<p>
  编译错误：对词法、句法的分析，也就是语法上有没有错误。
</p>
<p>
  <img loading="lazy" decoding="async" width="983" height="424" src="/wp-content/uploads/2018/05/word-image-2838.png" class="wp-image-3219" srcset="/wp-content/uploads/2018/05/word-image-2838.png 983w, /wp-content/uploads/2018/05/word-image-2838-300x129.png 300w, /wp-content/uploads/2018/05/word-image-2838-768x331.png 768w" sizes="(max-width: 983px) 100vw, 983px" />
</p>
<p>
  执行错误：输出、调用函数等。
</p>
<p>
  <img loading="lazy" decoding="async" width="1064" height="432" src="/wp-content/uploads/2018/05/word-image-2839.png" class="wp-image-3220" srcset="/wp-content/uploads/2018/05/word-image-2839.png 1064w, /wp-content/uploads/2018/05/word-image-2839-300x122.png 300w, /wp-content/uploads/2018/05/word-image-2839-768x312.png 768w, /wp-content/uploads/2018/05/word-image-2839-1024x416.png 1024w" sizes="(max-width: 1064px) 100vw, 1064px" />
</p>
<p>
  如果出现语法上的错误，当前的script代码段的内容全部终止执行
</p>
<p>
  如果发现执行错误，当前script代码段错误之前的代码还能够正常执行，错误之后的代码会终止执行。
</p>
<p>
  无论发生哪种错误，都不会影响下一个script代码段。
</p>
<p>
  4、异常处理
</p>
<p>
  可以用try…catch…来处理。在js中，错误处理类是Error（类似于PHP中的Exception）。
</p>
<p>
  自然抛出：
</p>
<p>
  <img loading="lazy" decoding="async" width="787" height="165" src="/wp-content/uploads/2018/05/word-image-2840.png" class="wp-image-3221" srcset="/wp-content/uploads/2018/05/word-image-2840.png 787w, /wp-content/uploads/2018/05/word-image-2840-300x63.png 300w, /wp-content/uploads/2018/05/word-image-2840-768x161.png 768w" sizes="(max-width: 787px) 100vw, 787px" />
</p>
<p>
  手动抛出：
</p>
<p>
  <img loading="lazy" decoding="async" width="847" height="152" src="/wp-content/uploads/2018/05/word-image-2841.png" class="wp-image-3222" srcset="/wp-content/uploads/2018/05/word-image-2841.png 847w, /wp-content/uploads/2018/05/word-image-2841-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2841-768x138.png 768w" sizes="(max-width: 847px) 100vw, 847px" />
</p>
<h1>五、作用域（链）</h1>
<p>
  1、作用域分类
</p>
<p>
  js中只有全局作用域和局部作用域，ES6中还有块作用域。
</p>
<p>
  2、作用域
</p>
<p>
  作用域就是变量有效的活动空间。比如函数内部的用var声明的变量，它的活动空间就是函数内部，那么函数内部就是改变量的作用域。
</p>
<p>
  局部作用域：函数内部。
</p>
<p>
  全局作用域：函数外部。
</p>
<p><strong>案例一：函数内部可以使用函数外部的变量</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="696" height="176" src="/wp-content/uploads/2018/05/word-image-2842.png" class="wp-image-3223" srcset="/wp-content/uploads/2018/05/word-image-2842.png 696w, /wp-content/uploads/2018/05/word-image-2842-300x76.png 300w" sizes="(max-width: 696px) 100vw, 696px" />
</p>
<p>
  复杂一点的案例
</p>
<p>
  <img loading="lazy" decoding="async" width="838" height="256" src="/wp-content/uploads/2018/05/word-image-2843.png" class="wp-image-3224" srcset="/wp-content/uploads/2018/05/word-image-2843.png 838w, /wp-content/uploads/2018/05/word-image-2843-300x92.png 300w, /wp-content/uploads/2018/05/word-image-2843-768x235.png 768w" sizes="(max-width: 838px) 100vw, 838px" />
</p>
<p><strong>案例二：函数外部不能够使用函数内部用var声明的变量</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="935" height="162" src="/wp-content/uploads/2018/05/word-image-2844.png" class="wp-image-3225" srcset="/wp-content/uploads/2018/05/word-image-2844.png 935w, /wp-content/uploads/2018/05/word-image-2844-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2844-768x133.png 768w" sizes="(max-width: 935px) 100vw, 935px" />
</p>
<p><strong>案例三：函数外部能够使用函数内部没有用var声明的变量</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="655" height="137" src="/wp-content/uploads/2018/05/word-image-2845.png" class="wp-image-3226" srcset="/wp-content/uploads/2018/05/word-image-2845.png 655w, /wp-content/uploads/2018/05/word-image-2845-300x63.png 300w" sizes="(max-width: 655px) 100vw, 655px" />
</p>
<p><strong>案例四：带参数的情况</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="661" height="255" src="/wp-content/uploads/2018/05/word-image-2846.png" class="wp-image-3227" srcset="/wp-content/uploads/2018/05/word-image-2846.png 661w, /wp-content/uploads/2018/05/word-image-2846-300x116.png 300w" sizes="(max-width: 661px) 100vw, 661px" />
</p>
<p>
  4、作用域链
</p>
<p>
  <img loading="lazy" decoding="async" width="782" height="256" src="/wp-content/uploads/2018/05/word-image-2847.png" class="wp-image-3228" srcset="/wp-content/uploads/2018/05/word-image-2847.png 782w, /wp-content/uploads/2018/05/word-image-2847-300x98.png 300w, /wp-content/uploads/2018/05/word-image-2847-768x251.png 768w" sizes="(max-width: 782px) 100vw, 782px" />
</p>
<p>
  当访问一个变量的时候，首先看当前的作用域中是否有这个变量的声明，如果有，直接使用它，如果没有，那么去上一层作用域中查找，上一层作用域如果也没有该变量的声明，则继续向上一层作用域中查找，直到全局作用域。这个链式的查找方式就是作用域链。
</p>
<h1>六、事件</h1>
<p>
  1、事件定义
</p>
<p>
  事件由什么组成：
</p>
<p>
  	用户的行为（鼠标行为、键盘行为） +  JavaScript引擎 + 事件表达式
</p>
<p>
  2、事件表达式
</p>
<p>
  <img loading="lazy" decoding="async" width="796" height="160" src="/wp-content/uploads/2018/05/word-image-2848.png" class="wp-image-3229" srcset="/wp-content/uploads/2018/05/word-image-2848.png 796w, /wp-content/uploads/2018/05/word-image-2848-300x60.png 300w, /wp-content/uploads/2018/05/word-image-2848-768x154.png 768w" sizes="(max-width: 796px) 100vw, 796px" />
</p>
<p>
  3、事件绑定的三种方式
</p>
<p>
  1、使用dom对象，绑定事件（动态绑定）
</p>
<p>
  这种方式完全不用考虑html。
</p>
<p>
  这种方式，就是获取要绑定事件的dom对象，然后给其绑定一个事件处理函数即可。
</p>
<p>
  <img loading="lazy" decoding="async" width="796" height="160" src="/wp-content/uploads/2018/05/word-image-2849.png" class="wp-image-3230" srcset="/wp-content/uploads/2018/05/word-image-2849.png 796w, /wp-content/uploads/2018/05/word-image-2849-300x60.png 300w, /wp-content/uploads/2018/05/word-image-2849-768x154.png 768w" sizes="(max-width: 796px) 100vw, 796px" />
</p>
<p><strong>事件处理函数中的 this表示绑定该事件的dom对象</strong>。
</p>
<p>
  2、行内绑定
</p>
<p>
  直接在标签内绑定一个事件。
</p>
<p>
  <img loading="lazy" decoding="async" width="547" height="42" src="/wp-content/uploads/2018/05/word-image-2850.png" class="wp-image-3231" srcset="/wp-content/uploads/2018/05/word-image-2850.png 547w, /wp-content/uploads/2018/05/word-image-2850-300x23.png 300w" sizes="(max-width: 547px) 100vw, 547px" />
</p>
<p>
  这种绑定事件的方式，js中的this表示当前的标签的dom对象。
</p>
<p>
  3、行内绑定
</p>
<p>
  <img loading="lazy" decoding="async" width="793" height="181" src="/wp-content/uploads/2018/05/word-image-2851.png" class="wp-image-3232" srcset="/wp-content/uploads/2018/05/word-image-2851.png 793w, /wp-content/uploads/2018/05/word-image-2851-300x68.png 300w, /wp-content/uploads/2018/05/word-image-2851-768x175.png 768w" sizes="(max-width: 793px) 100vw, 793px" />
</p>
<p>
  这种绑定方式中的this表示window对象。
</p>
<p>
  4、常用事件
</p>
<p>
  页面事件
</p>
<p>
  onload ：当页面载入完毕后触发
</p>
<p>
  焦点事件
</p>
<p>
  onfocus ：当获取焦点时触发
</p>
<p>
  onblur ：当失去焦点时触发
</p>
<p>
  鼠标事件
</p>
<p>
  onmouseover ：当鼠标悬浮时触发
</p>
<p>
  onmouseout ：当鼠标离开时触发
</p>
<p>
  键盘事件
</p>
<p>
  onkeypress ：当键盘按下时触发
</p>
<p>
  onkeydown ：当键盘按下时触发
</p>
<p>
  onkeyup ：当键盘弹起时触发
</p>
<p>
  其他事件：
</p>
<p>
  onclick ： 单击事件
</p>
<p>
  onchange ： 改变选项时触发的事件（多用于select&gt;option）
</p>
<p>
  onresize：当窗口改变大小时触发的事件
</p>
<p>
  onscroll：当滚动条滚动时，触发的事件
</p>
<p>
  onsubmit：当表单提交时触发的事件
</p>
<p>
  5、案例-点击页面中的li，能够显示它的下标
</p>
<p>
  先找到页面中的li，然后用循环的方式给每个li都绑定一个单击事件
</p>
<p>
  <img loading="lazy" decoding="async" width="876" height="375" src="/wp-content/uploads/2018/05/word-image-2852.png" class="wp-image-3233" srcset="/wp-content/uploads/2018/05/word-image-2852.png 876w, /wp-content/uploads/2018/05/word-image-2852-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2852-768x329.png 768w" sizes="(max-width: 876px) 100vw, 876px" />
</p>
<p>
  错误的输出方式：
</p>
<p>
  <img loading="lazy" decoding="async" width="1099" height="398" src="/wp-content/uploads/2018/05/word-image-2853.png" class="wp-image-3234" srcset="/wp-content/uploads/2018/05/word-image-2853.png 1099w, /wp-content/uploads/2018/05/word-image-2853-300x109.png 300w, /wp-content/uploads/2018/05/word-image-2853-768x278.png 768w, /wp-content/uploads/2018/05/word-image-2853-1024x371.png 1024w" sizes="(max-width: 1099px) 100vw, 1099px" />
</p>
<p>
  正确的方式：
</p>
<p>
  <img loading="lazy" decoding="async" width="987" height="261" src="/wp-content/uploads/2018/05/word-image-2854.png" class="wp-image-3235" srcset="/wp-content/uploads/2018/05/word-image-2854.png 987w, /wp-content/uploads/2018/05/word-image-2854-300x79.png 300w, /wp-content/uploads/2018/05/word-image-2854-768x203.png 768w" sizes="(max-width: 987px) 100vw, 987px" />
</p>
<h1>七、案例—标签页效果</h1>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3183.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（二）事件、JS闭包、DOM</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3136.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3136.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:56:20 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JS闭包]]></category>
		<category><![CDATA[事件]]></category>
		<guid isPermaLink="false">/?p=3136</guid>

					<description><![CDATA[JavaScript高级（2） 目录 一、回顾与加强 1、JavaScript错误类型及特点 1、编译类型的错 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript高级（2）
</p>
<p>
  目录
</p>
<h1>一、回顾与加强</h1>
<p>
  1、JavaScript错误类型及特点
</p>
<p>
  1、编译类型的错误
</p>
<p>
  编译错误就是语法错误。
</p>
<p>
  <img loading="lazy" decoding="async" width="1017" height="238" src="/wp-content/uploads/2018/05/word-image-2758.png" class="wp-image-3137" srcset="/wp-content/uploads/2018/05/word-image-2758.png 1017w, /wp-content/uploads/2018/05/word-image-2758-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2758-768x180.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" />
</p>
<p>
  2、执行错误
</p>
<p>
  语法上没有错误，结合上下午出现的错误，比如调用了一个不存在的变量或函数等。
</p>
<p>
  <img loading="lazy" decoding="async" width="1056" height="252" src="/wp-content/uploads/2018/05/word-image-2759.png" class="wp-image-3138" srcset="/wp-content/uploads/2018/05/word-image-2759.png 1056w, /wp-content/uploads/2018/05/word-image-2759-300x72.png 300w, /wp-content/uploads/2018/05/word-image-2759-768x183.png 768w, /wp-content/uploads/2018/05/word-image-2759-1024x244.png 1024w" sizes="(max-width: 1056px) 100vw, 1056px" />
</p>
<p>
  2、事件
</p>
<p>
  1、事件驱动式
</p>
<p>
  事件驱动式由：用户的行为+JavaScript引擎捕获用户的行为+<strong>调用处理函数</strong>。实际上就是一个事件的组成。
</p>
<p>
  2、事件处理函数的绑定与执行
</p>
<p>
  ①、行内绑定
</p>
<p>
  在HTML标签内指定事件并写处理程序。
</p>
<p>
  <img loading="lazy" decoding="async" width="847" height="245" src="/wp-content/uploads/2018/05/word-image-2760.png" class="wp-image-3139" srcset="/wp-content/uploads/2018/05/word-image-2760.png 847w, /wp-content/uploads/2018/05/word-image-2760-300x87.png 300w, /wp-content/uploads/2018/05/word-image-2760-768x222.png 768w" sizes="(max-width: 847px) 100vw, 847px" />
</p>
<p>
  ②、行内绑定—动态绑定
</p>
<p>
  如果事件的处理程序又大段的js代码，那么直接写到行内，肯定是不合理的，解决的办法是将大段的js代码封装成函数，然后触发事件的时候，调用这个函数。
</p>
<p>
  <img loading="lazy" decoding="async" width="910" height="279" src="/wp-content/uploads/2018/05/word-image-2761.png" class="wp-image-3140" srcset="/wp-content/uploads/2018/05/word-image-2761.png 910w, /wp-content/uploads/2018/05/word-image-2761-300x92.png 300w, /wp-content/uploads/2018/05/word-image-2761-768x235.png 768w" sizes="(max-width: 910px) 100vw, 910px" />
</p>
<p>
  ③、动态绑定
</p>
<p>
  通过获取元素（标签、节点）的dom对象，然后给dom对象绑定事件的方式来实现事件的绑定。
</p>
<p>
  <img loading="lazy" decoding="async" width="858" height="224" src="/wp-content/uploads/2018/05/word-image-2762.png" class="wp-image-3141" srcset="/wp-content/uploads/2018/05/word-image-2762.png 858w, /wp-content/uploads/2018/05/word-image-2762-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2762-768x201.png 768w" sizes="(max-width: 858px) 100vw, 858px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1051" height="377" src="/wp-content/uploads/2018/05/word-image-2763.png" class="wp-image-3142" srcset="/wp-content/uploads/2018/05/word-image-2763.png 1051w, /wp-content/uploads/2018/05/word-image-2763-300x108.png 300w, /wp-content/uploads/2018/05/word-image-2763-768x275.png 768w, /wp-content/uploads/2018/05/word-image-2763-1024x367.png 1024w" sizes="(max-width: 1051px) 100vw, 1051px" />
</p>
<p>
  3、在事件处理程序中，this分别表示什么
</p>
<p>
  ①、行内绑定
</p>
<p>
  <img loading="lazy" decoding="async" width="594" height="31" src="/wp-content/uploads/2018/05/word-image-2764.png" class="wp-image-3143" srcset="/wp-content/uploads/2018/05/word-image-2764.png 594w, /wp-content/uploads/2018/05/word-image-2764-300x16.png 300w" sizes="(max-width: 594px) 100vw, 594px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="645" height="242" src="/wp-content/uploads/2018/05/word-image-2765.png" class="wp-image-3144" srcset="/wp-content/uploads/2018/05/word-image-2765.png 645w, /wp-content/uploads/2018/05/word-image-2765-300x113.png 300w" sizes="(max-width: 645px) 100vw, 645px" />
</p>
<p>
  ②、行内绑定—动态执行
</p>
<p>
  <img loading="lazy" decoding="async" width="1026" height="277" src="/wp-content/uploads/2018/05/word-image-2766.png" class="wp-image-3145" srcset="/wp-content/uploads/2018/05/word-image-2766.png 1026w, /wp-content/uploads/2018/05/word-image-2766-300x81.png 300w, /wp-content/uploads/2018/05/word-image-2766-768x207.png 768w, /wp-content/uploads/2018/05/word-image-2766-1024x276.png 1024w" sizes="(max-width: 1026px) 100vw, 1026px" />
</p>
<p>
  ③、动态绑定
</p>
<p>
  <img loading="lazy" decoding="async" width="1022" height="262" src="/wp-content/uploads/2018/05/word-image-2767.png" class="wp-image-3146" srcset="/wp-content/uploads/2018/05/word-image-2767.png 1022w, /wp-content/uploads/2018/05/word-image-2767-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2767-768x197.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" />
</p>
<h1>二、闭包</h1>
<p>
  1、概念
</p>
<p>
  闭包，指的是词法表示包括不被计算的变量的函数，也就是说，函数可以使用函数之外定义的变量。
</p>
<p>
  2、特点（作用）
</p>
<p>
  1、和作用域的特定一致
</p>
<p>
  可以在函数内部使用函数外部的变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="706" height="183" src="/wp-content/uploads/2018/05/word-image-2768.png" class="wp-image-3147" srcset="/wp-content/uploads/2018/05/word-image-2768.png 706w, /wp-content/uploads/2018/05/word-image-2768-300x78.png 300w" sizes="(max-width: 706px) 100vw, 706px" />
</p>
<p>
  2、使用闭包，内存不会释放
</p>
<p>
  <img loading="lazy" decoding="async" width="820" height="309" src="/wp-content/uploads/2018/05/word-image-2769.png" class="wp-image-3148" srcset="/wp-content/uploads/2018/05/word-image-2769.png 820w, /wp-content/uploads/2018/05/word-image-2769-300x113.png 300w, /wp-content/uploads/2018/05/word-image-2769-768x289.png 768w" sizes="(max-width: 820px) 100vw, 820px" />
</p>
<p>
  3、案例
</p>
<p>
  1、点击页面中的三个li标签，能够正常输出li的下标
</p>
<p>
  <img loading="lazy" decoding="async" width="1127" height="451" src="/wp-content/uploads/2018/05/word-image-2770.png" class="wp-image-3149" srcset="/wp-content/uploads/2018/05/word-image-2770.png 1127w, /wp-content/uploads/2018/05/word-image-2770-300x120.png 300w, /wp-content/uploads/2018/05/word-image-2770-768x307.png 768w, /wp-content/uploads/2018/05/word-image-2770-1024x410.png 1024w" sizes="(max-width: 1127px) 100vw, 1127px" />
</p>
<p>
  上面案例的另一种写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="820" height="379" src="/wp-content/uploads/2018/05/word-image-2771.png" class="wp-image-3150" srcset="/wp-content/uploads/2018/05/word-image-2771.png 820w, /wp-content/uploads/2018/05/word-image-2771-300x139.png 300w, /wp-content/uploads/2018/05/word-image-2771-768x355.png 768w" sizes="(max-width: 820px) 100vw, 820px" />
</p>
<p>
  2、页面刷新后，每隔1秒分别输出1/2/3/4/5
</p>
<p>
  <img loading="lazy" decoding="async" width="838" height="416" src="/wp-content/uploads/2018/05/word-image-2772.png" class="wp-image-3151" srcset="/wp-content/uploads/2018/05/word-image-2772.png 838w, /wp-content/uploads/2018/05/word-image-2772-300x149.png 300w, /wp-content/uploads/2018/05/word-image-2772-768x381.png 768w" sizes="(max-width: 838px) 100vw, 838px" />
</p>
<h1>三、DOM</h1>
<p>
  1、什么是DOM
</p>
<p>
  DOM全称是Document Object Model（文档对象模型），它是JS将HTML按文档结构和内容层次抽象出的模型，使得JS有了访问HTML的能力，能够实现对HTML中内容的操作。DOM存在广泛，PHP以及其他语言也有各自的DOM模型。
</p>
<p>
  DOM模型呈现树状结构，因此也叫“树模型”，树中的内容（标签、属性、文本）称为“节点”，包含有元素节点（标签）、属性节点、文本节点。每个节点，都是一个dom节点对象。
</p>
<p>
  2、节点与DOM模型
</p>
<p>
  <img loading="lazy" decoding="async" width="515" height="276" src="/wp-content/uploads/2018/05/word-image-2773.png" class="wp-image-3152" srcset="/wp-content/uploads/2018/05/word-image-2773.png 515w, /wp-content/uploads/2018/05/word-image-2773-300x161.png 300w" sizes="(max-width: 515px) 100vw, 515px" />
</p>
<p>
  根据 W3C 的 HTML DOM 标准，HTML 文档中的所有内容都是节点：
</p>
<p>
  整个文档是一个文档节点，用document对象表示
</p>
<p>
  每个 HTML 元素是元素节点，比如html、head、body、a、h1
</p>
<p>
  HTML 元素内的文本是文本节点
</p>
<p>
  每个 HTML 属性是属性节点，比如href
</p>
<p>
  注释是注释节点
</p>
<p>
  3、节点之间的关系
</p>
<p>
  <img loading="lazy" decoding="async" width="383" height="259" src="/wp-content/uploads/2018/05/word-image-2774.png" class="wp-image-3153" srcset="/wp-content/uploads/2018/05/word-image-2774.png 383w, /wp-content/uploads/2018/05/word-image-2774-300x203.png 300w, /wp-content/uploads/2018/05/word-image-2774-220x150.png 220w" sizes="(max-width: 383px) 100vw, 383px" />
</p>
<p>
  4、元素节点查询操作
</p>
<p>
  1、基于文档（document）查询
</p>
<p>
  document.getElementById(元素id);   //得到一个dom对象
</p>
<p>
  document.getElementsByTagName(标签名); //得到的是一个数组，数组的每个单元是一个dom对象
</p>
<p>
  前面这两种方法推荐使用，因为兼容性好。
</p>
<p>
  document.getElementsByClassName(类名);  //IE8+支持，就是从IE9支持 得到的是一个数组，数组的每个单元是一个dom对象
</p>
<p>
  document.getElementsByName(元素的name属性); //得到的是一个数组
</p>
<p>
  //h5中提供的方法
</p>
<p>
  document.querySelector(css选择器); //IE7+支持  得到的是一个dom对象
</p>
<p>
  document.querySelectorAll(css选择器); //IE7+支持  得到的是一个数组
</p>
<p>
  测试的html：
</p>
<p>
  <img loading="lazy" decoding="async" width="623" height="203" src="/wp-content/uploads/2018/05/word-image-2775.png" class="wp-image-3154" srcset="/wp-content/uploads/2018/05/word-image-2775.png 623w, /wp-content/uploads/2018/05/word-image-2775-300x98.png 300w" sizes="(max-width: 623px) 100vw, 623px" />
</p>
<p>
  js代码及效果：
</p>
<p>
  <img loading="lazy" decoding="async" width="1291" height="392" src="/wp-content/uploads/2018/05/word-image-2776.png" class="wp-image-3155" srcset="/wp-content/uploads/2018/05/word-image-2776.png 1291w, /wp-content/uploads/2018/05/word-image-2776-300x91.png 300w, /wp-content/uploads/2018/05/word-image-2776-768x233.png 768w, /wp-content/uploads/2018/05/word-image-2776-1024x311.png 1024w" sizes="(max-width: 1291px) 100vw, 1291px" />
</p>
<p>
  2、相互关系查询
</p>
<p>
  ①、根据父节点查找子节点
</p>
<p>
  <img loading="lazy" decoding="async" width="750" height="505" src="/wp-content/uploads/2018/05/word-image-2777.png" class="wp-image-3156" srcset="/wp-content/uploads/2018/05/word-image-2777.png 750w, /wp-content/uploads/2018/05/word-image-2777-300x202.png 300w" sizes="(max-width: 750px) 100vw, 750px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1017" height="308" src="/wp-content/uploads/2018/05/word-image-2778.png" class="wp-image-3157" srcset="/wp-content/uploads/2018/05/word-image-2778.png 1017w, /wp-content/uploads/2018/05/word-image-2778-300x91.png 300w, /wp-content/uploads/2018/05/word-image-2778-768x233.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1055" height="288" src="/wp-content/uploads/2018/05/word-image-2779.png" class="wp-image-3158" srcset="/wp-content/uploads/2018/05/word-image-2779.png 1055w, /wp-content/uploads/2018/05/word-image-2779-300x82.png 300w, /wp-content/uploads/2018/05/word-image-2779-768x210.png 768w, /wp-content/uploads/2018/05/word-image-2779-1024x280.png 1024w" sizes="(max-width: 1055px) 100vw, 1055px" />
</p>
<p>
  ②、根据子节点查父节点
</p>
<p>
  <img loading="lazy" decoding="async" width="1096" height="258" src="/wp-content/uploads/2018/05/word-image-2780.png" class="wp-image-3159" srcset="/wp-content/uploads/2018/05/word-image-2780.png 1096w, /wp-content/uploads/2018/05/word-image-2780-300x71.png 300w, /wp-content/uploads/2018/05/word-image-2780-768x181.png 768w, /wp-content/uploads/2018/05/word-image-2780-1024x241.png 1024w" sizes="(max-width: 1096px) 100vw, 1096px" />
</p>
<p>
  ③、查询兄弟节点
</p>
<p>
  <img loading="lazy" decoding="async" width="1075" height="250" src="/wp-content/uploads/2018/05/word-image-2781.png" class="wp-image-3160" srcset="/wp-content/uploads/2018/05/word-image-2781.png 1075w, /wp-content/uploads/2018/05/word-image-2781-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2781-768x179.png 768w, /wp-content/uploads/2018/05/word-image-2781-1024x238.png 1024w" sizes="(max-width: 1075px) 100vw, 1075px" />
</p>
<p>
  3、遗留DOM
</p>
<p>
  早期DOM访问形式，在一些特定元素的获取上比较方便。被保留下来使用，W3C标准化之后 称为“0级DOM”。
</p>
<p>
  document.body			访问body节点
</p>
<p>
  document.forms		    访问所有的表单		返回集合
</p>
<p>
  document.formName[index].name       访问表单项
</p>
<p>
  document.anchors		    访问所有的锚点		返回集合
</p>
<p>
  document.links		    访问所有的链接		返回集合
</p>
<p>
  document.images		    访问所有的图片		返回集合
</p>
<p>
  document.all			    访问所有的元素
</p>
<p>
  <img loading="lazy" decoding="async" width="1158" height="459" src="/wp-content/uploads/2018/05/word-image-2782.png" class="wp-image-3161" srcset="/wp-content/uploads/2018/05/word-image-2782.png 1158w, /wp-content/uploads/2018/05/word-image-2782-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2782-768x304.png 768w, /wp-content/uploads/2018/05/word-image-2782-1024x406.png 1024w" sizes="(max-width: 1158px) 100vw, 1158px" />
</p>
<p>
  5、元素节点增删改操作
</p>
<p>
  1、增加元素节点/创建节点
</p>
<p>
  方法一：父节点.appendChild(子节点)
</p>
<p>
  <img loading="lazy" decoding="async" width="1079" height="443" src="/wp-content/uploads/2018/05/word-image-2783.png" class="wp-image-3162" srcset="/wp-content/uploads/2018/05/word-image-2783.png 1079w, /wp-content/uploads/2018/05/word-image-2783-300x123.png 300w, /wp-content/uploads/2018/05/word-image-2783-768x315.png 768w, /wp-content/uploads/2018/05/word-image-2783-1024x420.png 1024w" sizes="(max-width: 1079px) 100vw, 1079px" />
</p>
<p>
  方法二：父节点.insertBefore(新节点, 参照的节点);
</p>
<p>
  <img loading="lazy" decoding="async" width="1063" height="423" src="/wp-content/uploads/2018/05/word-image-2784.png" class="wp-image-3163" srcset="/wp-content/uploads/2018/05/word-image-2784.png 1063w, /wp-content/uploads/2018/05/word-image-2784-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2784-768x306.png 768w, /wp-content/uploads/2018/05/word-image-2784-1024x407.png 1024w" sizes="(max-width: 1063px) 100vw, 1063px" />
</p>
<p>
  2、修改节点
</p>
<p>
  方法：父节点.replaceChild(新节点, 待替换的节点);
</p>
<p>
  <img loading="lazy" decoding="async" width="1046" height="419" src="/wp-content/uploads/2018/05/word-image-2785.png" class="wp-image-3164" srcset="/wp-content/uploads/2018/05/word-image-2785.png 1046w, /wp-content/uploads/2018/05/word-image-2785-300x120.png 300w, /wp-content/uploads/2018/05/word-image-2785-768x308.png 768w, /wp-content/uploads/2018/05/word-image-2785-1024x410.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" />
</p>
<p>
  3、删除节点
</p>
<p>
  方法：父节点.removeChild(子节点);
</p>
<p>
  <img loading="lazy" decoding="async" width="944" height="312" src="/wp-content/uploads/2018/05/word-image-2786.png" class="wp-image-3165" srcset="/wp-content/uploads/2018/05/word-image-2786.png 944w, /wp-content/uploads/2018/05/word-image-2786-300x99.png 300w, /wp-content/uploads/2018/05/word-image-2786-768x254.png 768w" sizes="(max-width: 944px) 100vw, 944px" />
</p>
<p>
  6、属性节点操作
</p>
<p>
  1、获取元素的属性
</p>
<p>
  elementNode.attributes         获取元素的所有属性
</p>
<p>
  elementNode.getAttribute()		读取一个属性值
</p>
<p>
  elementNode.属性名          获取元素的属性
</p>
<p>
  <img loading="lazy" decoding="async" width="1098" height="432" src="/wp-content/uploads/2018/05/word-image-2787.png" class="wp-image-3166" srcset="/wp-content/uploads/2018/05/word-image-2787.png 1098w, /wp-content/uploads/2018/05/word-image-2787-300x118.png 300w, /wp-content/uploads/2018/05/word-image-2787-768x302.png 768w, /wp-content/uploads/2018/05/word-image-2787-1024x403.png 1024w" sizes="(max-width: 1098px) 100vw, 1098px" />
</p>
<p>
  2、添加/修改元素的属性
</p>
<p>
  elementNode.setAttribute()		设置（修改/添加）一个属性值
</p>
<p>
  elementNode.属性名 = 值     设置元素的属性
</p>
<p>
  <img loading="lazy" decoding="async" width="932" height="237" src="/wp-content/uploads/2018/05/word-image-2788.png" class="wp-image-3167" srcset="/wp-content/uploads/2018/05/word-image-2788.png 932w, /wp-content/uploads/2018/05/word-image-2788-300x76.png 300w, /wp-content/uploads/2018/05/word-image-2788-768x195.png 768w" sizes="(max-width: 932px) 100vw, 932px" />
</p>
<p>
  3、删除元素的属性
</p>
<p>
  elementNode.removeAttribute()	删除一个属性
</p>
<p>
  4、判断元素是否有哪个属性
</p>
<p>
  elementNode.hasAttribute()		检测是否有某个属性，有返回true，没有返回false
</p>
<p>
  <img loading="lazy" decoding="async" width="959" height="224" src="/wp-content/uploads/2018/05/word-image-2789.png" class="wp-image-3168" srcset="/wp-content/uploads/2018/05/word-image-2789.png 959w, /wp-content/uploads/2018/05/word-image-2789-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2789-768x179.png 768w" sizes="(max-width: 959px) 100vw, 959px" />
</p>
<p>
  5、案例&#8212;全选，反选，取消
</p>
<p>
  代码见19全选反选取消.html
</p>
<p>
  7、操作css样式
</p>
<p>
  1、设置css样式：
</p>
<p>
  语法： node<strong>.</strong>style<strong>.</strong>css样式 = 值
</p>
<p>
  不带中横线的css：node.style.样式 = 值。比如有color，border，width
</p>
<p>
  带中横线的，样式要去掉中横线，后面的首字母大写，backgroundColor、fontSize、lineHeight
</p>
<p>
  <img loading="lazy" decoding="async" width="705" height="465" src="/wp-content/uploads/2018/05/word-image-2790.png" class="wp-image-3169" srcset="/wp-content/uploads/2018/05/word-image-2790.png 705w, /wp-content/uploads/2018/05/word-image-2790-300x198.png 300w" sizes="(max-width: 705px) 100vw, 705px" />
</p>
<p>
  2、获取css样式
</p>
<p>
  使用node.style.样式的方式只能获取行内样式和js已经设置过的样式。
</p>
<p>
  在IE8及更低版本浏览器中支持node.currentStyle.样式
</p>
<p>
  高版本浏览器支持getComputedStyle(node).样式
</p>
<p>
  <img loading="lazy" decoding="async" width="967" height="177" src="/wp-content/uploads/2018/05/word-image-2791.png" class="wp-image-3170" srcset="/wp-content/uploads/2018/05/word-image-2791.png 967w, /wp-content/uploads/2018/05/word-image-2791-300x55.png 300w, /wp-content/uploads/2018/05/word-image-2791-768x141.png 768w" sizes="(max-width: 967px) 100vw, 967px" />
</p>
<p>
  兼容的性的写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="806" height="228" src="/wp-content/uploads/2018/05/word-image-2792.png" class="wp-image-3171" srcset="/wp-content/uploads/2018/05/word-image-2792.png 806w, /wp-content/uploads/2018/05/word-image-2792-300x85.png 300w, /wp-content/uploads/2018/05/word-image-2792-768x217.png 768w" sizes="(max-width: 806px) 100vw, 806px" />
</p>
<p>
  8、DOM属性
</p>
<p>
  DOM有四个属性，分别是：
</p>
<p><strong>innerHTML</strong>
</p>
<p>
  	获取/设置元素里的html内容
</p>
<p>
  <img loading="lazy" decoding="async" width="1275" height="264" src="/wp-content/uploads/2018/05/word-image-2793.png" class="wp-image-3172" srcset="/wp-content/uploads/2018/05/word-image-2793.png 1275w, /wp-content/uploads/2018/05/word-image-2793-300x62.png 300w, /wp-content/uploads/2018/05/word-image-2793-768x159.png 768w, /wp-content/uploads/2018/05/word-image-2793-1024x212.png 1024w" sizes="(max-width: 1275px) 100vw, 1275px" />
</p>
<p><strong>nodeName</strong>
</p>
<p>
  	nodeName 是只读的
</p>
<p>
  元素节点的 nodeName 与标签名相同
</p>
<p>
  属性节点的 nodeName 与属性名相同
</p>
<p>
  文本节点的 nodeName 始终是 #text
</p>
<p>
  文档节点的 nodeName 始终是 #document
</p>
<p><strong>nodeValue</strong>
</p>
<p>
  	元素节点的 nodeValue 是 undefined 或 null
</p>
<p>
  文本节点的 nodeValue 是文本本身
</p>
<p>
  属性节点的 nodeValue 是属性值
</p>
<p>
  <img loading="lazy" decoding="async" width="847" height="152" src="/wp-content/uploads/2018/05/word-image-2794.png" class="wp-image-3173" srcset="/wp-content/uploads/2018/05/word-image-2794.png 847w, /wp-content/uploads/2018/05/word-image-2794-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2794-768x138.png 768w" sizes="(max-width: 847px) 100vw, 847px" />
</p>
<p><strong>nodeType</strong>
</p>
<p>
  表示节点的类型
</p>
<p>
  	元素 1
</p>
<p>
  属性 2
</p>
<p>
  文本 3
</p>
<p>
  注释 8
</p>
<p>
  文档 9
</p>
<p>
  <img loading="lazy" decoding="async" width="1211" height="400" src="/wp-content/uploads/2018/05/word-image-2795.png" class="wp-image-3174" srcset="/wp-content/uploads/2018/05/word-image-2795.png 1211w, /wp-content/uploads/2018/05/word-image-2795-300x99.png 300w, /wp-content/uploads/2018/05/word-image-2795-768x254.png 768w, /wp-content/uploads/2018/05/word-image-2795-1024x338.png 1024w" sizes="(max-width: 1211px) 100vw, 1211px" />
</p>
<p>
  案例：完成兼容性的查找子节点的方法，及查找上一个兄弟的方法，及查找下一个兄弟的方法
</p>
<p>
  获取子元素的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="738" height="502" src="/wp-content/uploads/2018/05/word-image-2796.png" class="wp-image-3175" srcset="/wp-content/uploads/2018/05/word-image-2796.png 738w, /wp-content/uploads/2018/05/word-image-2796-300x204.png 300w, /wp-content/uploads/2018/05/word-image-2796-220x150.png 220w" sizes="(max-width: 738px) 100vw, 738px" />
</p>
<p>
  获取上一个兄弟的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="716" height="380" src="/wp-content/uploads/2018/05/word-image-2797.png" class="wp-image-3176" srcset="/wp-content/uploads/2018/05/word-image-2797.png 716w, /wp-content/uploads/2018/05/word-image-2797-300x159.png 300w" sizes="(max-width: 716px) 100vw, 716px" />
</p>
<p>
  获取下一个兄弟的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="757" height="353" src="/wp-content/uploads/2018/05/word-image-2798.png" class="wp-image-3177" srcset="/wp-content/uploads/2018/05/word-image-2798.png 757w, /wp-content/uploads/2018/05/word-image-2798-300x140.png 300w" sizes="(max-width: 757px) 100vw, 757px" />
</p>
<p>
  9、获取元素的位置
</p>
<p>
  offsetLeft	  元素在网页中水平坐标值	ele.offsetLeft
</p>
<p>
  offsetTop	  元素在网页中垂直坐标值	ele.offsetTop
</p>
<p>
  offsetWidth	元素在页面中占据的宽度	ele.offsetWidth
</p>
<p>
  offsetHeight	元素在页面中占据的高度	ele. offsetHeight
</p>
<p>
  HTML+css：
</p>
<p>
  <img loading="lazy" decoding="async" width="639" height="424" src="/wp-content/uploads/2018/05/word-image-2799.png" class="wp-image-3178" srcset="/wp-content/uploads/2018/05/word-image-2799.png 639w, /wp-content/uploads/2018/05/word-image-2799-300x199.png 300w" sizes="(max-width: 639px) 100vw, 639px" />
</p>
<p>
  js及输出结果：
</p>
<p>
  <img loading="lazy" decoding="async" width="1256" height="251" src="/wp-content/uploads/2018/05/word-image-2800.png" class="wp-image-3179" srcset="/wp-content/uploads/2018/05/word-image-2800.png 1256w, /wp-content/uploads/2018/05/word-image-2800-300x60.png 300w, /wp-content/uploads/2018/05/word-image-2800-768x153.png 768w, /wp-content/uploads/2018/05/word-image-2800-1024x205.png 1024w" sizes="(max-width: 1256px) 100vw, 1256px" />
</p>
<p>
  scrollLeft	  滚动条在容器中水平滚动的距离	ele.scrollLeft
</p>
<p>
  scrollTop	  滚动条在容器中垂直滚动的距离	ele.scrollTop
</p>
<p>
  测试的时候，先将页面设置的大一点，能看到滚动条：
</p>
<p>
  <img loading="lazy" decoding="async" width="566" height="31" src="/wp-content/uploads/2018/05/word-image-2801.png" class="wp-image-3180" srcset="/wp-content/uploads/2018/05/word-image-2801.png 566w, /wp-content/uploads/2018/05/word-image-2801-300x16.png 300w" sizes="(max-width: 566px) 100vw, 566px" />
</p>
<p>
  当滚动条滚动的时候，输出滚动的距离：
</p>
<p>
  <img loading="lazy" decoding="async" width="858" height="132" src="/wp-content/uploads/2018/05/word-image-2802.png" class="wp-image-3181" srcset="/wp-content/uploads/2018/05/word-image-2802.png 858w, /wp-content/uploads/2018/05/word-image-2802-300x46.png 300w, /wp-content/uploads/2018/05/word-image-2802-768x118.png 768w" sizes="(max-width: 858px) 100vw, 858px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3136.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（三）Json、淡入、事件、冒泡事件、可编辑表格、内置对象</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3098.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3098.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:53:28 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[Json]]></category>
		<category><![CDATA[事件]]></category>
		<category><![CDATA[内置对象]]></category>
		<category><![CDATA[冒泡事件]]></category>
		<category><![CDATA[可编辑表格]]></category>
		<category><![CDATA[淡入]]></category>
		<guid isPermaLink="false">/?p=3098</guid>

					<description><![CDATA[JavaScript高级（3） 0、知识点补充 查找节点： firstChild lastChild：会把空白 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript高级（3）
</p>
<h1>0、知识点补充</h1>
<p>
  查找节点：
</p>
<p>
  firstChild  lastChild：会把空白计算在内
</p>
<p>
  firstElementChild  lastElementChild ：只查找元素类型的子节点，不会计算空白，但是在IE8+才支持
</p>
<p>
  <img loading="lazy" decoding="async" width="1105" height="309" src="/wp-content/uploads/2018/05/word-image-2722.png" class="wp-image-3099" srcset="/wp-content/uploads/2018/05/word-image-2722.png 1105w, /wp-content/uploads/2018/05/word-image-2722-300x84.png 300w, /wp-content/uploads/2018/05/word-image-2722-768x215.png 768w, /wp-content/uploads/2018/05/word-image-2722-1024x286.png 1024w" sizes="(max-width: 1105px) 100vw, 1105px" />
</p>
<p>
  克隆节点：cloneNode()
</p>
<p>
  <img loading="lazy" decoding="async" width="1144" height="403" src="/wp-content/uploads/2018/05/word-image-2723.png" class="wp-image-3100" srcset="/wp-content/uploads/2018/05/word-image-2723.png 1144w, /wp-content/uploads/2018/05/word-image-2723-300x106.png 300w, /wp-content/uploads/2018/05/word-image-2723-768x271.png 768w, /wp-content/uploads/2018/05/word-image-2723-1024x361.png 1024w" sizes="(max-width: 1144px) 100vw, 1144px" />
</p>
<h1>一、案例—淡入效果</h1>
<p>
  1、做默认的html+css
</p>
<p>
  <img loading="lazy" decoding="async" width="631" height="564" src="/wp-content/uploads/2018/05/word-image-2724.png" class="wp-image-3101" srcset="/wp-content/uploads/2018/05/word-image-2724.png 631w, /wp-content/uploads/2018/05/word-image-2724-300x268.png 300w" sizes="(max-width: 631px) 100vw, 631px" />
</p>
<p>
  2、每隔两秒生硬的变化
</p>
<p>
  <img loading="lazy" decoding="async" width="674" height="313" src="/wp-content/uploads/2018/05/word-image-2725.png" class="wp-image-3102" srcset="/wp-content/uploads/2018/05/word-image-2725.png 674w, /wp-content/uploads/2018/05/word-image-2725-300x139.png 300w" sizes="(max-width: 674px) 100vw, 674px" />
</p>
<p>
  加入临界条件，控制inIndex和outIndex的范围：
</p>
<p>
  <img loading="lazy" decoding="async" width="728" height="418" src="/wp-content/uploads/2018/05/word-image-2726.png" class="wp-image-3103" srcset="/wp-content/uploads/2018/05/word-image-2726.png 728w, /wp-content/uploads/2018/05/word-image-2726-300x172.png 300w" sizes="(max-width: 728px) 100vw, 728px" />
</p>
<p>
  3、创建一个设置透明图的方法
</p>
<p>
  <img loading="lazy" decoding="async" width="752" height="229" src="/wp-content/uploads/2018/05/word-image-2727.png" class="wp-image-3104" srcset="/wp-content/uploads/2018/05/word-image-2727.png 752w, /wp-content/uploads/2018/05/word-image-2727-300x91.png 300w" sizes="(max-width: 752px) 100vw, 752px" />
</p>
<p>
  4、让图片慢慢变化
</p>
<p>
  <img loading="lazy" decoding="async" width="822" height="560" src="/wp-content/uploads/2018/05/word-image-2728.png" class="wp-image-3105" srcset="/wp-content/uploads/2018/05/word-image-2728.png 822w, /wp-content/uploads/2018/05/word-image-2728-300x204.png 300w, /wp-content/uploads/2018/05/word-image-2728-768x523.png 768w, /wp-content/uploads/2018/05/word-image-2728-220x150.png 220w" sizes="(max-width: 822px) 100vw, 822px" />
</p>
<p>
  5、解决变化过程中，最后一张总是显示的问题
</p>
<p>
  变化过程中，待显示的图片的透明度还没有达到1，也就是半透明状态，而其他图片的z-index值又都为1，z-index值相同的话，默认总是显示最后一张。
</p>
<p>
  解决的办法，变化这一刻（在变化的1秒钟之内），待显示的图片的z-index设置为3，其他的图片的z-index的值设置为1，让待隐藏的图片的z-index值为2.
</p>
<p>
  <img loading="lazy" decoding="async" width="1089" height="625" src="/wp-content/uploads/2018/05/word-image-2729.png" class="wp-image-3106" srcset="/wp-content/uploads/2018/05/word-image-2729.png 1089w, /wp-content/uploads/2018/05/word-image-2729-300x172.png 300w, /wp-content/uploads/2018/05/word-image-2729-768x441.png 768w, /wp-content/uploads/2018/05/word-image-2729-1024x588.png 1024w" sizes="(max-width: 1089px) 100vw, 1089px" />
</p>
<h1><a id="post-3098-_Toc488784655"></a>二、事件与事件对象</h1>
<p><a id="post-3098-_Toc488784656"></a><br />
  1、事件监听与移除事件监听
</p>
<p>
  事件监听要解决的问是给一个dom对象绑定多个事件。
</p>
<p>
  1、事件监听
</p>
<p>
  针对IE8+及火狐浏览器，使用addEventLister()，在绑定事件的时候，不要写on。
</p>
<p>
  针对IE8及更低版本浏览器使用attachEvent()，绑定的事件倒序执行。
</p>
<p>
  <img loading="lazy" decoding="async" width="758" height="475" src="/wp-content/uploads/2018/05/word-image-2730.png" class="wp-image-3107" srcset="/wp-content/uploads/2018/05/word-image-2730.png 758w, /wp-content/uploads/2018/05/word-image-2730-300x188.png 300w" sizes="(max-width: 758px) 100vw, 758px" />
</p>
<p>
  写一个兼容性的函数：
</p>
<p>
  <img loading="lazy" decoding="async" width="714" height="330" src="/wp-content/uploads/2018/05/word-image-2731.png" class="wp-image-3108" srcset="/wp-content/uploads/2018/05/word-image-2731.png 714w, /wp-content/uploads/2018/05/word-image-2731-300x139.png 300w" sizes="(max-width: 714px) 100vw, 714px" />
</p>
<p>
  2、移除事件监听
</p>
<p>
  <img loading="lazy" decoding="async" width="821" height="552" src="/wp-content/uploads/2018/05/word-image-2732.png" class="wp-image-3109" srcset="/wp-content/uploads/2018/05/word-image-2732.png 821w, /wp-content/uploads/2018/05/word-image-2732-300x202.png 300w, /wp-content/uploads/2018/05/word-image-2732-768x516.png 768w" sizes="(max-width: 821px) 100vw, 821px" />
</p>
<p>
  兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="613" height="209" src="/wp-content/uploads/2018/05/word-image-2733.png" class="wp-image-3110" srcset="/wp-content/uploads/2018/05/word-image-2733.png 613w, /wp-content/uploads/2018/05/word-image-2733-300x102.png 300w" sizes="(max-width: 613px) 100vw, 613px" />
</p>
<p><a id="post-3098-_Toc488784657"></a><br />
  2、事件对象
</p>
<p>
  事件对象存在于事件处理函数中。
</p>
<p>
  事件对象就是描述当前事件的具体的情况的对象。这个对象根据事件的不同，内容可能会发生细微的变化，比如键盘事件，事件对象就会包括keyCode，比如单击事件，事件对象就会包含点击的坐标。
</p>
<p>
  获取事件对象的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="689" height="244" src="/wp-content/uploads/2018/05/word-image-2734.png" class="wp-image-3111" srcset="/wp-content/uploads/2018/05/word-image-2734.png 689w, /wp-content/uploads/2018/05/word-image-2734-300x106.png 300w" sizes="(max-width: 689px) 100vw, 689px" />
</p>
<p>
  shiftKey：表示是否按了shift键，如果按了返回true，没有按返回false
</p>
<p>
  ctrlKey：表示是否按了ctrl键，如果按了返回true，没有按返回false
</p>
<p>
  altKey：表示是否按了alt键，如果按了返回true，没有按返回false
</p>
<p>
  keyCode：表示键盘的代码，是一个数字，每个键都会对应一个数字。具体查看“键盘KeyCode对照表.docx”
</p>
<p>
  判断是否按了@键：
</p>
<p>
  <img loading="lazy" decoding="async" width="736" height="409" src="/wp-content/uploads/2018/05/word-image-2735.png" class="wp-image-3112" srcset="/wp-content/uploads/2018/05/word-image-2735.png 736w, /wp-content/uploads/2018/05/word-image-2735-300x167.png 300w" sizes="(max-width: 736px) 100vw, 736px" />
</p>
<p><a id="post-3098-_Toc488784658"></a><br />
  3、阻止冒泡事件
</p>
<p>
  1、什么是冒泡事件？
</p>
<p>
  <img loading="lazy" decoding="async" width="962" height="356" src="/wp-content/uploads/2018/05/word-image-2736.png" class="wp-image-3113" srcset="/wp-content/uploads/2018/05/word-image-2736.png 962w, /wp-content/uploads/2018/05/word-image-2736-300x111.png 300w, /wp-content/uploads/2018/05/word-image-2736-768x284.png 768w" sizes="(max-width: 962px) 100vw, 962px" />
</p>
<p>
  在点击b这个div的时候，由于b在a的上面，也相当于点击了a。所以会触发两个事件，这种情况就是冒泡事件。
</p>
<p>
  2、如何阻止冒泡行为
</p>
<p>
  如果要阻止冒泡，
</p>
<p>
  标准浏览器使用evt.stopPropagation()
</p>
<p>
  IE内核浏览器使用window.event.cancelBubble = true;
</p>
<p>
  <img loading="lazy" decoding="async" width="569" height="491" src="/wp-content/uploads/2018/05/word-image-2737.png" class="wp-image-3114" srcset="/wp-content/uploads/2018/05/word-image-2737.png 569w, /wp-content/uploads/2018/05/word-image-2737-300x259.png 300w" sizes="(max-width: 569px) 100vw, 569px" />
</p>
<p><a id="post-3098-_Toc488784659"></a><br />
  4、阻止默认行为
</p>
<p>
  比如表单提交或者超链接跳转，都会有一个地址，点击表单中的提交按钮或者超链接就会跳转到相应的地址。如果点击之后不希望这样跳转，就使用js方法阻止它，这就是阻止默认行为。
</p>
<p>
  <img loading="lazy" decoding="async" width="810" height="486" src="/wp-content/uploads/2018/05/word-image-2738.png" class="wp-image-3115" srcset="/wp-content/uploads/2018/05/word-image-2738.png 810w, /wp-content/uploads/2018/05/word-image-2738-300x180.png 300w, /wp-content/uploads/2018/05/word-image-2738-768x461.png 768w" sizes="(max-width: 810px) 100vw, 810px" />
</p>
<p>
  另外的方法：
</p>
<p>
  <img loading="lazy" decoding="async" width="867" height="452" src="/wp-content/uploads/2018/05/word-image-2739.png" class="wp-image-3116" srcset="/wp-content/uploads/2018/05/word-image-2739.png 867w, /wp-content/uploads/2018/05/word-image-2739-300x156.png 300w, /wp-content/uploads/2018/05/word-image-2739-768x400.png 768w" sizes="(max-width: 867px) 100vw, 867px" />
</p>
<h1>三、案例—可编辑的表格</h1>
<p>
  1、完成html+css布局
</p>
<p>
  <img loading="lazy" decoding="async" width="484" height="391" src="/wp-content/uploads/2018/05/word-image-2740.png" class="wp-image-3117" srcset="/wp-content/uploads/2018/05/word-image-2740.png 484w, /wp-content/uploads/2018/05/word-image-2740-300x242.png 300w" sizes="(max-width: 484px) 100vw, 484px" />
</p>
<p>
  css：
</p>
<p>
  <img loading="lazy" decoding="async" width="644" height="437" src="/wp-content/uploads/2018/05/word-image-2741.png" class="wp-image-3118" srcset="/wp-content/uploads/2018/05/word-image-2741.png 644w, /wp-content/uploads/2018/05/word-image-2741-300x204.png 300w, /wp-content/uploads/2018/05/word-image-2741-220x150.png 220w" sizes="(max-width: 644px) 100vw, 644px" />
</p>
<p>
  2、隔行换色
</p>
<p>
  <img loading="lazy" decoding="async" width="637" height="160" src="/wp-content/uploads/2018/05/word-image-2742.png" class="wp-image-3119" srcset="/wp-content/uploads/2018/05/word-image-2742.png 637w, /wp-content/uploads/2018/05/word-image-2742-300x75.png 300w" sizes="(max-width: 637px) 100vw, 637px" />
</p>
<p>
  3、找到包括名字的td，并绑定单击事件
</p>
<p>
  <img loading="lazy" decoding="async" width="744" height="414" src="/wp-content/uploads/2018/05/word-image-2743.png" class="wp-image-3120" srcset="/wp-content/uploads/2018/05/word-image-2743.png 744w, /wp-content/uploads/2018/05/word-image-2743-300x167.png 300w" sizes="(max-width: 744px) 100vw, 744px" />
</p>
<p>
  4、点击td后，将input放到td中
</p>
<p>
  <img loading="lazy" decoding="async" width="728" height="359" src="/wp-content/uploads/2018/05/word-image-2744.png" class="wp-image-3121" srcset="/wp-content/uploads/2018/05/word-image-2744.png 728w, /wp-content/uploads/2018/05/word-image-2744-300x148.png 300w" sizes="(max-width: 728px) 100vw, 728px" />
</p>
<p>
  设置input的样式，阻止产生多个input
</p>
<p>
  <img loading="lazy" decoding="async" width="872" height="657" src="/wp-content/uploads/2018/05/word-image-2745.png" class="wp-image-3122" srcset="/wp-content/uploads/2018/05/word-image-2745.png 872w, /wp-content/uploads/2018/05/word-image-2745-300x226.png 300w, /wp-content/uploads/2018/05/word-image-2745-768x579.png 768w" sizes="(max-width: 872px) 100vw, 872px" />
</p>
<p>
  5、给input绑定事件
</p>
<p>
  <img loading="lazy" decoding="async" width="716" height="462" src="/wp-content/uploads/2018/05/word-image-2746.png" class="wp-image-3123" srcset="/wp-content/uploads/2018/05/word-image-2746.png 716w, /wp-content/uploads/2018/05/word-image-2746-300x194.png 300w" sizes="(max-width: 716px) 100vw, 716px" />
</p>
<h1>四、面向对象概述</h1>
<p>
  1、什么是对象
</p>
<p>
  我喜欢大眼睛，长头发，大长腿，小蛮腰，会洗衣服，会做饭，会生孩子的女孩。比如有孙俪，范冰冰。
</p>
<p>
  上面这句话中的“大眼睛，长头发，大长腿，小蛮腰，会洗衣服，会做饭，会生孩子”表示一类人，在程序中就是一个类。而孙俪，范冰冰是符合这类的人，在程序中就的对象。
</p>
<p>
  2、面向对象编程
</p>
<p>
  面向对象编程简称OOP（Object-Oritened Programming）为软件开发人员敞开了一扇大门，它使得代码的编写更加简洁、高效、可读性和维护性增强。它实现了软件工程的三大目标：（代码）重用性、（功能）扩展性和（操作）灵活性，它的实现是依赖于面向对象的三大特性：封装、继承、多态。在实际开发中 使用面向对象编程 可以实现系统化、模块化和结构化的设计 它是每位软件开发员不可或缺的一项技能。
</p>
<h1>五、自定义对象</h1>
<p>
  1、构造函数和类的说明
</p>
<p>
  PHP中要声明一个对象的话，必须先声明一个类，然后通过关键字new实例化得到一个对象。
</p>
<p>
  在js中，没有类的概念，只有构造函数的概念，js中会把构造函数当做类。
</p>
<p>
  在ES6（ECMAScript6）中才引入了类的概念。
</p>
<p>
  <img loading="lazy" decoding="async" width="595" height="179" src="/wp-content/uploads/2018/05/word-image-2747.png" class="wp-image-3124" srcset="/wp-content/uploads/2018/05/word-image-2747.png 595w, /wp-content/uploads/2018/05/word-image-2747-300x90.png 300w" sizes="(max-width: 595px) 100vw, 595px" />
</p>
<p>
  2、this关键字和成员
</p>
<p>
  <img loading="lazy" decoding="async" width="628" height="429" src="/wp-content/uploads/2018/05/word-image-2748.png" class="wp-image-3125" srcset="/wp-content/uploads/2018/05/word-image-2748.png 628w, /wp-content/uploads/2018/05/word-image-2748-300x205.png 300w, /wp-content/uploads/2018/05/word-image-2748-220x150.png 220w" sizes="(max-width: 628px) 100vw, 628px" />
</p>
<p>
  用this关键字，在构造函数中添加成员：<br />
  <br />
  <img loading="lazy" decoding="async" width="794" height="338" src="/wp-content/uploads/2018/05/word-image-2749.png" class="wp-image-3126" srcset="/wp-content/uploads/2018/05/word-image-2749.png 794w, /wp-content/uploads/2018/05/word-image-2749-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2749-768x327.png 768w" sizes="(max-width: 794px) 100vw, 794px" />
</p>
<p>
  this表示根据Person实例化的每个对象。当前用的是哪个对象，this就表示哪个对象。
</p>
<p>
  3、删除成员
</p>
<p>
  使用的关键字是delete。delete关键字用于删除对象的成员，既可以删除成员属性，也可以删除成员方法。
</p>
<p>
  <img loading="lazy" decoding="async" width="633" height="382" src="/wp-content/uploads/2018/05/word-image-2750.png" class="wp-image-3127" srcset="/wp-content/uploads/2018/05/word-image-2750.png 633w, /wp-content/uploads/2018/05/word-image-2750-300x181.png 300w" sizes="(max-width: 633px) 100vw, 633px" />
</p>
<p>
  4、练习
</p>
<p>
  案例目的是设置dom对象的css样式：
</p>
<p>
  使用的办法不是直接设置，而是将设置dom对象css样式写到对象的成员方法中
</p>
<p>
  <img loading="lazy" decoding="async" width="716" height="371" src="/wp-content/uploads/2018/05/word-image-2751.png" class="wp-image-3128" srcset="/wp-content/uploads/2018/05/word-image-2751.png 716w, /wp-content/uploads/2018/05/word-image-2751-300x155.png 300w" sizes="(max-width: 716px) 100vw, 716px" />
</p>
<p>
  完成链式调用：
</p>
<p>
  <img loading="lazy" decoding="async" width="1032" height="383" src="/wp-content/uploads/2018/05/word-image-2752.png" class="wp-image-3129" srcset="/wp-content/uploads/2018/05/word-image-2752.png 1032w, /wp-content/uploads/2018/05/word-image-2752-300x111.png 300w, /wp-content/uploads/2018/05/word-image-2752-768x285.png 768w, /wp-content/uploads/2018/05/word-image-2752-1024x380.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" />
</p>
<p>
  5、自定义对象在内存中的表现形式
</p>
<p>
  创建一个对象后，会在内存中栈和堆都开辟一个新的空间，堆中存储的是对象的实际内容，栈区存放的是堆的地址。
</p>
<p>
  <img loading="lazy" decoding="async" width="798" height="282" src="/wp-content/uploads/2018/05/word-image-2753.png" class="wp-image-3130" srcset="/wp-content/uploads/2018/05/word-image-2753.png 798w, /wp-content/uploads/2018/05/word-image-2753-300x106.png 300w, /wp-content/uploads/2018/05/word-image-2753-768x271.png 768w" sizes="(max-width: 798px) 100vw, 798px" />
</p>
<p>
  删除其中一个对象，会不会对另外的对象有影响？
</p>
<p>
  <img loading="lazy" decoding="async" width="797" height="280" src="/wp-content/uploads/2018/05/word-image-2754.png" class="wp-image-3131" srcset="/wp-content/uploads/2018/05/word-image-2754.png 797w, /wp-content/uploads/2018/05/word-image-2754-300x105.png 300w, /wp-content/uploads/2018/05/word-image-2754-768x270.png 768w" sizes="(max-width: 797px) 100vw, 797px" />
</p>
<h1>六、json格式的对象</h1>
<p>
  1、json简介
</p>
<p>
  json就是符合某种格式的字符串。
</p>
<p>
  JavaScript 对象表示法（JavaScript Object Notation）。
</p>
<p>
  JSON 是存储和交换文本信息的语法。类似 XML。
</p>
<p>
  JSON 比 XML 更小、更快，更易解析
</p>
<p>
  JSON是独立于语言和平台的。所有的编程语言都认识JSON，这一点和XML一样。
</p>
<p>
  2、json格式
</p>
<p>
  有两种写法：
</p>
<p>
  ①：方括号在外层，和JavaScript中的数组格式一样。
</p>
<p>
  [&#8216;apple&#8217;, &#8216;banana&#8217;, &#8216;pear&#8217;, &#8216;orange&#8217;, &#8216;xigua&#8217;]
</p>
<p>
  [{id:1, name:&#8217;宋江&#8217;, nickname:&#8217;及时雨&#8217;}, {id:2, name:&#8217;卢俊义&#8217;, nickname:&#8217;玉麒麟&#8217;},{id:1, name:&#8217;林冲&#8217;, nickname:&#8217;豹子头&#8217;}]
</p>
<p>
  ②、大括号在外，和JavaScript中的对象格式一样。
</p>
<p>
  {键:值, 键:值, ….}
</p>
<p>
  {键:[], 键:[], …}
</p>
<p>
  只要是[]，就要符合中括号的语法（和数组写法一样）;
</p>
<p>
  只要是大括号，就要符合大括号的语法（键:值, …）
</p>
<p>
  3、json格式的对象
</p>
<p>
  我们最终要讨论的是JavaScript的对象写法，只不过这种写法和json的格式一样。
</p>
<p>
  <img loading="lazy" decoding="async" width="598" height="104" src="/wp-content/uploads/2018/05/word-image-2755.png" class="wp-image-3132" srcset="/wp-content/uploads/2018/05/word-image-2755.png 598w, /wp-content/uploads/2018/05/word-image-2755-300x52.png 300w" sizes="(max-width: 598px) 100vw, 598px" />
</p>
<p>
  成员属性和成员方法：
</p>
<p>
  <img loading="lazy" decoding="async" width="711" height="420" src="/wp-content/uploads/2018/05/word-image-2756.png" class="wp-image-3133" srcset="/wp-content/uploads/2018/05/word-image-2756.png 711w, /wp-content/uploads/2018/05/word-image-2756-300x177.png 300w" sizes="(max-width: 711px) 100vw, 711px" />
</p>
<p>
  调用成员：
</p>
<p>
  <img loading="lazy" decoding="async" width="559" height="310" src="/wp-content/uploads/2018/05/word-image-2757.png" class="wp-image-3134" srcset="/wp-content/uploads/2018/05/word-image-2757.png 559w, /wp-content/uploads/2018/05/word-image-2757-300x166.png 300w" sizes="(max-width: 559px) 100vw, 559px" />
</p>
<h1>七、内置对象</h1>
<p>
  手册位置：上面的JavaScript—左侧的JavaScript—右侧的参考书
</p>
<p>
  1、Object
</p>
<p>
  2、String对象
</p>
<p>
  使用方法：
</p>
<p><strong>属性</strong>
</p>
<p>
  length：表示字符串的长度。
</p>
<p><strong>方法</strong>：
</p>
<p>
  indexOf() – 查找一个字符串是否存在，返回值是存在的位置（存在的情况），或-1（不存在）
</p>
<p>
  substr() – 截取字符串。两个参数，第一个参数表示起始位置可以是负数；第二个参数可选，表示长度，非负，不填表示到结尾
</p>
<p>
  substring() –截取字符串。两个参数，都是非负数。分别表示起始位置和结束位置，第二个参数不写表示到结尾
</p>
<p>
  slice() –截取字符串。两个参数，第一个表示起始位置，可以是负数。第二个是结尾位置。注意结尾位置不能在起始位置之前。
</p>
<p>
  split() – 将字符串分割成数组。两个参数，第一个表示分隔符，第二个可选表示数组的最大长度
</p>
<p>
  replace – 替换字符串中的值。两个参数，第一个表示查找的值，第二个表示替换后的值。
</p>
<p>
  3、Date对象
</p>
<p>
  使用方法，先new Date()，得到一个对象，然后用这个对象调用它里面的成员方法。
</p>
<p>
  4、Array对象
</p>
<p><strong>属性</strong>：
</p>
<p>
  length，表示数组元素个数
</p>
<p><strong>方法</strong>：
</p>
<p>
  concat()   连接两个或更多的数组，并返回结果。
</p>
<p>
  join()     把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
</p>
<p>
  pop()     删除并返回数组的最后一个元素
</p>
<p>
  push()    向数组的末尾添加一个或更多元素，并返回新的长度。
</p>
<p>
  reverse()  颠倒数组中元素的顺序。
</p>
<p>
  shift()    删除并返回数组的第一个元素
</p>
<p>
  slice()    从某个已有的数组返回选定的元素
</p>
<p>
  splice()   删除元素，并向数组添加新元素。
</p>
<p>
  toString() 把数组转换为字符串，并返回结果。
</p>
<p>
  unshift()   向数组的开头添加一个或更多元素，并返回新的长度。
</p>
<p>
  5、Math对象
</p>
<p><strong>方法</strong>：
</p>
<p>
  abs(x)   返回数的绝对值。 正数的绝对值是它本身，负数的绝对值是它的相反数。
</p>
<p>
  ceil(x)   对数进行上舍入。
</p>
<p>
  floor(x)  对数进行下舍入。
</p>
<p>
  max(x,y) 返回 x 和 y 中的最高值。
</p>
<p>
  min(x,y) 返回 x 和 y 中的最低值。
</p>
<p>
  random() 返回 0 ~ 1 之间的随机数。包含0，不包含1。[0,1)
</p>
<p>
  随机整数公式：Math.floor(<em>i</em> + Math.random() * (<em>j</em> – <em>i</em> + 1))
</p>
<p>
  round(x)  把数四舍五入为最接近的整数。
</p>
<p>
  6、window对象
</p>
<p><strong>方法</strong>：
</p>
<p>
  alert(); &#8212; 弹出一个警告框
</p>
<p>
  confirm(&#8216;你确定要删除吗&#8217;);  点击确定返回true，点击取消返回false
</p>
<p>
  prompt() – 弹出一个可输入的对话框，点击确定返回输入的内容，点击取消返回null
</p>
<p>
  open() – 打开一个新窗口
</p>
<p>
  var s =setTimeout(&#8220;js代码或js函数&#8221;, 毫秒数) – 表示多少毫秒后，执行前面的js代码或函数，只执行一次
</p>
<p>
  var t =setInterval(&#8220;js代码或js函数&#8221;, 毫秒数) – 表示每隔多少毫秒，执行一次前面的js代码或函数。
</p>
<p>
  clearTimeout(s); &#8212; 清除由setTimeout产生的定时器
</p>
<p>
  clearInterval(t); &#8212; 清除由setInterval产生的定时器
</p>
<p>
  7、navigator
</p>
<p>
   navigator.userAgent，从这个结果中可以查看到浏览器及浏览器的版本。
</p>
<p>
  8、screen
</p>
<p>
  screen.availHeight 返回显示屏幕的高度 (除 Windows 任务栏之外)。
</p>
<p>
  screen.availWidth 返回显示屏幕的宽度 (除 Windows 任务栏之外)。
</p>
<p>
  screen.height返回显示屏幕的高度
</p>
<p>
  screen.width返回显示屏幕的宽度
</p>
<p>
  9、history
</p>
<p>
  back() 加载 history 列表中的前一个 URL。
</p>
<p>
  forward() 加载 history 列表中的下一个 URL。
</p>
<p>
  go() 加载 history 列表中的某个具体页面。
</p>
<p>
  10、location
</p>
<p>
  reload() – 刷新页面，和点击浏览器中的刷新按钮是一个意思，如果添加参数为true表示强制刷新，和按Ctrl+F5一样，都表示清除缓存刷新。
</p>
<p>
  location的属性：</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3098.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（四）原型链、定义类或对象、私有和封装、静态属性和方法、继承、操作符 instanceof、for…in、顶层函数、贪吃蛇</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3053.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3053.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:50:44 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[for…in]]></category>
		<category><![CDATA[原型链]]></category>
		<category><![CDATA[定义类或对象]]></category>
		<category><![CDATA[操作符 instanceof]]></category>
		<category><![CDATA[私有和封装]]></category>
		<category><![CDATA[继承]]></category>
		<category><![CDATA[贪吃蛇]]></category>
		<category><![CDATA[静态属性和方法]]></category>
		<category><![CDATA[顶层函数]]></category>
		<guid isPermaLink="false">/?p=3053</guid>

					<description><![CDATA[JavaScript面向对象（4） https://developer.mozilla.org/zh-CN/d [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript面向对象（4）
</p>
<p>
  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
</p>
<p>
  http://javascript.ruanyifeng.com/
</p>
<h1>一、原型（原型链）</h1>
<p>
  1、原型对象
</p>
<p>
  案例：根据构造方法创建两个对象，看内存中的存在形式
</p>
<p>
  <img loading="lazy" decoding="async" width="547" height="264" src="/wp-content/uploads/2018/05/word-image-2679.png" class="wp-image-3054" srcset="/wp-content/uploads/2018/05/word-image-2679.png 547w, /wp-content/uploads/2018/05/word-image-2679-300x145.png 300w" sizes="(max-width: 547px) 100vw, 547px" />
</p>
<p>
  内存存在形式：
</p>
<p>
  <img loading="lazy" decoding="async" width="460" height="290" src="/wp-content/uploads/2018/05/word-image-2680.png" class="wp-image-3055" srcset="/wp-content/uploads/2018/05/word-image-2680.png 460w, /wp-content/uploads/2018/05/word-image-2680-300x189.png 300w" sizes="(max-width: 460px) 100vw, 460px" />
</p>
<p>
  根据内存图，可以看出，在内存中，两个对象的成员方法占用了两个空间，但实际上这两个方法完全一样，没有必要占用两个空间。
</p>
<p><strong>解决的办法就是使用原型对象。把两个对象相同的内容都放到构造方法的原型对象中</strong>。
</p>
<p>
  <img loading="lazy" decoding="async" width="619" height="288" src="/wp-content/uploads/2018/05/word-image-2681.png" class="wp-image-3056" srcset="/wp-content/uploads/2018/05/word-image-2681.png 619w, /wp-content/uploads/2018/05/word-image-2681-300x140.png 300w" sizes="(max-width: 619px) 100vw, 619px" />
</p>
<p>
  原型对象和构造器的关系：
</p>
<p>
  <img loading="lazy" decoding="async" width="481" height="96" src="/wp-content/uploads/2018/05/word-image-2682.png" class="wp-image-3057" srcset="/wp-content/uploads/2018/05/word-image-2682.png 481w, /wp-content/uploads/2018/05/word-image-2682-300x60.png 300w" sizes="(max-width: 481px) 100vw, 481px" />
</p>
<p>
  原型对象和构造器的关系：
</p>
<p>
  <img loading="lazy" decoding="async" width="930" height="253" src="/wp-content/uploads/2018/05/word-image-2683.png" class="wp-image-3058" srcset="/wp-content/uploads/2018/05/word-image-2683.png 930w, /wp-content/uploads/2018/05/word-image-2683-300x82.png 300w, /wp-content/uploads/2018/05/word-image-2683-768x209.png 768w" sizes="(max-width: 930px) 100vw, 930px" />
</p>
<p>
  将person中的jineng方法放到它的原型对象中。
</p>
<p>
  <img loading="lazy" decoding="async" width="995" height="421" src="/wp-content/uploads/2018/05/word-image-2684.png" class="wp-image-3059" srcset="/wp-content/uploads/2018/05/word-image-2684.png 995w, /wp-content/uploads/2018/05/word-image-2684-300x127.png 300w, /wp-content/uploads/2018/05/word-image-2684-768x325.png 768w" sizes="(max-width: 995px) 100vw, 995px" />
</p>
<p>
  2、原型链
</p>
<p>
  原型对象也是对象。它也可以充当其他构造器的原型对象。
</p>
<p>
  <img loading="lazy" decoding="async" width="749" height="324" src="/wp-content/uploads/2018/05/word-image-2685.png" class="wp-image-3060" srcset="/wp-content/uploads/2018/05/word-image-2685.png 749w, /wp-content/uploads/2018/05/word-image-2685-300x130.png 300w" sizes="(max-width: 749px) 100vw, 749px" />
</p>
<p>
  上图中，Object对象是person的原型对象，根据person实例化得到p1对象，p1对象是Boy构造器的原型对象，根据Boy实例化得到b1.
</p>
<p>
  <img loading="lazy" decoding="async" width="693" height="336" src="/wp-content/uploads/2018/05/word-image-2686.png" class="wp-image-3061" srcset="/wp-content/uploads/2018/05/word-image-2686.png 693w, /wp-content/uploads/2018/05/word-image-2686-300x145.png 300w" sizes="(max-width: 693px) 100vw, 693px" />
</p>
<p>
  在查找一个对象的成员属性的时候，优先从对象自身查找，如果没有从它的构造方法中查找，如果构造方法中也没有，那么去构造方法的原型对象中查找，如果还没有，那么都构造器的原型对象的构造器中查找，一直找到Object对象为止。这种链式的查找方式就是原型链。
</p>
<p>
  3、扩展内置对象
</p>
<p>
  内置对象有：String、Array、Date、Math、等。
</p>
<p>
  比如使用String对象的方法：
</p>
<p>
  var s = new String(&#8216;hello&#8217;);
</p>
<p>
  s.substr();
</p>
<p>
  String是JavaScript内置的一个构造函数。
</p>
<p>
  如果在String这个构造函数的原型对象上绑定一个方法的话，那么所有的字符串都可以使用这个方法。
</p>
<p>
  其他我们所学的哪些String对象中的方法，都是String的原型中的方法。
</p>
<p>
  <img loading="lazy" decoding="async" width="1114" height="276" src="/wp-content/uploads/2018/05/word-image-2687.png" class="wp-image-3062" srcset="/wp-content/uploads/2018/05/word-image-2687.png 1114w, /wp-content/uploads/2018/05/word-image-2687-300x74.png 300w, /wp-content/uploads/2018/05/word-image-2687-768x190.png 768w, /wp-content/uploads/2018/05/word-image-2687-1024x254.png 1024w" sizes="(max-width: 1114px) 100vw, 1114px" />
</p>
<p>
  4、DOM对象的原型对象
</p>
<p>
  DOM对象实际上就是通过getElement….这类方法获取页面中的元素、属性等生产的对象。
</p>
<p>
  <img loading="lazy" decoding="async" width="834" height="180" src="/wp-content/uploads/2018/05/word-image-2688.png" class="wp-image-3063" srcset="/wp-content/uploads/2018/05/word-image-2688.png 834w, /wp-content/uploads/2018/05/word-image-2688-300x65.png 300w, /wp-content/uploads/2018/05/word-image-2688-768x166.png 768w" sizes="(max-width: 834px) 100vw, 834px" />
</p>
<p>
  完成链式的设置dom对象的css的方法：
</p>
<p>
  <img loading="lazy" decoding="async" width="1065" height="462" src="/wp-content/uploads/2018/05/word-image-2689.png" class="wp-image-3064" srcset="/wp-content/uploads/2018/05/word-image-2689.png 1065w, /wp-content/uploads/2018/05/word-image-2689-300x130.png 300w, /wp-content/uploads/2018/05/word-image-2689-768x333.png 768w, /wp-content/uploads/2018/05/word-image-2689-1024x444.png 1024w" sizes="(max-width: 1065px) 100vw, 1065px" />
</p>
<h1>三、定义类或对象多种方式</h1>
<p>
  手册位置：上面JavaScript  左侧的JavaScript  到页面最下方点击“马上学生JavaScript高级教程吧”  左侧找到定义类或对象
</p>
<p>
  1、原始的定义对象的方式（构造函数方式）
</p>
<p>
  <img loading="lazy" decoding="async" width="706" height="204" src="/wp-content/uploads/2018/05/word-image-2690.png" class="wp-image-3065" srcset="/wp-content/uploads/2018/05/word-image-2690.png 706w, /wp-content/uploads/2018/05/word-image-2690-300x87.png 300w" sizes="(max-width: 706px) 100vw, 706px" />
</p>
<p>
  这种方式创建对象，如果创建多个对象的话，会为每个对象在内存中生成一个新的空间，比较占内存。
</p>
<p>
  2、原型对象方式
</p>
<p>
  <img loading="lazy" decoding="async" width="837" height="292" src="/wp-content/uploads/2018/05/word-image-2691.png" class="wp-image-3066" srcset="/wp-content/uploads/2018/05/word-image-2691.png 837w, /wp-content/uploads/2018/05/word-image-2691-300x105.png 300w, /wp-content/uploads/2018/05/word-image-2691-768x268.png 768w" sizes="(max-width: 837px) 100vw, 837px" />
</p>
<p>
  3、混合方式（构造方法方式+原型对象方式）
</p>
<p>
  原则是：
</p>
<p>
  把所有的对象的成员属性全部写到构造方法中，
</p>
<p>
  把所有的对象的成员方法全部写到原型对象上。
</p>
<p>
  <img loading="lazy" decoding="async" width="771" height="288" src="/wp-content/uploads/2018/05/word-image-2692.png" class="wp-image-3067" srcset="/wp-content/uploads/2018/05/word-image-2692.png 771w, /wp-content/uploads/2018/05/word-image-2692-300x112.png 300w, /wp-content/uploads/2018/05/word-image-2692-768x287.png 768w" sizes="(max-width: 771px) 100vw, 771px" />
</p>
<p>
  4、动态混合方式
</p>
<p>
  有些开发人员认为混合方式看起来不想是一个类，因为成员方法的绑定在构造函数外面，使用动态混合方式可以解决。
</p>
<p>
  <img loading="lazy" decoding="async" width="785" height="492" src="/wp-content/uploads/2018/05/word-image-2693.png" class="wp-image-3068" srcset="/wp-content/uploads/2018/05/word-image-2693.png 785w, /wp-content/uploads/2018/05/word-image-2693-300x188.png 300w, /wp-content/uploads/2018/05/word-image-2693-768x481.png 768w" sizes="(max-width: 785px) 100vw, 785px" />
</p>
<p>
  5、到底采用哪种方式
</p>
<p>
  在开发中，用的最多的就是混合方式和动态混合方式。
</p>
<h1>四、私有和封装</h1>
<p>
  在JavaScript中，没有类，那么只能模拟私有的成员。
</p>
<p>
  <img loading="lazy" decoding="async" width="599" height="358" src="/wp-content/uploads/2018/05/word-image-2694.png" class="wp-image-3069" srcset="/wp-content/uploads/2018/05/word-image-2694.png 599w, /wp-content/uploads/2018/05/word-image-2694-300x179.png 300w" sizes="(max-width: 599px) 100vw, 599px" />
</p>
<h1>五、静态属性和方法</h1>
<p>
  PHP中调用静态成员：类名::成员
</p>
<p>
  <img loading="lazy" decoding="async" width="747" height="189" src="/wp-content/uploads/2018/05/word-image-2695.png" class="wp-image-3070" srcset="/wp-content/uploads/2018/05/word-image-2695.png 747w, /wp-content/uploads/2018/05/word-image-2695-300x76.png 300w" sizes="(max-width: 747px) 100vw, 747px" />
</p>
<h1>六、继承</h1>
<p>
  1、原型链方式继承
</p>
<p>
  通过指定构造函数的原型对象方式，可以实现继承。
</p>
<p>
  <img loading="lazy" decoding="async" width="749" height="272" src="/wp-content/uploads/2018/05/word-image-2696.png" class="wp-image-3071" srcset="/wp-content/uploads/2018/05/word-image-2696.png 749w, /wp-content/uploads/2018/05/word-image-2696-300x109.png 300w" sizes="(max-width: 749px) 100vw, 749px" />
</p>
<p>
  2、对象冒充方式继承
</p>
<p>
  1、原始的对象冒充
</p>
<p>
  <img loading="lazy" decoding="async" width="906" height="470" src="/wp-content/uploads/2018/05/word-image-2697.png" class="wp-image-3072" srcset="/wp-content/uploads/2018/05/word-image-2697.png 906w, /wp-content/uploads/2018/05/word-image-2697-300x156.png 300w, /wp-content/uploads/2018/05/word-image-2697-768x398.png 768w" sizes="(max-width: 906px) 100vw, 906px" />
</p>
<p>
  2、call和apply完成继承
</p>
<p>
  <img loading="lazy" decoding="async" width="1076" height="317" src="/wp-content/uploads/2018/05/word-image-2698.png" class="wp-image-3073" srcset="/wp-content/uploads/2018/05/word-image-2698.png 1076w, /wp-content/uploads/2018/05/word-image-2698-300x88.png 300w, /wp-content/uploads/2018/05/word-image-2698-768x226.png 768w, /wp-content/uploads/2018/05/word-image-2698-1024x302.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" />
</p>
<p>
  3、实际开发中，使用哪种方式实现继承
</p>
<p>
  答案是使用混合方式，对于成员属性，使用对象冒充方式，对于成员方法，使用原型链方式
</p>
<p>
  <img loading="lazy" decoding="async" width="757" height="320" src="/wp-content/uploads/2018/05/word-image-2699.png" class="wp-image-3074" srcset="/wp-content/uploads/2018/05/word-image-2699.png 757w, /wp-content/uploads/2018/05/word-image-2699-300x127.png 300w" sizes="(max-width: 757px) 100vw, 757px" />
</p>
<h1>七、操作符instanceof</h1>
<p>
  用来判断一个对象的构造器是否是xxx
</p>
<p>
  语法：Obj instanceof Constructor
</p>
<p>
  <img loading="lazy" decoding="async" width="680" height="335" src="/wp-content/uploads/2018/05/word-image-2700.png" class="wp-image-3075" srcset="/wp-content/uploads/2018/05/word-image-2700.png 680w, /wp-content/uploads/2018/05/word-image-2700-300x148.png 300w" sizes="(max-width: 680px) 100vw, 680px" />
</p>
<p>
  person的prototype是Object对象，Object对象的构造器是Object函数，所以检测p1的构造器的时候，person和Object都返回true。
</p>
<h1>八、for…in</h1>
<p>
  用来遍历数组和对象的。
</p>
<p>
  语法：
</p>
<p>
  for(var x in arr){
</p>
<p>
  	//通过指定下标的形式，找到数组的每个单元，如 arr[x];
</p>
<p>
  }
</p>
<p>
  <img loading="lazy" decoding="async" width="973" height="352" src="/wp-content/uploads/2018/05/word-image-2701.png" class="wp-image-3076" srcset="/wp-content/uploads/2018/05/word-image-2701.png 973w, /wp-content/uploads/2018/05/word-image-2701-300x109.png 300w, /wp-content/uploads/2018/05/word-image-2701-768x278.png 768w" sizes="(max-width: 973px) 100vw, 973px" />
</p>
<h1>九、顶层函数</h1>
<p>
  顶层函数也就是全局函数，这些函数的调用不需要使用对象去调用。
</p>
<p>
  比如有Number()、String()。
</p>
<p>
  在手册的位置：上方的JavaScript  左侧的JavaScript  右侧的参考书  左侧JavaScript对象列表中有一个Functions.
</p>
<p>
  <img loading="lazy" decoding="async" width="1218" height="181" src="/wp-content/uploads/2018/05/word-image-2702.png" class="wp-image-3077" srcset="/wp-content/uploads/2018/05/word-image-2702.png 1218w, /wp-content/uploads/2018/05/word-image-2702-300x45.png 300w, /wp-content/uploads/2018/05/word-image-2702-768x114.png 768w, /wp-content/uploads/2018/05/word-image-2702-1024x152.png 1024w" sizes="(max-width: 1218px) 100vw, 1218px" />
</p>
<p>
  encodeURI()不会对“：;/?:@&amp;=+$,#”进行编码，如果要对这些字符进行编码的话，使用encodeURIComponent()；
</p>
<p>
  <img loading="lazy" decoding="async" width="800" height="184" src="/wp-content/uploads/2018/05/word-image-2703.png" class="wp-image-3078" srcset="/wp-content/uploads/2018/05/word-image-2703.png 800w, /wp-content/uploads/2018/05/word-image-2703-300x69.png 300w, /wp-content/uploads/2018/05/word-image-2703-768x177.png 768w" sizes="(max-width: 800px) 100vw, 800px" />
</p>
<h1>十、面向对象应用案例 – 贪吃蛇</h1>
<p>
  1、分析
</p>
<p>
  游戏有有三个对象，一个地图、一个食物、一条蛇。
</p>
<p>
  所以默认先创建三个对象。
</p>
<p>
  <img loading="lazy" decoding="async" width="400" height="261" src="/wp-content/uploads/2018/05/word-image-2704.png" class="wp-image-3079" srcset="/wp-content/uploads/2018/05/word-image-2704.png 400w, /wp-content/uploads/2018/05/word-image-2704-300x196.png 300w" sizes="(max-width: 400px) 100vw, 400px" />
</p>
<p>
  2、完成地图类（构造函数）
</p>
<p>
  地图有宽、高、背景颜色。这都是地图这个对象属性。
</p>
<p>
  <img loading="lazy" decoding="async" width="900" height="551" src="/wp-content/uploads/2018/05/word-image-2705.png" class="wp-image-3080" srcset="/wp-content/uploads/2018/05/word-image-2705.png 900w, /wp-content/uploads/2018/05/word-image-2705-300x184.png 300w, /wp-content/uploads/2018/05/word-image-2705-768x470.png 768w" sizes="(max-width: 900px) 100vw, 900px" />
</p>
<p>
  3、完成食物类
</p>
<p>
  <img loading="lazy" decoding="async" width="939" height="565" src="/wp-content/uploads/2018/05/word-image-2706.png" class="wp-image-3081" srcset="/wp-content/uploads/2018/05/word-image-2706.png 939w, /wp-content/uploads/2018/05/word-image-2706-300x181.png 300w, /wp-content/uploads/2018/05/word-image-2706-768x462.png 768w" sizes="(max-width: 939px) 100vw, 939px" />
</p>
<p>
  计算食物的left和top的方案：
</p>
<p>
  <img loading="lazy" decoding="async" width="1143" height="603" src="/wp-content/uploads/2018/05/word-image-2707.png" class="wp-image-3082" srcset="/wp-content/uploads/2018/05/word-image-2707.png 1143w, /wp-content/uploads/2018/05/word-image-2707-300x158.png 300w, /wp-content/uploads/2018/05/word-image-2707-768x405.png 768w, /wp-content/uploads/2018/05/word-image-2707-1024x540.png 1024w" sizes="(max-width: 1143px) 100vw, 1143px" />
</p>
<p>
  把食物放到地图中：
</p>
<p>
  首先把Map类的对象，升级为全局变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="596" height="106" src="/wp-content/uploads/2018/05/word-image-2708.png" class="wp-image-3083" srcset="/wp-content/uploads/2018/05/word-image-2708.png 596w, /wp-content/uploads/2018/05/word-image-2708-300x53.png 300w" sizes="(max-width: 596px) 100vw, 596px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="570" height="149" src="/wp-content/uploads/2018/05/word-image-2709.png" class="wp-image-3084" srcset="/wp-content/uploads/2018/05/word-image-2709.png 570w, /wp-content/uploads/2018/05/word-image-2709-300x78.png 300w" sizes="(max-width: 570px) 100vw, 570px" />
</p>
<p>
  在地图类中用一个成员属性_map表示地图那个div
</p>
<p>
  <img loading="lazy" decoding="async" width="829" height="416" src="/wp-content/uploads/2018/05/word-image-2710.png" class="wp-image-3085" srcset="/wp-content/uploads/2018/05/word-image-2710.png 829w, /wp-content/uploads/2018/05/word-image-2710-300x151.png 300w, /wp-content/uploads/2018/05/word-image-2710-768x385.png 768w" sizes="(max-width: 829px) 100vw, 829px" />
</p>
<p>
  把食物放到地图上：
</p>
<p>
  <img loading="lazy" decoding="async" width="762" height="389" src="/wp-content/uploads/2018/05/word-image-2711.png" class="wp-image-3086" srcset="/wp-content/uploads/2018/05/word-image-2711.png 762w, /wp-content/uploads/2018/05/word-image-2711-300x153.png 300w" sizes="(max-width: 762px) 100vw, 762px" />
</p>
<p>
  4、开发一条静态的小蛇
</p>
<p>
  蛇是由三个小div组成，每个小div都有宽度、高度、背景颜色、定位。
</p>
<p>
  <img loading="lazy" decoding="async" width="1028" height="523" src="/wp-content/uploads/2018/05/word-image-2712.png" class="wp-image-3087" srcset="/wp-content/uploads/2018/05/word-image-2712.png 1028w, /wp-content/uploads/2018/05/word-image-2712-300x153.png 300w, /wp-content/uploads/2018/05/word-image-2712-768x391.png 768w, /wp-content/uploads/2018/05/word-image-2712-1024x521.png 1024w" sizes="(max-width: 1028px) 100vw, 1028px" />
</p>
<p>
  将蛇显示在地图上：
</p>
<p>
  <img loading="lazy" decoding="async" width="612" height="180" src="/wp-content/uploads/2018/05/word-image-2713.png" class="wp-image-3088" srcset="/wp-content/uploads/2018/05/word-image-2713.png 612w, /wp-content/uploads/2018/05/word-image-2713-300x88.png 300w" sizes="(max-width: 612px) 100vw, 612px" />
</p>
<p>
  5、蛇移动
</p>
<p>
  写一个蛇移动的方法，这个方法实际上就是改变蛇的坐标即可。
</p>
<p>
  <img loading="lazy" decoding="async" width="817" height="393" src="/wp-content/uploads/2018/05/word-image-2714.png" class="wp-image-3089" srcset="/wp-content/uploads/2018/05/word-image-2714.png 817w, /wp-content/uploads/2018/05/word-image-2714-300x144.png 300w, /wp-content/uploads/2018/05/word-image-2714-768x369.png 768w" sizes="(max-width: 817px) 100vw, 817px" />
</p>
<p>
  每隔两秒调用一个move方法，并重新生成蛇。
</p>
<p>
  <img loading="lazy" decoding="async" width="650" height="249" src="/wp-content/uploads/2018/05/word-image-2715.png" class="wp-image-3090" srcset="/wp-content/uploads/2018/05/word-image-2715.png 650w, /wp-content/uploads/2018/05/word-image-2715-300x115.png 300w" sizes="(max-width: 650px) 100vw, 650px" />
</p>
<p>
  从新显示蛇的时候，会发现蛇越来越长，原因是每次显示蛇（show方法调用的时候），都会重新创建一个div，这样的话，div会越来越多，解决的办法是判断：
</p>
<p>
  <img loading="lazy" decoding="async" width="1051" height="557" src="/wp-content/uploads/2018/05/word-image-2716.png" class="wp-image-3091" srcset="/wp-content/uploads/2018/05/word-image-2716.png 1051w, /wp-content/uploads/2018/05/word-image-2716-300x159.png 300w, /wp-content/uploads/2018/05/word-image-2716-768x407.png 768w, /wp-content/uploads/2018/05/word-image-2716-1024x543.png 1024w" sizes="(max-width: 1051px) 100vw, 1051px" />
</p>
<p>
  6、控制蛇的方向
</p>
<p>
  通过按键（上下左右键）控制蛇的运动方向
</p>
<p>
  1、通过按键获取键盘的keyCode
</p>
<p>
  2、将keyCode传递给snake类的direct方法<br />
  <img loading="lazy" decoding="async" width="574" height="332" src="/wp-content/uploads/2018/05/word-image-2717.png" class="wp-image-3092" srcset="/wp-content/uploads/2018/05/word-image-2717.png 574w, /wp-content/uploads/2018/05/word-image-2717-300x174.png 300w" sizes="(max-width: 574px) 100vw, 574px" />
</p>
<p>
  3、direct方法设置蛇的方向的属性directtion
</p>
<p>
  <img loading="lazy" decoding="async" width="746" height="505" src="/wp-content/uploads/2018/05/word-image-2718.png" class="wp-image-3093" srcset="/wp-content/uploads/2018/05/word-image-2718.png 746w, /wp-content/uploads/2018/05/word-image-2718-300x203.png 300w, /wp-content/uploads/2018/05/word-image-2718-220x150.png 220w" sizes="(max-width: 746px) 100vw, 746px" />
</p>
<p>
  4、在move方法中，根据directtion属性，设置蛇头的坐标
</p>
<p>
  <img loading="lazy" decoding="async" width="795" height="512" src="/wp-content/uploads/2018/05/word-image-2719.png" class="wp-image-3094" srcset="/wp-content/uploads/2018/05/word-image-2719.png 795w, /wp-content/uploads/2018/05/word-image-2719-300x193.png 300w, /wp-content/uploads/2018/05/word-image-2719-768x495.png 768w" sizes="(max-width: 795px) 100vw, 795px" />
</p>
<p>
  7、吃食物
</p>
<p>
  判断，如果蛇头的坐标和食物的坐标一致，就表示吃到了
</p>
<p>
  <img loading="lazy" decoding="async" width="900" height="215" src="/wp-content/uploads/2018/05/word-image-2720.png" class="wp-image-3095" srcset="/wp-content/uploads/2018/05/word-image-2720.png 900w, /wp-content/uploads/2018/05/word-image-2720-300x72.png 300w, /wp-content/uploads/2018/05/word-image-2720-768x183.png 768w" sizes="(max-width: 900px) 100vw, 900px" />
</p>
<p>
  解决食物不会减少的问题：
</p>
<p>
  <img loading="lazy" decoding="async" width="804" height="537" src="/wp-content/uploads/2018/05/word-image-2721.png" class="wp-image-3096" srcset="/wp-content/uploads/2018/05/word-image-2721.png 804w, /wp-content/uploads/2018/05/word-image-2721-300x200.png 300w, /wp-content/uploads/2018/05/word-image-2721-768x513.png 768w" sizes="(max-width: 804px) 100vw, 804px" />
</p>
<p>
  8、其他问题还有，越来越快，快到某一个点应该保持这个速度就可以了
</p>
<p>
  9、边界问题，判断蛇头的坐标是否超出边界的坐标
</p>
<p>
  10、不能撞自身，判断蛇头坐标是否和蛇身中的某一节坐标相同</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3053.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（五）正则、分组、捕获、反向引用、匹配、属性、方法</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3000.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3000.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:46:40 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[分组]]></category>
		<category><![CDATA[匹配]]></category>
		<category><![CDATA[反向引用]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[捕获]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[正则]]></category>
		<guid isPermaLink="false">/?p=3000</guid>

					<description><![CDATA[JavaScript应该掌握的知识： DOM操作： 元素：获取节点，添加节点，修改节点，删除节点，克隆节点 属 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript应该掌握的知识：
</p>
<p>
  DOM操作：
</p>
<p>
  	元素：获取节点，添加节点，修改节点，删除节点，克隆节点
</p>
<p>
  	属性：获取元素的属性，增删改属性
</p>
<p>
  事件绑定：
</p>
<p>
  	domObj.onclick = function(){
</p>
<p>
  		//这个函数不是直接执行，由用户的行为来触发这个函数
</p>
<p>
  }
</p>
<p>
  常用事件：
</p>
<p>
  window.onload事件：
</p>
<p>
  <img loading="lazy" decoding="async" width="699" height="307" src="/wp-content/uploads/2018/05/word-image-2630.png" class="wp-image-3001" srcset="/wp-content/uploads/2018/05/word-image-2630.png 699w, /wp-content/uploads/2018/05/word-image-2630-300x132.png 300w" sizes="(max-width: 699px) 100vw, 699px" />
</p>
<p>
  onclick
</p>
<p>
  onkeyup  /  onkeydown  / onkeypress
</p>
<p>
  onmouseover / onmouseout
</p>
<p>
  onfocus / onblur
</p>
<p>
  onchange
</p>
<p>
  <img loading="lazy" decoding="async" width="761" height="420" src="/wp-content/uploads/2018/05/word-image-2631.png" class="wp-image-3002" srcset="/wp-content/uploads/2018/05/word-image-2631.png 761w, /wp-content/uploads/2018/05/word-image-2631-300x166.png 300w" sizes="(max-width: 761px) 100vw, 761px" />
</p>
<p>
  正则表达式
</p>
<h1>一、概述</h1>
<p>
  1、概述
</p>
<p>
  正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个字符串中是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。
</p>
<p>
  匹配就是在某个字符串中查找你想要查找的内容（由正则表达式决定），如果查找到了，就表示匹配。没有查找到就表示不匹配。
</p>
<p>
  abacabad
</p>
<p>
  正则表达式本身是一门独立的技术，可以被大多数编程语言所使用，如Javascript、PHP、Java
</p>
<p>
  2、应用场景
</p>
<p>
  （1）表单验证里面，验证字符的合法性，如邮箱是否合法，手机号是否合法等等。
</p>
<p>
  （2）信息过滤，如论坛帖子或者评论中的非法字符，例如 sql注入、js脚本注入、煽动性的言论。
</p>
<p>
  （3）信息采集，采集别人网站上面的内容，例如整页采集时 筛选出需求的部分
</p>
<p>
  （4）信息替换。
</p>
<p>
  （5）页面伪静态的规则
</p>
<h1>二、入门案例</h1>
<p>
  1、正则用法说明
</p>
<p>
  这个案例是在字符串str中查找是否有p。
</p>
<p>
  <img loading="lazy" decoding="async" width="657" height="160" src="/wp-content/uploads/2018/05/word-image-2632.png" class="wp-image-3003" srcset="/wp-content/uploads/2018/05/word-image-2632.png 657w, /wp-content/uploads/2018/05/word-image-2632-300x73.png 300w" sizes="(max-width: 657px) 100vw, 657px" />
</p>
<p><strong>正则语法：</strong>
</p>
<p>
  以两条斜线，作为正则表达式起始和结尾的定界符。不能加引号。
</p>
<p>
  match是字符串方法，所以应该由字符串调用。意思是在字符串中匹配要查找的值，如果匹配将返回匹配的内容，如果不匹配返回null。
</p>
<p>
  2、全局修饰符g
</p>
<p>
  g是global，表示全局的意思，它是正则表达式语法中的修饰符，修饰符应该放到定界符(/)的后面。
</p>
<p>
  <img loading="lazy" decoding="async" width="657" height="160" src="/wp-content/uploads/2018/05/word-image-2633.png" class="wp-image-3004" srcset="/wp-content/uploads/2018/05/word-image-2633.png 657w, /wp-content/uploads/2018/05/word-image-2633-300x73.png 300w" sizes="(max-width: 657px) 100vw, 657px" />
</p>
<h1>三、正则语法</h1>
<p>
  1、量词
</p>
<p>
  n+   匹配任何包含至少一个 n 的字符串。匹配一个或多个前导字符（<strong>前导字符就是紧挨着+的前一个字符</strong>）
</p>
<p>
  n*    匹配任何包含零个或多个 n 的字符串。前导字符有没有都行
</p>
<p>
  n?    匹配任何包含零个或一个 n 的字符串。
</p>
<p>
  <img loading="lazy" decoding="async" width="911" height="101" src="/wp-content/uploads/2018/05/word-image-2634.png" class="wp-image-3005" srcset="/wp-content/uploads/2018/05/word-image-2634.png 911w, /wp-content/uploads/2018/05/word-image-2634-300x33.png 300w, /wp-content/uploads/2018/05/word-image-2634-768x85.png 768w" sizes="(max-width: 911px) 100vw, 911px" />
</p>
<p>
  n{X} 匹配包含 X 个 n 的序列的字符串。
</p>
<p>
  n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
</p>
<p>
  n{X,} 匹配包含至少 X 个 n 的序列的字符串。
</p>
<p>
  <img loading="lazy" decoding="async" width="738" height="92" src="/wp-content/uploads/2018/05/word-image-2635.png" class="wp-image-3006" srcset="/wp-content/uploads/2018/05/word-image-2635.png 738w, /wp-content/uploads/2018/05/word-image-2635-300x37.png 300w" sizes="(max-width: 738px) 100vw, 738px" />
</p>
<p>
  n$    匹配任何结尾为 n 的字符串。从末尾开始匹配
</p>
<p>
  ^n    匹配任何开头为 n 的字符串。（注意位置在前面）
</p>
<p>
  ^n$   表示只匹配字符串n。也就是匹配整个字符串。
</p>
<p>
  <img loading="lazy" decoding="async" width="906" height="112" src="/wp-content/uploads/2018/05/word-image-2636.png" class="wp-image-3007" srcset="/wp-content/uploads/2018/05/word-image-2636.png 906w, /wp-content/uploads/2018/05/word-image-2636-300x37.png 300w, /wp-content/uploads/2018/05/word-image-2636-768x95.png 768w" sizes="(max-width: 906px) 100vw, 906px" />
</p>
<p>
  2、元字符
</p>
<p><strong>.</strong> 表示单个字符，表示任意字符。除了换行和行结束符。
</p>
<p><strong>.*</strong> 表示任意字符串（0个或多个任意字符，除了换行和行结束符）
</p>
<p>
  <img loading="lazy" decoding="async" width="725" height="68" src="/wp-content/uploads/2018/05/word-image-2637.png" class="wp-image-3008" srcset="/wp-content/uploads/2018/05/word-image-2637.png 725w, /wp-content/uploads/2018/05/word-image-2637-300x28.png 300w" sizes="(max-width: 725px) 100vw, 725px" />
</p>
<p><strong>\w</strong>  匹配任何数字、字母、下划线。<strong>一个\w表示一个字符</strong>。
</p>
<p><strong>\W</strong>  匹配任何非数字、非字母、非下划线。
</p>
<p><strong>\d</strong> 查找数字。
</p>
<p><strong>\D</strong> 查找非数字字符。
</p>
<p><strong>\s</strong> 查找空白字符。
</p>
<p><strong>\S</strong> 查找非空白字符。
</p>
<p><strong>\b</strong> 匹配单词边界。（边界字母个数没有限制；\b放前面表示匹配单词前面的边界，\b表示匹配单词后面的边界）
</p>
<p><strong>\B</strong> 匹配非单词边界。
</p>
<p><strong>\n</strong> 查找换行符。
</p>
<p><strong>\r</strong> 查找回车符。
</p>
<p><strong>\t</strong> 查找制表符。
</p>
<p>
  <img loading="lazy" decoding="async" width="795" height="207" src="/wp-content/uploads/2018/05/word-image-2638.png" class="wp-image-3009" srcset="/wp-content/uploads/2018/05/word-image-2638.png 795w, /wp-content/uploads/2018/05/word-image-2638-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2638-768x200.png 768w" sizes="(max-width: 795px) 100vw, 795px" />
</p>
<p>
  3、方括号
</p>
<p>
  方括号表示一个范围，也称为<strong>字符簇</strong>。
</p>
<p>
  [abc]  查找方括号之间的任何字符。
</p>
<p>
  [^abc] 查找任何不在方括号之间的字符。（方括号中的^表示取反）
</p>
<p>
  <img loading="lazy" decoding="async" width="927" height="139" src="/wp-content/uploads/2018/05/word-image-2639.png" class="wp-image-3010" srcset="/wp-content/uploads/2018/05/word-image-2639.png 927w, /wp-content/uploads/2018/05/word-image-2639-300x45.png 300w, /wp-content/uploads/2018/05/word-image-2639-768x115.png 768w" sizes="(max-width: 927px) 100vw, 927px" />
</p>
<p>
  [0-9] 查找任何从 0 至 9 的数字。表示一个字符
</p>
<p>
  [a-z] 查找任何从小写 a 到小写 z 的字符。
</p>
<p>
  [A-Z] 查找任何从大写 A 到大写 Z 的字符。
</p>
<p>
  [A-z] 查找任何从大写 A 到小写 z 的字符。<strong>包括下划线</strong>。
</p>
<p>
  [5-8] 查找5 &lt;= 目标 &lt;= 8的字符
</p>
<p>
  <img loading="lazy" decoding="async" width="854" height="180" src="/wp-content/uploads/2018/05/word-image-2640.png" class="wp-image-3011" srcset="/wp-content/uploads/2018/05/word-image-2640.png 854w, /wp-content/uploads/2018/05/word-image-2640-300x63.png 300w, /wp-content/uploads/2018/05/word-image-2640-768x162.png 768w" sizes="(max-width: 854px) 100vw, 854px" />
</p>
<p><strong>(</strong>red|blue|green<strong>)</strong> 查找任何指定的选项。（竖线|表示或者）
</p>
<p>
  <img loading="lazy" decoding="async" width="971" height="52" src="/wp-content/uploads/2018/05/word-image-2641.png" class="wp-image-3012" srcset="/wp-content/uploads/2018/05/word-image-2641.png 971w, /wp-content/uploads/2018/05/word-image-2641-300x16.png 300w, /wp-content/uploads/2018/05/word-image-2641-768x41.png 768w" sizes="(max-width: 971px) 100vw, 971px" />
</p>
<p>
  4、修饰符
</p>
<p>
  i  执行对大小写不敏感的匹配。
</p>
<p>
  g  执行全局匹配（查找所有匹配而非在找到第一个匹配后停止）。
</p>
<p>
  m 执行多行匹配。
</p>
<p>
  <img loading="lazy" decoding="async" width="937" height="123" src="/wp-content/uploads/2018/05/word-image-2642.png" class="wp-image-3013" srcset="/wp-content/uploads/2018/05/word-image-2642.png 937w, /wp-content/uploads/2018/05/word-image-2642-300x39.png 300w, /wp-content/uploads/2018/05/word-image-2642-768x101.png 768w" sizes="(max-width: 937px) 100vw, 937px" />
</p>
<p>
  5、转义字符
</p>
<p>
  <img loading="lazy" decoding="async" width="505" height="49" src="/wp-content/uploads/2018/05/word-image-2643.png" class="wp-image-3014" srcset="/wp-content/uploads/2018/05/word-image-2643.png 505w, /wp-content/uploads/2018/05/word-image-2643-300x29.png 300w" sizes="(max-width: 505px) 100vw, 505px" />
</p>
<h1>四、分组/捕获和反向引用</h1>
<p><strong>捕获和反向引用的语法的解释</strong>：
</p>
<p>
  正则中出现的小括号，就叫捕获或者分组
</p>
<p>
  在正则语法中（在/…/内），在捕获的后面，用“\1”来引用前面的捕获。用\2表示第二个捕获的内容….
</p>
<p>
  在正则语法外（如replace时），用“$1”来引用前面的捕获。
</p>
<p>
  <img loading="lazy" decoding="async" width="737" height="273" src="/wp-content/uploads/2018/05/word-image-2644.png" class="wp-image-3015" srcset="/wp-content/uploads/2018/05/word-image-2644.png 737w, /wp-content/uploads/2018/05/word-image-2644-300x111.png 300w" sizes="(max-width: 737px) 100vw, 737px" />
</p>
<p><strong>禁止引用</strong>
</p>
<p><strong>(?:正则) 这个小括号中的内容不能够被引用</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="901" height="96" src="/wp-content/uploads/2018/05/word-image-2645.png" class="wp-image-3016" srcset="/wp-content/uploads/2018/05/word-image-2645.png 901w, /wp-content/uploads/2018/05/word-image-2645-300x32.png 300w, /wp-content/uploads/2018/05/word-image-2645-768x82.png 768w" sizes="(max-width: 901px) 100vw, 901px" />
</p>
<h1>五、匹配中文（utf-8编码）</h1>
<p>
  每个字符（中文、英文字母、数字、各种符号、拉丁文、韩文、日文等）都对应着一个Unicode编码。
</p>
<p>
  查看Unicode编码，找到中文的部分，然后获取中文的Unicode编码的区间，就可以用正则匹配了。
</p>
<p><strong>中文的Unicode编码从4E00开始，到9FA5结束</strong>。
</p>
<p>
  [4E00-9FA5]
</p>
<p><strong>完整的Unicode编码表</strong>：http://blog.csdn.net/hherima/article/details/9045861
</p>
<p>
  <img loading="lazy" decoding="async" width="868" height="80" src="/wp-content/uploads/2018/05/word-image-2646.png" class="wp-image-3017" srcset="/wp-content/uploads/2018/05/word-image-2646.png 868w, /wp-content/uploads/2018/05/word-image-2646-300x28.png 300w, /wp-content/uploads/2018/05/word-image-2646-768x71.png 768w" sizes="(max-width: 868px) 100vw, 868px" />
</p>
<h1>六、环视（断言/零宽断言）</h1>
<p><strong>every(?=n) 匹配任何其后紧接指定字符串 n 的字符串</strong>。
</p>
<p>
  查找a，什么样的a呢？后面必须是b的a
</p>
<p>
  <img loading="lazy" decoding="async" width="699" height="96" src="/wp-content/uploads/2018/05/word-image-2647.png" class="wp-image-3018" srcset="/wp-content/uploads/2018/05/word-image-2647.png 699w, /wp-content/uploads/2018/05/word-image-2647-300x41.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></p>
<p><strong>every(?!n) 匹配任何其后没有紧接指定字符串 n 的字符串</strong>。
</p>
<p>
  查找a，什么样的a呢？后面不能是b的a
</p>
<p>
  <img loading="lazy" decoding="async" width="782" height="141" src="/wp-content/uploads/2018/05/word-image-2648.png" class="wp-image-3019" srcset="/wp-content/uploads/2018/05/word-image-2648.png 782w, /wp-content/uploads/2018/05/word-image-2648-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2648-768x138.png 768w" sizes="(max-width: 782px) 100vw, 782px" />
</p>
<p>
  另外，还会看到(?!B)[A-Z]这种写法，其实它是[A-Z]范围里，排除B的意思，前置的(?!B)只是对后面数据的一个限定，从而达到过滤匹配的效果。
</p>
<p>
  <img loading="lazy" decoding="async" width="854" height="138" src="/wp-content/uploads/2018/05/word-image-2649.png" class="wp-image-3020" srcset="/wp-content/uploads/2018/05/word-image-2649.png 854w, /wp-content/uploads/2018/05/word-image-2649-300x48.png 300w, /wp-content/uploads/2018/05/word-image-2649-768x124.png 768w" sizes="(max-width: 854px) 100vw, 854px" />
</p>
<h1>七、正则对象的属性和方法</h1>
<p>
  正则对象中的成员方法和属性的正确调用方式：
</p>
<p>
  <img loading="lazy" decoding="async" width="673" height="160" src="/wp-content/uploads/2018/05/word-image-2650.png" class="wp-image-3021" srcset="/wp-content/uploads/2018/05/word-image-2650.png 673w, /wp-content/uploads/2018/05/word-image-2650-300x71.png 300w" sizes="(max-width: 673px) 100vw, 673px" />
</p>
<p>
  1、exec方法和lastIndex属性
</p>
<p>
  exec方法执行一个正则匹配，<strong>只匹配一次</strong>，匹配到结果就返回一个数组类型的结果，匹配不到就返回null。并将表示匹配的位置 置为下一个匹配的位置。
</p>
<p>
  lastIndex一个整数，标示开始下一次匹配的字符位置。没有更多匹配重置lastIndex为0.
</p>
<p>
  依次调用exec匹配下一个的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="894" height="261" src="/wp-content/uploads/2018/05/word-image-2651.png" class="wp-image-3023" srcset="/wp-content/uploads/2018/05/word-image-2651.png 894w, /wp-content/uploads/2018/05/word-image-2651-300x88.png 300w, /wp-content/uploads/2018/05/word-image-2651-768x224.png 768w" sizes="(max-width: 894px) 100vw, 894px" />
</p>
<p>
  匹配带子表达式的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="982" height="133" src="/wp-content/uploads/2018/05/word-image-2652.png" class="wp-image-3024" srcset="/wp-content/uploads/2018/05/word-image-2652.png 982w, /wp-content/uploads/2018/05/word-image-2652-300x41.png 300w, /wp-content/uploads/2018/05/word-image-2652-768x104.png 768w" sizes="(max-width: 982px) 100vw, 982px" />
</p>
<p>
  带子表达式并且依次调用的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="934" height="118" src="/wp-content/uploads/2018/05/word-image-2653.png" class="wp-image-3025" srcset="/wp-content/uploads/2018/05/word-image-2653.png 934w, /wp-content/uploads/2018/05/word-image-2653-300x38.png 300w, /wp-content/uploads/2018/05/word-image-2653-768x97.png 768w" sizes="(max-width: 934px) 100vw, 934px" />
</p>
<p>
  2、test方法
</p>
<p>
  test方法检测目标字符串和正则表达式是否匹配，如果匹配返回true，不匹配返回false。
</p>
<p>
  <img loading="lazy" decoding="async" width="587" height="86" src="/wp-content/uploads/2018/05/word-image-2654.png" class="wp-image-3026" srcset="/wp-content/uploads/2018/05/word-image-2654.png 587w, /wp-content/uploads/2018/05/word-image-2654-300x44.png 300w" sizes="(max-width: 587px) 100vw, 587px" />
</p>
<h1>八、支持正则表达式的 String 对象的方法</h1>
<p>
  1、search()
</p>
<p>
  在字符串中搜索符合正则表达式的结果。如果找到结果返回结果的位置，停止向后检索，也就是说忽略全局标识符g；如果没有匹配结果，返回-1.
</p>
<p>
  <img loading="lazy" decoding="async" width="508" height="159" src="/wp-content/uploads/2018/05/word-image-2655.png" class="wp-image-3027" srcset="/wp-content/uploads/2018/05/word-image-2655.png 508w, /wp-content/uploads/2018/05/word-image-2655-300x94.png 300w" sizes="(max-width: 508px) 100vw, 508px" />
</p>
<p>
  2、match()
</p>
<p>
  在字符串中检索匹配正则表达式的子串；如果匹配，返回包含匹配结果的一个数组；不匹配返回null。
</p>
<p><strong>不加全局g的情况</strong>：
</p>
<p>
  	获取的结果只是第一个匹配的内容，匹配的内容中的第一个单元是匹配的结果，后面的单元是子表达式
</p>
<p>
  <img loading="lazy" decoding="async" width="655" height="75" src="/wp-content/uploads/2018/05/word-image-2656.png" class="wp-image-3028" srcset="/wp-content/uploads/2018/05/word-image-2656.png 655w, /wp-content/uploads/2018/05/word-image-2656-300x34.png 300w" sizes="(max-width: 655px) 100vw, 655px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="978" height="111" src="/wp-content/uploads/2018/05/word-image-2657.png" class="wp-image-3029" srcset="/wp-content/uploads/2018/05/word-image-2657.png 978w, /wp-content/uploads/2018/05/word-image-2657-300x34.png 300w, /wp-content/uploads/2018/05/word-image-2657-768x87.png 768w" sizes="(max-width: 978px) 100vw, 978px" />
</p>
<p><strong>加全局的g的情况</strong>：
</p>
<p>
  	获取的结果是所有匹配的内容，但是不包含子表达式。
</p>
<p>
  <img loading="lazy" decoding="async" width="910" height="140" src="/wp-content/uploads/2018/05/word-image-2658.png" class="wp-image-3030" srcset="/wp-content/uploads/2018/05/word-image-2658.png 910w, /wp-content/uploads/2018/05/word-image-2658-300x46.png 300w, /wp-content/uploads/2018/05/word-image-2658-768x118.png 768w" sizes="(max-width: 910px) 100vw, 910px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="997" height="173" src="/wp-content/uploads/2018/05/word-image-2659.png" class="wp-image-3031" srcset="/wp-content/uploads/2018/05/word-image-2659.png 997w, /wp-content/uploads/2018/05/word-image-2659-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2659-768x133.png 768w" sizes="(max-width: 997px) 100vw, 997px" />
</p>
<p><strong>多次调用和调用一次效果一样</strong>。
</p>
<p>
  3、split()
</p>
<p>
  将字符串分割成数组：
</p>
<p>
  <img loading="lazy" decoding="async" width="805" height="118" src="/wp-content/uploads/2018/05/word-image-2660.png" class="wp-image-3032" srcset="/wp-content/uploads/2018/05/word-image-2660.png 805w, /wp-content/uploads/2018/05/word-image-2660-300x44.png 300w, /wp-content/uploads/2018/05/word-image-2660-768x113.png 768w" sizes="(max-width: 805px) 100vw, 805px" />
</p>
<p>
  4、replace()替换
</p>
<p>
  默认只替换一次，加g全部替换
</p>
<p>
  <img loading="lazy" decoding="async" width="717" height="130" src="/wp-content/uploads/2018/05/word-image-2661.png" class="wp-image-3033" srcset="/wp-content/uploads/2018/05/word-image-2661.png 717w, /wp-content/uploads/2018/05/word-image-2661-300x54.png 300w" sizes="(max-width: 717px) 100vw, 717px" />
</p>
<p>
  替换的时候，使用&#8221;$1&#8243;表示第一个字表达式：
</p>
<p>
  <img loading="lazy" decoding="async" width="998" height="140" src="/wp-content/uploads/2018/05/word-image-2662.png" class="wp-image-3034" srcset="/wp-content/uploads/2018/05/word-image-2662.png 998w, /wp-content/uploads/2018/05/word-image-2662-300x42.png 300w, /wp-content/uploads/2018/05/word-image-2662-768x108.png 768w" sizes="(max-width: 998px) 100vw, 998px" />
</p>
<p>
  替换abc为a[a-b-c]c   hds  h[h-d-s]s
</p>
<p>
  <img loading="lazy" decoding="async" width="986" height="223" src="/wp-content/uploads/2018/05/word-image-2663.png" class="wp-image-3035" srcset="/wp-content/uploads/2018/05/word-image-2663.png 986w, /wp-content/uploads/2018/05/word-image-2663-300x68.png 300w, /wp-content/uploads/2018/05/word-image-2663-768x174.png 768w" sizes="(max-width: 986px) 100vw, 986px" />
</p>
<p>
  替换aaa bbb ccc为Aaa Bbb Ccc
</p>
<p>
  <img loading="lazy" decoding="async" width="1250" height="201" src="/wp-content/uploads/2018/05/word-image-2664.png" class="wp-image-3036" srcset="/wp-content/uploads/2018/05/word-image-2664.png 1250w, /wp-content/uploads/2018/05/word-image-2664-300x48.png 300w, /wp-content/uploads/2018/05/word-image-2664-768x123.png 768w, /wp-content/uploads/2018/05/word-image-2664-1024x165.png 1024w" sizes="(max-width: 1250px) 100vw, 1250px" />
</p>
<h1>九、案例</h1>
<p>
  1、匹配手机号格式是否正确
</p>
<p>
  要求：
</p>
<p>
  基本的要求：11位，1打头，纯数字
</p>
<p>
  特别精细的话，必须联系各大运营商，查看23位都是什么，比如有136的，但是可以没有163的。
</p>
<p>
  <img loading="lazy" decoding="async" width="605" height="285" src="/wp-content/uploads/2018/05/word-image-2665.png" class="wp-image-3037" srcset="/wp-content/uploads/2018/05/word-image-2665.png 605w, /wp-content/uploads/2018/05/word-image-2665-300x141.png 300w" sizes="(max-width: 605px) 100vw, 605px" />
</p>
<p>
  2、匹配邮箱格式是否正确
</p>
<p>
  邮箱：
</p>
<p>
  @前面有4~16个字符（都可以有数字，字母，下划线，点 ，中横线）
</p>
<p>
  @后面点前面：允许数字字母组合，长度2~10位
</p>
<p>
  点后面：只允许出现字母，长度为2~5；
</p>
<p>
  还有一种情况是后面是两个点，如xxxx@xx.com.cn
</p>
<p>
  <img loading="lazy" decoding="async" width="793" height="192" src="/wp-content/uploads/2018/05/word-image-2666.png" class="wp-image-3038" srcset="/wp-content/uploads/2018/05/word-image-2666.png 793w, /wp-content/uploads/2018/05/word-image-2666-300x73.png 300w, /wp-content/uploads/2018/05/word-image-2666-768x186.png 768w" sizes="(max-width: 793px) 100vw, 793px" />
</p>
<p>
  3、解决结巴程序
</p>
<p>
  把叠字的字符串，换成单子，比如，“今今今今天天天天天天天天中午吃吃吃了泡面”换成“今天中午吃了泡面”
</p>
<p>
  <img loading="lazy" decoding="async" width="974" height="155" src="/wp-content/uploads/2018/05/word-image-2667.png" class="wp-image-3039" srcset="/wp-content/uploads/2018/05/word-image-2667.png 974w, /wp-content/uploads/2018/05/word-image-2667-300x48.png 300w, /wp-content/uploads/2018/05/word-image-2667-768x122.png 768w" sizes="(max-width: 974px) 100vw, 974px" />
</p>
<p>
  4、用户名验证
</p>
<p>
  注册的时候，要求用户名：长度4~10位，不能是纯数字，不能是纯字母，不能有特殊符号，不能以数字打头。
</p>
<p>
  <img loading="lazy" decoding="async" width="1008" height="260" src="/wp-content/uploads/2018/05/word-image-2668.png" class="wp-image-3040" srcset="/wp-content/uploads/2018/05/word-image-2668.png 1008w, /wp-content/uploads/2018/05/word-image-2668-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2668-768x198.png 768w" sizes="(max-width: 1008px) 100vw, 1008px" />
</p>
<h1>十、PHP中的正则表达式</h1>
<p>
  语法和JavaScript中的正则语法基本一致。
</p>
<p>
  PHP中的正则函数：
</p>
<p>
  <img loading="lazy" decoding="async" width="728" height="406" src="/wp-content/uploads/2018/05/word-image-2669.png" class="wp-image-3041" srcset="/wp-content/uploads/2018/05/word-image-2669.png 728w, /wp-content/uploads/2018/05/word-image-2669-300x167.png 300w" sizes="(max-width: 728px) 100vw, 728px" />
</p>
<p>
  1、preg_match()
</p>
<p>
  基础语法练习：
</p>
<p>
  基础语法和js中正则语法基本相同。
</p>
<p>
  <img loading="lazy" decoding="async" width="839" height="242" src="/wp-content/uploads/2018/05/word-image-2670.png" class="wp-image-3042" srcset="/wp-content/uploads/2018/05/word-image-2670.png 839w, /wp-content/uploads/2018/05/word-image-2670-300x87.png 300w, /wp-content/uploads/2018/05/word-image-2670-768x222.png 768w" sizes="(max-width: 839px) 100vw, 839px" />
</p>
<p>
  具体查看preg_match的用法：
</p>
<p>
  <img loading="lazy" decoding="async" width="906" height="289" src="/wp-content/uploads/2018/05/word-image-2671.png" class="wp-image-3043" srcset="/wp-content/uploads/2018/05/word-image-2671.png 906w, /wp-content/uploads/2018/05/word-image-2671-300x96.png 300w, /wp-content/uploads/2018/05/word-image-2671-768x245.png 768w" sizes="(max-width: 906px) 100vw, 906px" />
</p>
<p>
  带有子表达式的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="1037" height="197" src="/wp-content/uploads/2018/05/word-image-2672.png" class="wp-image-3044" srcset="/wp-content/uploads/2018/05/word-image-2672.png 1037w, /wp-content/uploads/2018/05/word-image-2672-300x57.png 300w, /wp-content/uploads/2018/05/word-image-2672-768x146.png 768w, /wp-content/uploads/2018/05/word-image-2672-1024x195.png 1024w" sizes="(max-width: 1037px) 100vw, 1037px" />
</p>
<p>
  2、preg_match_all();
</p>
<p>
  执行正则表达式的全局匹配
</p>
<p>
  <img loading="lazy" decoding="async" width="826" height="95" src="/wp-content/uploads/2018/05/word-image-2673.png" class="wp-image-3045" srcset="/wp-content/uploads/2018/05/word-image-2673.png 826w, /wp-content/uploads/2018/05/word-image-2673-300x35.png 300w, /wp-content/uploads/2018/05/word-image-2673-768x88.png 768w" sizes="(max-width: 826px) 100vw, 826px" />
</p>
<p>
  查看匹配情况（不带子表达式）：
</p>
<p>
  <img loading="lazy" decoding="async" width="1007" height="262" src="/wp-content/uploads/2018/05/word-image-2674.png" class="wp-image-3046" srcset="/wp-content/uploads/2018/05/word-image-2674.png 1007w, /wp-content/uploads/2018/05/word-image-2674-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2674-768x200.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" />
</p>
<p>
  查看匹配情况（带子表达式）：
</p>
<p>
  <img loading="lazy" decoding="async" width="963" height="464" src="/wp-content/uploads/2018/05/word-image-2675.png" class="wp-image-3047" srcset="/wp-content/uploads/2018/05/word-image-2675.png 963w, /wp-content/uploads/2018/05/word-image-2675-300x145.png 300w, /wp-content/uploads/2018/05/word-image-2675-768x370.png 768w" sizes="(max-width: 963px) 100vw, 963px" />
</p>
<p>
  3、preg_replace();
</p>
<p>
  <img loading="lazy" decoding="async" width="890" height="155" src="/wp-content/uploads/2018/05/word-image-2676.png" class="wp-image-3048" srcset="/wp-content/uploads/2018/05/word-image-2676.png 890w, /wp-content/uploads/2018/05/word-image-2676-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2676-768x134.png 768w" sizes="(max-width: 890px) 100vw, 890px" />
</p>
<p>
  案例：解决贪婪问题？
</p>
<p>
  <img loading="lazy" decoding="async" width="880" height="422" src="/wp-content/uploads/2018/05/word-image-2677.png" class="wp-image-3049" srcset="/wp-content/uploads/2018/05/word-image-2677.png 880w, /wp-content/uploads/2018/05/word-image-2677-300x144.png 300w, /wp-content/uploads/2018/05/word-image-2677-768x368.png 768w" sizes="(max-width: 880px) 100vw, 880px" />
</p>
<p>
  4、php中匹配中文
</p>
<p>
  <img loading="lazy" decoding="async" width="1007" height="320" src="/wp-content/uploads/2018/05/word-image-2678.png" class="wp-image-3050" srcset="/wp-content/uploads/2018/05/word-image-2678.png 1007w, /wp-content/uploads/2018/05/word-image-2678-300x95.png 300w, /wp-content/uploads/2018/05/word-image-2678-768x244.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3000.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS初级（一）变量、 声明、 引用、 数据类型、 输出、 运算符</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/303.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/303.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Thu, 17 May 2018 14:16:05 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[变量]]></category>
		<category><![CDATA[声明]]></category>
		<category><![CDATA[引用]]></category>
		<category><![CDATA[数据类型]]></category>
		<category><![CDATA[输出]]></category>
		<category><![CDATA[运算符]]></category>
		<guid isPermaLink="false">/?p=303</guid>

					<description><![CDATA[JavaScript（一） 作业 第一题 &#60;style type=&#8221;text/css&#82 [&#8230;]]]></description>
										<content:encoded><![CDATA[</p>
<h1>JavaScript（一）</h1>
<h2>作业</h2>
<h3>第一题</h3>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  body{
</p>
<p>
  	background-color:#0CF;
</p>
<p>
  }
</p>
<p>
  input[type=&#8217;text&#8217;]{
</p>
<p>
  	border-top:none;
</p>
<p>
  	border-left:none;
</p>
<p>
  	border-right:none;
</p>
<p>
  	border-bottom:#06C solid 1px;
</p>
<p>
  	background-color:transparent;  /*背景色透明*/
</p>
<p>
  }
</p>
<p>
  input[type=&#8217;button&#8217;]{
</p>
<p>
  	border:none;
</p>
<p>
  	background-color:transparent;	/*背景色透明*/
</p>
<p>
  	cursor:pointer;	/*当鼠标移上去的时候变成手形*/
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;div&gt;请输入信息：&lt;input type=&#8221;text&#8221; name=&#8221;username&#8221; /&gt;&lt;input type=&#8221;button&#8221; value=&#8221;确定&gt;&gt;&gt;&#8221; /&gt;&lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="332" height="42" src="/wp-content/uploads/2018/05/word-image-273.png" class="wp-image-305" srcset="/wp-content/uploads/2018/05/word-image-273.png 332w, /wp-content/uploads/2018/05/word-image-273-300x38.png 300w" sizes="(max-width: 332px) 100vw, 332px" /></p>
<h3>第四题</h3>
<p>
  分析页面结构如下：
</p>
<p><img loading="lazy" decoding="async" width="330" height="141" src="/wp-content/uploads/2018/05/word-image-274.png" class="wp-image-306" srcset="/wp-content/uploads/2018/05/word-image-274.png 330w, /wp-content/uploads/2018/05/word-image-274-300x128.png 300w" sizes="(max-width: 330px) 100vw, 330px" /></p>
<p>
  页面总宽度：8+206+500+8=722
</p>
<p>
  页面总高度：110+519=629
</p>
<p>
  难点：
</p>
<p><img loading="lazy" decoding="async" width="776" height="166" src="/wp-content/uploads/2018/05/word-image-275.png" class="wp-image-307" srcset="/wp-content/uploads/2018/05/word-image-275.png 776w, /wp-content/uploads/2018/05/word-image-275-300x64.png 300w, /wp-content/uploads/2018/05/word-image-275-768x164.png 768w" sizes="(max-width: 776px) 100vw, 776px" /></p>
<p>
  实现代码
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  #content{
</p>
<p>
  	width:722px;
</p>
<p>
  	height:629px;		/*为了#left,#right高度100%，指定父元素高度*/
</p>
<p>
  	overflow:hidden;	/*重新测定子元素的高度*/
</p>
<p>
  	margin:auto;		/*页面居中*/
</p>
<p>
  }
</p>
<p>
  #content #left,#content #right{
</p>
<p>
  	width:8px;
</p>
<p>
  	height:100%;	/*背景无法撑开盒子，所以要设定高度*/
</p>
<p>
  	background:url(images/line1.gif) repeat-y;
</p>
<p>
  	float:left;
</p>
<p>
  }
</p>
<p>
  #content #right{
</p>
<p>
  	background:url(images/line2.gif) repeat-y;
</p>
<p>
  }
</p>
<p>
  #content #center{
</p>
<p>
  	width:706px;
</p>
<p>
  	float:left;
</p>
<p>
  }
</p>
<p>
  #content #center&gt;div{
</p>
<p>
  	float:left;
</p>
<p>
  }
</p>
<p>
  #content #center #part1{
</p>
<p>
  	width:206px;
</p>
<p>
  	background-color:#ECDFBC;
</p>
<p>
  	/*text-align:center;*/	/*图片居中方法一*/
</p>
<p>
  }
</p>
<p>
  #part1 img{
</p>
<p>
  	margin:auto;		/*图片居中方法二*/
</p>
<p>
  	display:block;		/*设置块显示才能使用margin:auto来居中*/
</p>
<p>
  }
</p>
<p>
  #content #center #part4{
</p>
<p>
  	width:500px;
</p>
<p>
  	height:519px;
</p>
<p>
  	background:url(images/b-04.jpg);
</p>
<p>
  	padding-top:30px;
</p>
<p>
  }
</p>
<p>
  #part4 #wenzi{
</p>
<p>
  	width:90%;
</p>
<p>
  	font-size:14px;
</p>
<p>
  	font-family:&#8217;微软雅黑&#8217;;
</p>
<p>
  	margin:auto;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;div id=&#8221;content&#8221;&gt;
</p>
<p>
  	&lt;div id=&#8221;left&#8221;&gt;&lt;/div&gt;
</p>
<p>
      &lt;div id=&#8221;center&#8221;&gt;
</p>
<p>
      	&lt;div id=&#8221;part1&#8243;&gt;&lt;img src=&#8221;images/xihuzi2.gif&#8221; /&gt;&lt;/div&gt;
</p>
<p>
          &lt;div id=&#8221;part2&#8243;&gt;&lt;img src=&#8221;images/5.jpg&#8221; /&gt;&lt;/div&gt;
</p>
<p>
          &lt;div id=&#8221;part3&#8243;&gt;&lt;img src=&#8221;images/6.jpg&#8221; /&gt;&lt;/div&gt;
</p>
<p>
          &lt;div id=&#8221;part4&#8243;&gt;
</p>
<p>
          	&lt;div id=&#8221;wenzi&#8221;&gt;
</p>
<p>
          	  &lt;header style=&#8221;text-align:center&#8221;&gt;西湖春天简介 &lt;/header&gt;
</p>
<p>
          	  &lt;p&gt; 　　西湖春天是一家经旅游局批准，工商局登记注册，具有独立法人资格，并足额缴纳旅行社质量保证金的股份制企业。&lt;br /&gt;
</p>
<p>
          	    公司下设组团部、地接部、导游部、财务部、石浦门市部、丹城门市部等机构，承接旅游、休闲、度假、疗养、会务、商务考察等业务，公司管理高度重视人力资源的合理利用和开发，现已拥有一批长期从事旅游工作、精通各项旅游业务、重信誉、讲实效、高素质的管理人员和一支训练有素、经验丰富的导游队伍，并且已做到人人持证上岗。&lt;br /&gt;
</p>
<p>
          	    公司凭借象山旅游发展大好趋势，结合自身的规模优势，全力打造出&amp;ldquo;西湖春天&amp;rdquo;的旗帜品牌形象。目前，公司开发的公司网站，可以让您广泛的了解旅游信息。&lt;br /&gt;
</p>
<p>
          	    公司自成立以来，坚持以&amp;ldquo;质量就是生命&amp;rdquo;的座右铭，虚心接受客户的监督，不断完善管理机制，全体员工积极进取，开拓创新、奋发图强；公司连续获得2003年度《安全生产先进集体》、《浙江省旅游消费推荐单位》、《&amp;ldquo;安康杯&amp;rdquo;竞赛优胜企业》、2004年度《石浦首届旅游消费诚信单位》等荣誉称号。&lt;br /&gt;
</p>
<p>
          	    公司与国内众多旅行社建立了良好的义务关系，在主要城市已形成了客房、餐饮、交通等完善的旅游服务网络，&amp;ldquo;西湖春天&amp;rdquo;全体工作人员将以最合理的旅游线路，最实惠的价格，最细致的服务，热诚期待您的到来。&lt;/p&gt;
</p>
<p>
          	&lt;/div&gt;
</p>
<p>
        &lt;/div&gt;
</p>
<p>
      &lt;/div&gt;
</p>
<p>
      &lt;div id=&#8221;right&#8221;&gt;&lt;/div&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="738" height="249" src="/wp-content/uploads/2018/05/word-image-276.png" class="wp-image-308" srcset="/wp-content/uploads/2018/05/word-image-276.png 738w, /wp-content/uploads/2018/05/word-image-276-300x101.png 300w" sizes="(max-width: 738px) 100vw, 738px" /></p>
<h2>圆角矩形</h2>
<p>
  区分上下左右四个点
</p>
<p><img loading="lazy" decoding="async" width="537" height="212" src="/wp-content/uploads/2018/05/word-image-277.png" class="wp-image-309" srcset="/wp-content/uploads/2018/05/word-image-277.png 537w, /wp-content/uploads/2018/05/word-image-277-300x118.png 300w" sizes="(max-width: 537px) 100vw, 537px" /></p>
<p>
  例题
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  div{
</p>
<p>
  	width:100px;
</p>
<p>
  	height:100px;
</p>
<p>
  	border:#000 solid 1px;
</p>
<p>
  	margin:5px auto;
</p>
<p>
  }
</p>
<p>
  div:nth-of-type(1){
</p>
<p>
  	border-radius:10px;		/*四个点的圆角半径都是10px*/
</p>
<p>
  }
</p>
<p>
  div:nth-of-type(2){
</p>
<p>
  	border-radius:10px 20px;	/*上下10px  左右20px*/
</p>
<p>
  }
</p>
<p>
  div:nth-of-type(3){
</p>
<p>
  	border-radius:10px 20px 30px;	/*上10px 左右20px 下30px*/
</p>
<p>
  }
</p>
<p>
  div:nth-of-type(4){
</p>
<p>
  	border-radius:10px 20px 30px 40px;	/*上右下左*/
</p>
<p>
  }
</p>
<p>
  div:nth-of-type(5){
</p>
<p>
  	border-radius:50%;		/*正圆*/
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="153" height="542" src="/wp-content/uploads/2018/05/word-image-278.png" class="wp-image-310" srcset="/wp-content/uploads/2018/05/word-image-278.png 153w, /wp-content/uploads/2018/05/word-image-278-85x300.png 85w" sizes="(max-width: 153px) 100vw, 153px" /></p>
<p>
  圆角矩形的应用
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  body{
</p>
<p>
  	background:#999;
</p>
<p>
  }
</p>
<p>
  div{
</p>
<p>
  	width:200px;
</p>
<p>
  	height:200px;
</p>
<p>
  	padding:10px;
</p>
<p>
  	border:#000 solid 1px;
</p>
<p>
  	border-radius:10px;
</p>
<p>
  	background-color:#CCC;
</p>
<p>
  }
</p>
<p>
  #face{
</p>
<p>
  	border-radius:50%;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;div&gt;&lt;img src=&#8221;images4/face.jpg&#8221; /&gt;&lt;/div&gt;
</p>
<p>
  &lt;img src=&#8221;images4/face.jpg&#8221; id=&#8221;face&#8221; /&gt;
</p>
<p><img loading="lazy" decoding="async" width="534" height="435" src="/wp-content/uploads/2018/05/word-image-279.png" class="wp-image-311" srcset="/wp-content/uploads/2018/05/word-image-279.png 534w, /wp-content/uploads/2018/05/word-image-279-300x244.png 300w" sizes="(max-width: 534px) 100vw, 534px" /></p>
<h2>2D转换</h2>
<p>
  在二维平面上桌变化，关键字：transform
</p>
<h3>2D转换之移动（translate）</h3>
<p>
  例题：让div居于屏幕的中间
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  div{
</p>
<p>
  	width:200px;
</p>
<p>
  	height:200px;
</p>
<p>
  	background-color:#900;
</p>
<p>
  	position:absolute;
</p>
<p>
  	left:50%;
</p>
<p>
  	top:50%;
</p>
<p>
  	/*transform:translateX(-50%) translateY(-50%);*/
</p>
<p>
  	transform:translate(-50%,-50%)
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<h3>2D转换之旋转</h3>
<p><img loading="lazy" decoding="async" width="915" height="268" src="/wp-content/uploads/2018/05/word-image-280.png" class="wp-image-312" srcset="/wp-content/uploads/2018/05/word-image-280.png 915w, /wp-content/uploads/2018/05/word-image-280-300x88.png 300w, /wp-content/uploads/2018/05/word-image-280-768x225.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></p>
<h3>2D转换之缩放（scale）</h3>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  img{
</p>
<p>
  	transform:scaleX(1.5);	/*x轴是原来的1.5倍*/
</p>
<p>
  	transform:scaleY(0.5);	/*y轴是原来的0.5倍*/
</p>
<p>
  	transform:scale(0.5,0.5);	/*同时设定x轴和y轴的缩放*/
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;img src=&#8221;images4/face.jpg&#8221; width=&#8221;200&#8243; height=&#8221;200&#8243; /&gt;
</p>
<h3>例题：三角做法</h3>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  div{
</p>
<p>
  	width:300px;
</p>
<p>
  	height:30px;
</p>
<p>
  	border:#999 solid 1px;
</p>
<p>
  	margin:100px  auto;
</p>
<p>
  	position:relative;
</p>
<p>
  }
</p>
<p>
  div:after{
</p>
<p>
  	content:&#8221;;
</p>
<p>
  	width:12px;
</p>
<p>
  	height:12px;
</p>
<p>
  	display:inline-block;
</p>
<p>
  	position:absolute;
</p>
<p>
  	right:12px;
</p>
<p>
  	border-right:#999 solid 1px;
</p>
<p>
  	border-bottom:#999 solid 1px;
</p>
<p>
  	transform:rotate(45deg) translateY(10px);;
</p>
<p>
  }
</p>
<p>
  div:hover{
</p>
<p>
  	border:#00F solid 1px;
</p>
<p>
  }
</p>
<p>
  div:hover:after{  /*必须先写:hover，后写:after*/
</p>
<p>
  	border-right:#00F solid 1px;
</p>
<p>
  	border-bottom:#00F solid 1px;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="390" height="54" src="/wp-content/uploads/2018/05/word-image-281.png" class="wp-image-313" srcset="/wp-content/uploads/2018/05/word-image-281.png 390w, /wp-content/uploads/2018/05/word-image-281-300x42.png 300w" sizes="(max-width: 390px) 100vw, 390px" /></p>
<h2>过渡（transition）</h2>
<p><img loading="lazy" decoding="async" width="768" height="242" src="/wp-content/uploads/2018/05/word-image-282.png" class="wp-image-314" srcset="/wp-content/uploads/2018/05/word-image-282.png 768w, /wp-content/uploads/2018/05/word-image-282-300x95.png 300w" sizes="(max-width: 768px) 100vw, 768px" /></p>
<p>
  动画类型有：
</p>
<p><img loading="lazy" decoding="async" width="500" height="171" src="/wp-content/uploads/2018/05/word-image-283.png" class="wp-image-315" srcset="/wp-content/uploads/2018/05/word-image-283.png 500w, /wp-content/uploads/2018/05/word-image-283-300x103.png 300w" sizes="(max-width: 500px) 100vw, 500px" /></p>
<p>
  例题（对象移动）：
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  div{
</p>
<p>
  	width:200px;
</p>
<p>
  	height:200px;
</p>
<p>
  	background-color:#F00;
</p>
<p>
  	transition:all 1s ease;
</p>
<p>
  }
</p>
<p>
  div:hover{
</p>
<p>
  	transform:translateX(500px);
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p>
  例题：（头像旋转）
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  img{
</p>
<p>
  	border-radius:50%;
</p>
<p>
  	transition:all 0.5s ease;
</p>
<p>
  }
</p>
<p>
  img:hover{
</p>
<p>
  	transform:rotate(360deg);
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;img src=&#8221;images4/face.jpg&#8221; /&gt;
</p>
<p><img loading="lazy" decoding="async" width="447" height="223" src="/wp-content/uploads/2018/05/word-image-284.png" class="wp-image-316" srcset="/wp-content/uploads/2018/05/word-image-284.png 447w, /wp-content/uploads/2018/05/word-image-284-300x150.png 300w" sizes="(max-width: 447px) 100vw, 447px" /></p>
<p>
  例题：（头像变大）
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  ul{
</p>
<p>
  	list-style-type:none;
</p>
<p>
  	margin:10px auto;
</p>
<p>
  	padding:0px;
</p>
<p>
  	overflow:hidden;
</p>
<p>
  }
</p>
<p>
  li{
</p>
<p>
  	width:200px;
</p>
<p>
  	height:200px;
</p>
<p>
  	border:#000 solid 1px;
</p>
<p>
  	margin:5px;
</p>
<p>
  	float:left;
</p>
<p>
  	overflow:hidden;
</p>
<p>
  }
</p>
<p>
  img{
</p>
<p>
  	transition:all 0.5s ease;
</p>
<p>
  }
</p>
<p>
  img:hover{
</p>
<p>
  	transform:scale(1.1);
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
  	&lt;li&gt;&lt;img src=&#8221;images4/face.jpg&#8221; width=&#8221;200&#8243; height=&#8221;200&#8243; /&gt;&lt;/li&gt;
</p>
<p>
      &lt;li&gt;&lt;img src=&#8221;images4/face.jpg&#8221; width=&#8221;200&#8243; height=&#8221;200&#8243; /&gt;&lt;/li&gt;
</p>
<p>
      &lt;li&gt;&lt;img src=&#8221;images4/face.jpg&#8221; width=&#8221;200&#8243; height=&#8221;200&#8243; /&gt;&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p><img loading="lazy" decoding="async" width="657" height="213" src="/wp-content/uploads/2018/05/word-image-285.png" class="wp-image-318" srcset="/wp-content/uploads/2018/05/word-image-285.png 657w, /wp-content/uploads/2018/05/word-image-285-300x97.png 300w" sizes="(max-width: 657px) 100vw, 657px" /></p>
<h2>Sublime介绍</h2>
<ol>
<li>
  生成HTML框架结构
</li>
</ol>
<p><img loading="lazy" decoding="async" width="668" height="52" src="/wp-content/uploads/2018/05/word-image-286.png" class="wp-image-319" srcset="/wp-content/uploads/2018/05/word-image-286.png 668w, /wp-content/uploads/2018/05/word-image-286-300x23.png 300w" sizes="(max-width: 668px) 100vw, 668px" /><br />
<img loading="lazy" decoding="async" width="543" height="56" src="/wp-content/uploads/2018/05/word-image-287.png" class="wp-image-320" srcset="/wp-content/uploads/2018/05/word-image-287.png 543w, /wp-content/uploads/2018/05/word-image-287-300x31.png 300w" sizes="(max-width: 543px) 100vw, 543px" /><br />
<img loading="lazy" decoding="async" width="519" height="59" src="/wp-content/uploads/2018/05/word-image-288.png" class="wp-image-321" srcset="/wp-content/uploads/2018/05/word-image-288.png 519w, /wp-content/uploads/2018/05/word-image-288-300x34.png 300w" sizes="(max-width: 519px) 100vw, 519px" /><br />
<img loading="lazy" decoding="async" width="398" height="54" src="/wp-content/uploads/2018/05/word-image-289.png" class="wp-image-322" srcset="/wp-content/uploads/2018/05/word-image-289.png 398w, /wp-content/uploads/2018/05/word-image-289-300x41.png 300w" sizes="(max-width: 398px) 100vw, 398px" /></p>
<p>
  按tab键或ctrl+E生成
</p>
<p>
  注意要将页面保存再按快捷键生成
</p>
<p>
  常用的其他技巧
</p>
<p><img loading="lazy" decoding="async" width="439" height="28" src="/wp-content/uploads/2018/05/word-image-290.png" class="wp-image-323" srcset="/wp-content/uploads/2018/05/word-image-290.png 439w, /wp-content/uploads/2018/05/word-image-290-300x19.png 300w" sizes="(max-width: 439px) 100vw, 439px" /><br />
<img loading="lazy" decoding="async" width="745" height="30" src="/wp-content/uploads/2018/05/word-image-291.png" class="wp-image-324" srcset="/wp-content/uploads/2018/05/word-image-291.png 745w, /wp-content/uploads/2018/05/word-image-291-300x12.png 300w" sizes="(max-width: 745px) 100vw, 745px" /><br />
<img loading="lazy" decoding="async" width="751" height="118" src="/wp-content/uploads/2018/05/word-image-292.png" class="wp-image-325" srcset="/wp-content/uploads/2018/05/word-image-292.png 751w, /wp-content/uploads/2018/05/word-image-292-300x47.png 300w" sizes="(max-width: 751px) 100vw, 751px" /></p>
<h2>什么是JavaScript</h2>
<ol>
<li>
  JavaScript是一种解释型的，基于对象的脚本语言。
</li>
<li>
  Javascript（JS）可以运行在客户端，也可以运行在服务器端。默认是运行在客户端。
</li>
</ol>
<p><img loading="lazy" decoding="async" width="882" height="44" src="/wp-content/uploads/2018/05/word-image-293.png" class="wp-image-326" srcset="/wp-content/uploads/2018/05/word-image-293.png 882w, /wp-content/uploads/2018/05/word-image-293-300x15.png 300w, /wp-content/uploads/2018/05/word-image-293-768x38.png 768w" sizes="(max-width: 882px) 100vw, 882px" /></p>
<p>
  script：脚本
</p>
<h3>页面的执行过程</h3>
<p><img loading="lazy" decoding="async" width="742" height="85" src="/wp-content/uploads/2018/05/word-image-294.png" class="wp-image-327" srcset="/wp-content/uploads/2018/05/word-image-294.png 742w, /wp-content/uploads/2018/05/word-image-294-300x34.png 300w" sizes="(max-width: 742px) 100vw, 742px" /></p>
<h3>解释型与编译型</h3>
<p><img loading="lazy" decoding="async" width="786" height="138" src="/wp-content/uploads/2018/05/word-image-295.png" class="wp-image-328" srcset="/wp-content/uploads/2018/05/word-image-295.png 786w, /wp-content/uploads/2018/05/word-image-295-300x53.png 300w, /wp-content/uploads/2018/05/word-image-295-768x135.png 768w" sizes="(max-width: 786px) 100vw, 786px" /></p>
<p>
  要看一门语言是否是解释型还是编译型，主要看是否会生成中间文件。
</p>
<p>
  运行在客户端的语言都是解释型
</p>
<p>
  运行在服务器端的语言都是编译型。
</p>
<h3>脚本语言</h3>
<p>
  脚本语言也是语言一种，脚本语言的特点要结合其他语言一起实现功能。
</p>
<h2>JavaScript的应用场景</h2>
<ol>
<li>
  客户端特效
</li>
<li>
  验证表单
</li>
</ol>
<h2>变量</h2>
<p>
  变量就是一个会变的量
</p>
<p>
  x+1=2		x=1
</p>
<p>
  x+10=20	x=10
</p>
<p><img loading="lazy" decoding="async" width="452" height="83" src="/wp-content/uploads/2018/05/word-image-296.png" class="wp-image-329" srcset="/wp-content/uploads/2018/05/word-image-296.png 452w, /wp-content/uploads/2018/05/word-image-296-300x55.png 300w" sizes="(max-width: 452px) 100vw, 452px" /></p>
<p>
  变量就是内存中的一段空间
</p>
<h2>变量的命名规则</h2>
<ol>
<li>
  变量以字母、下划线，$开头，后面跟的在字母、数字、下划线，$
</li>
<li>
  关键字不能做变量名
</li>
<li>
  变量名区分大小写（aa和Aa是两个空间）
</li>
</ol>
<p>
  下列变量名是否合法
</p>
<ol>
<li>
  aa		合法
</li>
<li>
  a1		合法
</li>
<li>
  1a		不合法（不能以数字开头）
</li>
<li>
  _1a		合法
</li>
<li>
  a-1		不合法
</li>
<li>
  a%		不合法
</li>
<li>
  x		合法
</li>
<li>
  do		不合法（关键字不可以做变量名 if for else case …）
</li>
</ol>
<h2>声明变量</h2>
<p>
  通过var关键字来声明变量。
</p>
<p>
  声明变量有两种方法
</p>
<ol>
<li>
  显式声明：通过var关键字声明后使用
</li>
<li>
  隐式声明：不声明，直接使用
</li>
</ol>
<p><img loading="lazy" decoding="async" width="962" height="138" src="/wp-content/uploads/2018/05/word-image-297.png" class="wp-image-330" srcset="/wp-content/uploads/2018/05/word-image-297.png 962w, /wp-content/uploads/2018/05/word-image-297-300x43.png 300w, /wp-content/uploads/2018/05/word-image-297-768x110.png 768w" sizes="(max-width: 962px) 100vw, 962px" /></p>
<h2>输出的方法</h2>
<p>
  1、document.write(‘锄禾日当午’);	//输出在浏览器上
</p>
<p><img loading="lazy" decoding="async" width="533" height="43" src="/wp-content/uploads/2018/05/word-image-298.png" class="wp-image-331" srcset="/wp-content/uploads/2018/05/word-image-298.png 533w, /wp-content/uploads/2018/05/word-image-298-300x24.png 300w" sizes="(max-width: 533px) 100vw, 533px" /></p>
<p>
  2、alert(‘锄禾日当午’);		//弹出一个对话框（就是window.alert()）
</p>
<p><img loading="lazy" decoding="async" width="181" height="188" src="/wp-content/uploads/2018/05/word-image-299.png" class="wp-image-332" /></p>
<p>
  3、prompt()：弹出一个用于输入的对话框
</p>
<p><img loading="lazy" decoding="async" width="930" height="153" src="/wp-content/uploads/2018/05/word-image-300.png" class="wp-image-333" srcset="/wp-content/uploads/2018/05/word-image-300.png 930w, /wp-content/uploads/2018/05/word-image-300-300x49.png 300w, /wp-content/uploads/2018/05/word-image-300-768x126.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<p>
  4、弹出一个对话框，有“确定”和“取消”按钮
</p>
<p><img loading="lazy" decoding="async" width="583" height="174" src="/wp-content/uploads/2018/05/word-image-301.png" class="wp-image-334" srcset="/wp-content/uploads/2018/05/word-image-301.png 583w, /wp-content/uploads/2018/05/word-image-301-300x90.png 300w" sizes="(max-width: 583px) 100vw, 583px" /></p>
<p>
  5、console.log(‘锄禾日当午’)：在控制台输出，用于代码调试
</p>
<p><img loading="lazy" decoding="async" width="556" height="103" src="/wp-content/uploads/2018/05/word-image-302.png" class="wp-image-335" srcset="/wp-content/uploads/2018/05/word-image-302.png 556w, /wp-content/uploads/2018/05/word-image-302-300x56.png 300w" sizes="(max-width: 556px) 100vw, 556px" /></p>
<p>
  几个需要记忆的单词
</p>
<ol>
<li>
  window：窗口
</li>
<li>
  document：文档
</li>
<li>
  console：控制台
</li>
<li>
  log：日志
</li>
</ol>
<h2>变量数据类型</h2>
<p>
  变量的数据类型取决于变量中存储的值。如果存放的是数字就是数字型，存放字符串就是字符串型。
</p>
<p><img loading="lazy" decoding="async" width="521" height="323" src="/wp-content/uploads/2018/05/word-image-303.png" class="wp-image-336" srcset="/wp-content/uploads/2018/05/word-image-303.png 521w, /wp-content/uploads/2018/05/word-image-303-300x186.png 300w" sizes="(max-width: 521px) 100vw, 521px" /></p>
<p>
  基本数据类型
</p>
<table>
<tr>
<td>
<p>
  数据类型
</p>
</td>
<td>
<p>
  例题
</p>
</td>
</tr>
<tr>
<td>
<p>
  数字型（Number）
</p>
</td>
<td>
<p>
  10   10.5
</p>
</td>
</tr>
<tr>
<td>
<p>
  字符串型（String）
</p>
</td>
<td>
<p>
  “锄禾日当午”   ‘锄禾日当午’
</p>
</td>
</tr>
<tr>
<td>
<p>
  布尔型（Boolean）
</p>
</td>
<td>
<p>
  true（真）  false（假）
</p>
</td>
</tr>
</table>
<p>
  特殊数据类型
</p>
<table>
<tr>
<td>
<p>
  Null（空）
</p>
</td>
<td>
<p>
  空型
</p>
</td>
</tr>
<tr>
<td>
<p>
  Undefined（未定义型）
</p>
</td>
<td>
<p>
  变量声明后当没有赋值，这个变量是未定义型
</p>
</td>
</tr>
</table>
<p>
  typeof：显示变量的数据类型
</p>
<p><img loading="lazy" decoding="async" width="623" height="97" src="/wp-content/uploads/2018/05/word-image-304.png" class="wp-image-337" srcset="/wp-content/uploads/2018/05/word-image-304.png 623w, /wp-content/uploads/2018/05/word-image-304-300x47.png 300w" sizes="(max-width: 623px) 100vw, 623px" /><br />
<img loading="lazy" decoding="async" width="535" height="90" src="/wp-content/uploads/2018/05/word-image-305.png" class="wp-image-338" srcset="/wp-content/uploads/2018/05/word-image-305.png 535w, /wp-content/uploads/2018/05/word-image-305-300x50.png 300w" sizes="(max-width: 535px) 100vw, 535px" /><br />
<img loading="lazy" decoding="async" width="509" height="89" src="/wp-content/uploads/2018/05/word-image-306.png" class="wp-image-339" srcset="/wp-content/uploads/2018/05/word-image-306.png 509w, /wp-content/uploads/2018/05/word-image-306-300x52.png 300w" sizes="(max-width: 509px) 100vw, 509px" /><br />
<img loading="lazy" decoding="async" width="517" height="85" src="/wp-content/uploads/2018/05/word-image-307.png" class="wp-image-340" srcset="/wp-content/uploads/2018/05/word-image-307.png 517w, /wp-content/uploads/2018/05/word-image-307-300x49.png 300w" sizes="(max-width: 517px) 100vw, 517px" /></p>
<p>
  多学一招：JS支持八进制，十进制，十六进制。
</p>
<p><img loading="lazy" decoding="async" width="562" height="189" src="/wp-content/uploads/2018/05/word-image-308.png" class="wp-image-341" srcset="/wp-content/uploads/2018/05/word-image-308.png 562w, /wp-content/uploads/2018/05/word-image-308-300x101.png 300w" sizes="(max-width: 562px) 100vw, 562px" /></p>
<p>
  多学一招：JS支持无穷大
</p>
<p><img loading="lazy" decoding="async" width="759" height="37" src="/wp-content/uploads/2018/05/word-image-309.png" class="wp-image-342" srcset="/wp-content/uploads/2018/05/word-image-309.png 759w, /wp-content/uploads/2018/05/word-image-309-300x15.png 300w" sizes="(max-width: 759px) 100vw, 759px" /></p>
<h2>JavaScript的基本语法规则</h2>
<ol>
<li>
  解释型语言，可以随时运行
</li>
<li>
  大小写敏感
</li>
<li>
  弱类型语言（变量的数据类型取决于存放的数据）
</li>
<li>
  分号表示语句的结束（也可以使用换行替代分号，但不推荐）
</li>
</ol>
<h2>注释</h2>
<ol>
<li>
  单行注释：			//
</li>
<li>
  多行注释：			/*    */
</li>
</ol>
<h2>运算符</h2>
<h3>赋值运算符（=）</h3>
<p>
  a=5：将5付给a
</p>
<h3>算术运算符</h3>
<table>
<tr>
<td>
<p><strong>一元运算符</strong>
</p>
</td>
<td>
<p><strong>描述</strong>
</p>
</td>
<td>
<p><strong>二元运算符</strong>
</p>
</td>
<td>
<p><strong>描述</strong>
</p>
</td>
</tr>
<tr>
<td>
<p>
  &#8211;
</p>
</td>
<td>
<p>
  负号
</p>
</td>
<td>
<p>
  +
</p>
</td>
<td>
<p>
  加
</p>
</td>
</tr>
<tr>
<td>
<p>
  ++
</p>
</td>
<td>
<p>
  自增
</p>
</td>
<td>
<p>
  &#8211;
</p>
</td>
<td>
<p>
  减
</p>
</td>
</tr>
<tr>
<td>
<p>
  &#8212;
</p>
</td>
<td>
<p>
  自减
</p>
</td>
<td>
<p>
  *
</p>
</td>
<td>
<p>
  乘
</p>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<p>
  /
</p>
</td>
<td>
<p>
  除
</p>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<p>
  %
</p>
</td>
<td>
<p>
  模（取模就是取余数）
</p>
</td>
</tr>
</table>
<p>
  注意：
</p>
<p>
  1、“+”除了做数字运算，还可以做字符串相加，字符串相加就是字符串相连。
</p>
<p>
  2、字符串和数字相加，将数字转成字符串型再相连
</p>
<p>
  3、字符串只能做加法，不能做减法，不能做乘法，不能做除法。
</p>
<p><img loading="lazy" decoding="async" width="1035" height="162" src="/wp-content/uploads/2018/05/word-image-310.png" class="wp-image-343" srcset="/wp-content/uploads/2018/05/word-image-310.png 1035w, /wp-content/uploads/2018/05/word-image-310-300x47.png 300w, /wp-content/uploads/2018/05/word-image-310-768x120.png 768w, /wp-content/uploads/2018/05/word-image-310-1024x160.png 1024w" sizes="(max-width: 1035px) 100vw, 1035px" /></p>
<p>
  4、取模就是取余数
</p>
<p><img loading="lazy" decoding="async" width="608" height="139" src="/wp-content/uploads/2018/05/word-image-311.png" class="wp-image-344" srcset="/wp-content/uploads/2018/05/word-image-311.png 608w, /wp-content/uploads/2018/05/word-image-311-300x69.png 300w" sizes="(max-width: 608px) 100vw, 608px" /></p>
<p>
  自增
</p>
<p>
  ++前置：先自增，后运行
</p>
<p>
  ++后置：后自增，先运算
</p>
<p><img loading="lazy" decoding="async" width="736" height="92" src="/wp-content/uploads/2018/05/word-image-312.png" class="wp-image-345" srcset="/wp-content/uploads/2018/05/word-image-312.png 736w, /wp-content/uploads/2018/05/word-image-312-300x38.png 300w" sizes="(max-width: 736px) 100vw, 736px" /><br />
<img loading="lazy" decoding="async" width="742" height="99" src="/wp-content/uploads/2018/05/word-image-313.png" class="wp-image-346" srcset="/wp-content/uploads/2018/05/word-image-313.png 742w, /wp-content/uploads/2018/05/word-image-313-300x40.png 300w" sizes="(max-width: 742px) 100vw, 742px" /><br />
<img loading="lazy" decoding="async" width="581" height="119" src="/wp-content/uploads/2018/05/word-image-314.png" class="wp-image-347" srcset="/wp-content/uploads/2018/05/word-image-314.png 581w, /wp-content/uploads/2018/05/word-image-314-300x61.png 300w" sizes="(max-width: 581px) 100vw, 581px" /><br />
<img loading="lazy" decoding="async" width="1055" height="71" src="/wp-content/uploads/2018/05/word-image-315.png" class="wp-image-348" srcset="/wp-content/uploads/2018/05/word-image-315.png 1055w, /wp-content/uploads/2018/05/word-image-315-300x20.png 300w, /wp-content/uploads/2018/05/word-image-315-768x52.png 768w, /wp-content/uploads/2018/05/word-image-315-1024x69.png 1024w" sizes="(max-width: 1055px) 100vw, 1055px" /><br />
<img loading="lazy" decoding="async" width="581" height="119" src="/wp-content/uploads/2018/05/word-image-316.png" class="wp-image-349" srcset="/wp-content/uploads/2018/05/word-image-316.png 581w, /wp-content/uploads/2018/05/word-image-316-300x61.png 300w" sizes="(max-width: 581px) 100vw, 581px" /></p>
<h2>作业：</h2>
<ol>
<li>
  实现旋转的效果
</li>
</ol>
<p><img loading="lazy" decoding="async" width="101" height="100" src="/wp-content/uploads/2018/05/word-image-317.png" class="wp-image-350" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/303.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS初级（二）else if、 if、 if else、 switch、 函数、 判断语句、 数组、 更改颜色</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/352.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/352.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Thu, 17 May 2018 14:15:55 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[else if]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[if else]]></category>
		<category><![CDATA[switch]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[判断语句]]></category>
		<category><![CDATA[数组]]></category>
		<category><![CDATA[更改颜色]]></category>
		<guid isPermaLink="false">/?p=352</guid>

					<description><![CDATA[回顾 JavaScript是一个解释型、基于对象的脚本语言 可以运行在客户端和服务器端，但是一般运行在客户端。 [&#8230;]]]></description>
										<content:encoded><![CDATA[</p>
<h2>回顾</h2>
<ol>
<li>
  JavaScript是一个解释型、基于对象的脚本语言
</li>
<li>
  可以运行在客户端和服务器端，但是一般运行在客户端。
</li>
<li>
  主要运用在页面的特效，页面交互。
</li>
<li>
  变量：计算机内存中的一段空间
</li>
<li>
  变量的命名规则：</p>
<ol>
<li>
    变量名以字母、下划线、$开头，后面跟的是字母、数字、下划线、$
  </li>
<li>
    关键字不能变量名  var
  </li>
<li>
    变量名区分大小写
  </li>
</ol>
</li>
<li>
  声明变量</p>
<ol>
<li>
    显式声明：通过var声明
  </li>
<li>
    隐式声明：不声明直接使用
  </li>
</ol>
</li>
<li>
  变量的数据类型</p>
<ol>
<li>
    基本类型</p>
<ol>
<li>
      数字型（支持八进制，十进制，十六进制，支持无穷大）
    </li>
<li>
      字符串型（单引号、双引号字符串是一样的）
    </li>
<li>
      布尔型（true和false）
    </li>
</ol>
</li>
<li>
    复合类型</p>
<ol>
<li>
      对象
    </li>
<li>
      数组
    </li>
</ol>
</li>
<li>
    特殊类型</p>
<ol>
<li>
      Null
    </li>
<li>
      Undefined：如果一个变量声明了没有赋值，就是未定义型
    </li>
</ol>
</li>
</ol>
</li>
<li>
  注释</p>
<ol>
<li>
    单行  //
  </li>
<li>
    多行  /*    */
  </li>
</ol>
</li>
<li>
  常用的输出</p>
<ol>
<li>
    document.write()：输出在浏览器上
  </li>
<li>
    alert()：弹出一个对话框，对话框上有一个“确定”按钮
  </li>
<li>
    prompt()：弹出一个可以输入的对话框
  </li>
<li>
    confirm()：弹出一个对话框，对话框上“确定”和“取消”按钮
  </li>
<li>
    console.log()：在控制器输出。
  </li>
</ol>
</li>
</ol>
<h2>运算符</h2>
<h3>算术运算符</h3>
<p>
  二元运算符：+  &#8211; *  /  %
</p>
<p>
  “+”：不但可以做数字相加，还可以做字符串相加，字符串相加就是字符串相连
</p>
<p>
  比如：1+2=3  “1”+”2”=”12”
</p>
<p>
  一元运算符：++   &#8212;
</p>
<p>
  ++前置先自增，++后置就是后自增。
</p>
<h3>关系运算符</h3>
<table>
<tr>
<td>
<p>
  运算符
</p>
</td>
<td>
<p>
  描述
</p>
</td>
</tr>
<tr>
<td>
<p>
  &gt;
</p>
</td>
<td>
<p>
  大于
</p>
</td>
</tr>
<tr>
<td>
<p>
  &gt;=
</p>
</td>
<td>
<p>
  大于等于
</p>
</td>
</tr>
<tr>
<td>
<p>
  &lt;
</p>
</td>
<td>
<p>
  小于
</p>
</td>
</tr>
<tr>
<td>
<p>
  &lt;=
</p>
</td>
<td>
<p>
  小于等于
</p>
</td>
</tr>
<tr>
<td>
<p>
  ==
</p>
</td>
<td>
<p>
  等于
</p>
</td>
</tr>
<tr>
<td>
<p>
  !=
</p>
</td>
<td>
<p>
  不等于
</p>
</td>
</tr>
</table>
<p>
  关系运算符运算的结果就两个：true和false
</p>
<p>
  5&gt;2		true
</p>
<p>
  5&lt;2		false
</p>
<p>
  5&gt;=2	true
</p>
<p>
  5&gt;=5	true
</p>
<p>
  5&lt;=5	true
</p>
<p>
  5==5	true
</p>
<p>
  5==2	false
</p>
<p>
  5!=5	false
</p>
<p>
  5!=2	true
</p>
<h3>逻辑运算符</h3>
<table>
<tr>
<td>
<p>
  运算符
</p>
</td>
<td>
<p>
  描述
</p>
</td>
</tr>
<tr>
<td>
<p>
  &amp;&amp;（与）
</p>
</td>
<td>
<p>
  并且
</p>
</td>
</tr>
<tr>
<td>
<p>
  ||（或）
</p>
</td>
<td>
<p>
  或者
</p>
</td>
</tr>
<tr>
<td>
<p>
  !（非）
</p>
</td>
<td>
<p>
  取反
</p>
</td>
</tr>
</table>
<p>
  练习
</p>
<p>
  true &amp;&amp; true		true
</p>
<p>
  true &amp;&amp; false		false
</p>
<p>
  false &amp;&amp; true		false
</p>
<p>
  false &amp;&amp; false  false
</p>
<p>
  true || true		true
</p>
<p>
  true || false		true
</p>
<p>
  false || true    true
</p>
<p>
  false || false   false
</p>
<p>
  !true    false
</p>
<p>
  !false		true
</p>
<p>
  练习：写出如下表达式
</p>
<p>
  1、评三好学生的条件语文（ch）数学（math）不低于90
</p>
<p>
  方法一：ch&gt;=90 &amp;&amp; math&gt;=90
</p>
<p>
  方法二：!(ch&lt;90 || math&lt;90)
</p>
<p>
  2、评三好学生的条件语文（ch）或者数学（math）超过90
</p>
<p>
  方法一：Ch&gt;90 || math&gt;90
</p>
<p>
  方法二：!(ch&lt;=90 &amp;&amp; math&lt;=90)
</p>
<p>
  3、年龄（age）在20到30之间
</p>
<p>
  方法一：age&gt;=20 &amp;&amp; age&lt;=30
</p>
<p>
  方法二：!(age&lt;20 || age&gt;30)
</p>
<p><img loading="lazy" decoding="async" width="688" height="205" src="/wp-content/uploads/2018/05/word-image-319.png" class="wp-image-354" srcset="/wp-content/uploads/2018/05/word-image-319.png 688w, /wp-content/uploads/2018/05/word-image-319-300x89.png 300w" sizes="(max-width: 688px) 100vw, 688px" /></p>
<p>
  4、小红嫁人的条件，年龄（age）在20到30之间，而且兜里的钱（money）不低于100。
</p>
<p>
  age&gt;=20 &amp;&amp; age&lt;=30 &amp;&amp; money&gt;=100
</p>
<p>
  5、小红嫁人的条件，要么年龄（age）在20到30之间，要么兜里的钱（money）不低于100。
</p>
<p>
  age&gt;=20 &amp;&amp; age&lt;=30 || money&gt;=100
</p>
<h3>赋值运算符（=）</h3>
<p>
  计算机的“=”和数学的“=”不一样。
</p>
<p>
  a=5：计算机在内存中划出一段空间，取名为a，并且将5付给a。
</p>
<table>
<tr>
<td>
<p>
  运算符
</p>
</td>
<td>
<p>
  描述
</p>
</td>
</tr>
<tr>
<td>
<p>
  =
</p>
</td>
<td>
<p>
  赋值   a=5  将5付给a
</p>
</td>
</tr>
<tr>
<td>
<p>
  +=
</p>
</td>
<td>
<p>
  a+=b    a=a+b
</p>
</td>
</tr>
<tr>
<td>
<p>
  -=
</p>
</td>
<td>
<p>
  a-=b     a=a-b
</p>
</td>
</tr>
<tr>
<td>
<p>
  *=
</p>
</td>
<td>
<p>
  a*=b     a=a*b
</p>
</td>
</tr>
<tr>
<td>
<p>
  /=
</p>
</td>
<td>
<p>
  a/=b     a=a/b
</p>
</td>
</tr>
<tr>
<td>
<p>
  %=
</p>
</td>
<td>
<p>
  a%=b    a=a%b
</p>
</td>
</tr>
</table>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="529" height="142" src="/wp-content/uploads/2018/05/word-image-320.png" class="wp-image-355" srcset="/wp-content/uploads/2018/05/word-image-320.png 529w, /wp-content/uploads/2018/05/word-image-320-300x81.png 300w" sizes="(max-width: 529px) 100vw, 529px" /></p>
<h2>条件语句（判断语句）</h2>
<h3>单分支（if）</h3>
<p>
  流程图
</p>
<p><img loading="lazy" decoding="async" width="546" height="89" src="/wp-content/uploads/2018/05/word-image-321.png" class="wp-image-356" srcset="/wp-content/uploads/2018/05/word-image-321.png 546w, /wp-content/uploads/2018/05/word-image-321-300x49.png 300w" sizes="(max-width: 546px) 100vw, 546px" /></p>
<p>
  语法：
</p>
<p>
  if(条件表达式){
</p>
<p>
        //代码
</p>
<p>
  }
</p>
<p>
  {：表示程序的开始
</p>
<p>
  }：表示程序的结束
</p>
<p>
  if中的条件如果为true，就执行if中的代码，如果为false，就不执行。
</p>
<p>
  例题：
</p>
<p><img loading="lazy" decoding="async" width="762" height="193" src="/wp-content/uploads/2018/05/word-image-322.png" class="wp-image-357" srcset="/wp-content/uploads/2018/05/word-image-322.png 762w, /wp-content/uploads/2018/05/word-image-322-300x76.png 300w" sizes="(max-width: 762px) 100vw, 762px" /></p>
<h3>双分支（if-else-）</h3>
<p>
  流程图：
</p>
<p><img loading="lazy" decoding="async" width="580" height="181" src="/wp-content/uploads/2018/05/word-image-323.png" class="wp-image-358" srcset="/wp-content/uploads/2018/05/word-image-323.png 580w, /wp-content/uploads/2018/05/word-image-323-300x94.png 300w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<p>
  语法：
</p>
<p>
  if(条件){
</p>
<p>
  	//代码1，条件成立执行这段
</p>
<p>
  }else{
</p>
<p>
  	//代码2，条件不成立执行这段
</p>
<p>
  }
</p>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="554" height="242" src="/wp-content/uploads/2018/05/word-image-324.png" class="wp-image-359" srcset="/wp-content/uploads/2018/05/word-image-324.png 554w, /wp-content/uploads/2018/05/word-image-324-300x131.png 300w" sizes="(max-width: 554px) 100vw, 554px" /></p>
<h3>多分支（else if）</h3>
<p>
  场景：输入成绩，成绩大于90是A，大于80是B，以此类推…
</p>
<p>
  语法：
</p>
<p>
  if(条件){
</p>
<p>
  	//代码1
</p>
<p>
  }else if(条件){
</p>
<p>
  	//代码2
</p>
<p>
  }
</p>
<p>
  else if(条件){
</p>
<p>
  	//代码3
</p>
<p>
  }else{
</p>
<p>
  	//代码4
</p>
<p>
  }
</p>
<ol>
<li>
  从上往下一次匹配，匹配到那段就执行那段代码
</li>
<li>
  只要有一个匹配成功，下面的条件不再执行
</li>
<li>
  如果上面都没有匹配成功，就执行else部分的代码
</li>
</ol>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="622" height="459" src="/wp-content/uploads/2018/05/word-image-325.png" class="wp-image-360" srcset="/wp-content/uploads/2018/05/word-image-325.png 622w, /wp-content/uploads/2018/05/word-image-325-300x221.png 300w" sizes="(max-width: 622px) 100vw, 622px" /></p>
<h3>多路判断（switch-case-）</h3>
<p>
  语法：
</p>
<p>
  switch(表达式){
</p>
<p>
  	case 值1:
</p>
<p>
  		代码;
</p>
<p>
  		[break;]
</p>
<p>
  case 值2:
</p>
<p>
  	代码2;
</p>
<p>
  	[break;]
</p>
<p>
  default:      //如果上面都没有匹配到，就执行default这一段
</p>
<p>
  	代码3
</p>
<p>
  }
</p>
<p>
  脚下留心：break是可以省略的，代码一直从匹配处开始执行，一直执行到break结束。
</p>
<p>
  switch：开关
</p>
<p>
  case：事件
</p>
<p>
  break：中断
</p>
<p>
  default：默认
</p>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="637" height="430" src="/wp-content/uploads/2018/05/word-image-326.png" class="wp-image-361" srcset="/wp-content/uploads/2018/05/word-image-326.png 637w, /wp-content/uploads/2018/05/word-image-326-300x203.png 300w, /wp-content/uploads/2018/05/word-image-326-220x150.png 220w" sizes="(max-width: 637px) 100vw, 637px" /></p>
<p>
  思考：如下代码输入0,1,2 各输出什么?
</p>
<p>
  var num=prompt(&#8216;请输入一个数&#8217;,&#8221;);
</p>
<p>
  switch(num%3){
</p>
<p>
  	case 0:
</p>
<p>
  		alert(&#8216;十全十美&#8217;);
</p>
<p>
  		break;
</p>
<p>
  	case 1:
</p>
<p>
  		alert(&#8216;一心一意&#8217;);
</p>
<p>
  	case 2:
</p>
<p>
  		alert(&#8216;两全其美&#8217;);
</p>
<p>
  		break;
</p>
<p>
  	default:
</p>
<p>
  		alert(&#8216;输入错误&#8217;);
</p>
<p>
  }
</p>
<p>
  输入0		输出十全十美
</p>
<p>
  输入1		输出 &#8216;一心一意&#8217;  &#8216;两全其美&#8217;
</p>
<p>
  输入2		输出&#8217;两全其美&#8217;
</p>
<p>
  多学一招：
</p>
<ol>
<li>
  判断语句中，如果代码就一句，“{}”是可以省略的
</li>
</ol>
<p><img loading="lazy" decoding="async" width="629" height="237" src="/wp-content/uploads/2018/05/word-image-327.png" class="wp-image-362" srcset="/wp-content/uploads/2018/05/word-image-327.png 629w, /wp-content/uploads/2018/05/word-image-327-300x113.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></p>
<ol>
<li>
  练习
</li>
</ol>
<p><img loading="lazy" decoding="async" width="490" height="167" src="/wp-content/uploads/2018/05/word-image-328.png" class="wp-image-363" srcset="/wp-content/uploads/2018/05/word-image-328.png 490w, /wp-content/uploads/2018/05/word-image-328-300x102.png 300w" sizes="(max-width: 490px) 100vw, 490px" /></p>
<ol>
<li>
  switch语句与if语句的区别
</li>
</ol>
<p>
  答:switch的条件与一个固定的值匹配的，if的条件是比较表达式
</p>
<p><img loading="lazy" decoding="async" width="464" height="24" src="/wp-content/uploads/2018/05/word-image-329.png" class="wp-image-364" srcset="/wp-content/uploads/2018/05/word-image-329.png 464w, /wp-content/uploads/2018/05/word-image-329-300x16.png 300w" sizes="(max-width: 464px) 100vw, 464px" /><br />
<img loading="lazy" decoding="async" width="492" height="44" src="/wp-content/uploads/2018/05/word-image-330.png" class="wp-image-365" srcset="/wp-content/uploads/2018/05/word-image-330.png 492w, /wp-content/uploads/2018/05/word-image-330-300x27.png 300w" sizes="(max-width: 492px) 100vw, 492px" /></p>
<h3>if语句嵌套</h3>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  	var score=prompt(&#8216;请输入成绩&#8217;,&#8221;);
</p>
<p>
  	if(score==&#8221; || score&lt;0 || score&gt;100)
</p>
<p>
  		alert(&#8216;成绩必须在0~100之间&#8217;);
</p>
<p>
  	else{
</p>
<p>
  		if(score&gt;=60)
</p>
<p>
  			alert(&#8216;及格&#8217;);
</p>
<p>
  		else
</p>
<p>
  			alert(&#8216;不及格&#8217;)
</p>
<p>
  	}
</p>
<p>
  &lt;/script&gt;
</p>
<h2>数组</h2>
<p>
  数组是计算机内存中一段连续的空间，这段连续的空间就一个名字（stu），通过下标来区分每个元素的值，下标从0开始，每次递增1。
</p>
<p><img loading="lazy" decoding="async" width="459" height="190" src="/wp-content/uploads/2018/05/word-image-331.png" class="wp-image-366" srcset="/wp-content/uploads/2018/05/word-image-331.png 459w, /wp-content/uploads/2018/05/word-image-331-300x124.png 300w" sizes="(max-width: 459px) 100vw, 459px" /></p>
<h3>创建数组的方式</h3>
<p>
  方法一：var 数组名=[元素1,元素2,…]
</p>
<p>
  方法二：var 数组名=new Array([元素1，元素2，…])
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  //方法一
</p>
<p>
  var stu=[&#8216;tom&#8217;,&#8217;berry&#8217;,&#8217;ketty&#8217;];	//[]表示数组
</p>
<p>
  document.write(stu[0]+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(stu[1]+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(stu[2]+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&lt;br&gt;&lt;br&gt;&#8217;);
</p>
<p>
  //方法二：
</p>
<p>
  stu=new Array(&#8216;张三&#8217;,&#8217;李四&#8217;);
</p>
<p>
  document.write(stu[0]+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(stu[1]+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&lt;br&gt;&lt;br&gt;&#8217;);
</p>
<p>
  //方法三:
</p>
<p>
  stu=new Array();
</p>
<p>
  stu[0]=&#8217;李白&#8217;;
</p>
<p>
  stu[1]=&#8217;杜甫&#8217;;
</p>
<p>
  document.write(stu[0]+stu[1]);
</p>
<p>
  &lt;/script&gt;
</p>
<p><img loading="lazy" decoding="async" width="159" height="186" src="/wp-content/uploads/2018/05/word-image-332.png" class="wp-image-367" /></p>
<h2>多维数组</h2>
<ol>
<li>
  二维及二维以上的数组都称为多维数组，多维数组中用的最多的就是二维数组
</li>
<li>
  二维数组有行和列组成
</li>
</ol>
<p><img loading="lazy" decoding="async" width="676" height="160" src="/wp-content/uploads/2018/05/word-image-333.png" class="wp-image-368" srcset="/wp-content/uploads/2018/05/word-image-333.png 676w, /wp-content/uploads/2018/05/word-image-333-300x71.png 300w" sizes="(max-width: 676px) 100vw, 676px" /></p>
<ol>
<li>
  JS不支持多维数组，我们可以通过数组中存放数组来实现二维数组。
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  //方法一：
</p>
<p>
  var stu=[
</p>
<p>
  	[&#8216;tom&#8217;,&#8217;berry&#8217;],
</p>
<p>
  	[&#8216;李白&#8217;,&#8217;杜甫&#8217;]
</p>
<p>
  ];
</p>
<p>
  document.write(stu[0][0]+stu[0][1]+'&lt;br&gt;&#8217;);	//tomberry
</p>
<p>
  document.write(stu[1][0]+stu[1][1]+'&lt;br&gt;&#8217;);	//李白杜甫
</p>
<p>
  document.write(&#8216;&lt;br&gt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&lt;br&gt;&#8217;);
</p>
<p>
  //方法二：
</p>
<p>
  var emp=new Array(new Array(),new Array());
</p>
<p>
  emp[0][0]=&#8217;tom&#8217;;
</p>
<p>
  emp[0][1]=&#8217;berry&#8217;;
</p>
<p>
  emp[1][0]=&#8217;aa&#8217;;
</p>
<p>
  emp[1][1]=&#8217;bb&#8217;;
</p>
<p>
  document.write(emp[0]+'&lt;br&gt;&#8217;);	//tom,berry
</p>
<p>
  document.write(emp[1]);			//aa,bb
</p>
<p>
  &lt;/script&gt;
</p>
<h2>函数</h2>
<p>
  函数就是代码块，只要调用就可以执行。函数也叫方法
</p>
<p>
  好处：
</p>
<ol>
<li>
  实现了代码的可重用性
</li>
<li>
  实现模块化编程
</li>
</ol>
<h3>函数的分类</h3>
<ol>
<li>
  预定义函数，JS已经定义好了，我们只要调用就行（参照手册）
</li>
<li>
  自定义函数
</li>
</ol>
<h3>预定义函数例题（操作数组）</h3>
<p><img loading="lazy" decoding="async" width="672" height="260" src="/wp-content/uploads/2018/05/word-image-334.png" class="wp-image-369" srcset="/wp-content/uploads/2018/05/word-image-334.png 672w, /wp-content/uploads/2018/05/word-image-334-300x116.png 300w" sizes="(max-width: 672px) 100vw, 672px" /></p>
<h3>自定义函数</h3>
<p>
  语法：
</p>
<p>
  function 函数名([参数1,参数2,…]){
</p>
<p>
  	//函数体
</p>
<p>
  }
</p>
<p>
  函数名的命名规则：
</p>
<ol>
<li>
  义字母、下划线开头，后面跟的是字母、数字、下划线
</li>
<li>
  关键字不能做函数名
</li>
</ol>
<p>
  最简单的函数
</p>
<p><img loading="lazy" decoding="async" width="443" height="237" src="/wp-content/uploads/2018/05/word-image-335.png" class="wp-image-370" srcset="/wp-content/uploads/2018/05/word-image-335.png 443w, /wp-content/uploads/2018/05/word-image-335-300x160.png 300w" sizes="(max-width: 443px) 100vw, 443px" /></p>
<p>
  参数的分类：
</p>
<ol>
<li>
  形式参数（形参），告诉调用者需要传递几个参数
</li>
<li>
  实际参数（实参）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="625" height="192" src="/wp-content/uploads/2018/05/word-image-336.png" class="wp-image-371" srcset="/wp-content/uploads/2018/05/word-image-336.png 625w, /wp-content/uploads/2018/05/word-image-336-300x92.png 300w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<h3>函数的调用</h3>
<p>
  通过函数名来调用函数
</p>
<p>
  函数定义好了是不执行的，函数只有在调用的时候才执行。
</p>
<h2>例题</h2>
<h3>判断奇偶数</h3>
<ol>
<li>
  isNaN()：不是数字返回true，是数字返回false
</li>
<li>
  indexOf()：返回字符串内第一次出现子字符串的字符位置，位置从0开始，没有找到返回-1
</li>
</ol>
<p><img loading="lazy" decoding="async" width="597" height="91" src="/wp-content/uploads/2018/05/word-image-337.png" class="wp-image-372" srcset="/wp-content/uploads/2018/05/word-image-337.png 597w, /wp-content/uploads/2018/05/word-image-337-300x46.png 300w" sizes="(max-width: 597px) 100vw, 597px" /></p>
<p>
  实现代码
</p>
<p><img loading="lazy" decoding="async" width="1101" height="599" src="/wp-content/uploads/2018/05/word-image-338.png" class="wp-image-373" srcset="/wp-content/uploads/2018/05/word-image-338.png 1101w, /wp-content/uploads/2018/05/word-image-338-300x163.png 300w, /wp-content/uploads/2018/05/word-image-338-768x418.png 768w, /wp-content/uploads/2018/05/word-image-338-1024x557.png 1024w" sizes="(max-width: 1101px) 100vw, 1101px" /></p>
<h3>判断成绩</h3>
<ol>
<li>
  parseInt()：转成数字整数
</li>
<li>
  parseFloat()：转成浮点数（小数）
</li>
</ol>
<p>
  例题
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function check(){
</p>
<p>
  	var ch=frm.ch.value;		//字符串型
</p>
<p>
  	var math=frm.math.value;	//字符串型
</p>
<p>
  	if(ch==&#8221;){
</p>
<p>
  		alert(&#8216;您没有输入语文成绩&#8217;);
</p>
<p>
  		frm.ch.select();
</p>
<p>
  	}
</p>
<p>
  	else if(isNaN(ch)){
</p>
<p>
  		alert(&#8216;语文成绩不是数字&#8217;);
</p>
<p>
  		frm.ch.select();
</p>
<p>
  	}
</p>
<p>
  	else if(math==&#8221;){
</p>
<p>
  		alert(&#8216;您没有输入数学成绩&#8217;);
</p>
<p>
  		frm.math.select();
</p>
<p>
  	}
</p>
<p>
  	else if(isNaN(math)){
</p>
<p>
  		alert(&#8216;数学成绩不是数字&#8217;);
</p>
<p>
  		frm.math.select();
</p>
<p>
  	}
</p>
<p>
  	else{
</p>
<p>
  		//ch=parseInt(ch);	//将语文成绩转成整数
</p>
<p>
  		//math=parseInt(math);//将数学成绩转成整数
</p>
<p>
  		ch=parseFloat(ch);
</p>
<p>
  		math=parseFloat(math);	//转成浮点数
</p>
<p>
  		if(ch&lt;0 || ch&gt;100){
</p>
<p>
  			alert(&#8216;语文成绩必须在0-100之间&#8217;);
</p>
<p>
  			frm.ch.select();
</p>
<p>
  		}
</p>
<p>
  		else if(!(math&gt;=0 &amp;&amp; math&lt;=100)){
</p>
<p>
  			alert(&#8216;数学成绩必须在0-100之间&#8217;);
</p>
<p>
  			frm.math.select();
</p>
<p>
  		}
</p>
<p>
  		else{
</p>
<p>
  			var avg=(ch+math)/2;	//求平均分
</p>
<p>
  			alert(&#8216;平均分是：&#8217;+avg);
</p>
<p>
  			if(avg&gt;=90)
</p>
<p>
  				alert(&#8216;孩子，你是我的骄傲&#8217;);
</p>
<p>
  			else if(avg&gt;=80)
</p>
<p>
  				alert(&#8216;好样的，宝贝&#8217;);
</p>
<p>
  			else if(avg&gt;=70)
</p>
<p>
  				alert(&#8216;你离优秀不远了&#8217;);
</p>
<p>
  			else if(avg&gt;=60)
</p>
<p>
  				alert(&#8216;你还是有潜力的&#8217;);
</p>
<p>
  			else
</p>
<p>
  				alert(&#8216;你不努力是不行了&#8217;);
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;form action=&#8221;&#8221; name=&#8217;frm&#8217;&gt;
</p>
<p>
  	语文：&lt;input type=&#8221;text&#8221; name=&#8221;ch&#8221; id=&#8221;&#8221;&gt; &lt;br&gt;
</p>
<p>
  	数学：&lt;input type=&#8221;text&#8221; name=&#8221;math&#8221; id=&#8221;&#8221;&gt; &lt;br&gt;
</p>
<p>
  	&lt;input type=&#8221;button&#8221; value=&#8221;判断成绩&#8221; onclick=&#8217;check()&#8217;&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p><img loading="lazy" decoding="async" width="323" height="93" src="/wp-content/uploads/2018/05/word-image-339.png" class="wp-image-374" srcset="/wp-content/uploads/2018/05/word-image-339.png 323w, /wp-content/uploads/2018/05/word-image-339-300x86.png 300w" sizes="(max-width: 323px) 100vw, 323px" /></p>
<h3>更改颜色</h3>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function change(){
</p>
<p>
  	var num=frm.color.value;
</p>
<p>
  	switch(num){
</p>
<p>
  		case &#8220;1&#8221;:   /*num是字符串类型的*/
</p>
<p>
  			shi.style.color=&#8217;#F00&#8242;;
</p>
<p>
  			break;
</p>
<p>
  		case &#8220;2&#8221;:
</p>
<p>
  			shi.style.color=&#8217;#090&#8242;;
</p>
<p>
  			break;
</p>
<p>
  		case &#8220;3&#8221;:
</p>
<p>
  			shi.style.color=&#8217;#00F&#8217;;
</p>
<p>
  			break;
</p>
<p>
  		default:
</p>
<p>
  			shi.style.color=&#8217;#000&#8242;;
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;div id=&#8217;shi&#8217;&gt;
</p>
<p>
  锄禾日当午，&lt;br&gt;
</p>
<p>
  汗滴禾下土。&lt;br&gt;
</p>
<p>
  谁知盘中餐，&lt;br&gt;
</p>
<p>
  粒粒皆辛苦。
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;form action=&#8221;&#8221; name=&#8217;frm&#8217;&gt;
</p>
<p>
  	&lt;select name=&#8221;color&#8221; id=&#8221;&#8221; onchange=&#8217;change()&#8217;&gt;
</p>
<p>
  		&lt;option value=&#8221;&#8221;&gt;&#8212;请选择&#8212;&lt;/option&gt;
</p>
<p>
  		&lt;option value=&#8221;1&#8243;&gt;红色&lt;/option&gt;
</p>
<p>
  		&lt;option value=&#8221;2&#8243;&gt;绿色&lt;/option&gt;
</p>
<p>
  		&lt;option value=&#8221;3&#8243;&gt;蓝色&lt;/option&gt;
</p>
<p>
  	&lt;/select&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p><img loading="lazy" decoding="async" width="124" height="103" src="/wp-content/uploads/2018/05/word-image-340.png" class="wp-image-375" /></p>
<h2>作业</h2>
<p>
  1、判断闰年</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/352.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS初级（三）do-while、 for、 for-in、 while、 三元运算符、 循环、 最值、 流程控制、 跳转语句、 遍历</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/377.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/377.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Thu, 17 May 2018 14:14:31 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[do-while]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[for-in]]></category>
		<category><![CDATA[while]]></category>
		<category><![CDATA[三元运算符]]></category>
		<category><![CDATA[循环]]></category>
		<category><![CDATA[最值]]></category>
		<category><![CDATA[流程控制]]></category>
		<category><![CDATA[跳转语句]]></category>
		<category><![CDATA[遍历]]></category>
		<guid isPermaLink="false">/?p=377</guid>

					<description><![CDATA[回顾 运算符 算术运算符 一元运算符：++ &#8212; 二元运算符 + &#8211; * / % 关系运 [&#8230;]]]></description>
										<content:encoded><![CDATA[</p>
<h2>回顾</h2>
<ol>
<li>
  运算符</p>
<ol>
<li>
    算术运算符</p>
<ol>
<li>
      一元运算符：++			&#8212;
    </li>
<li>
      二元运算符	+	&#8211;	*	/	%
    </li>
</ol>
</li>
<li>
    关系运算符：&gt;  &gt;=  &lt;  &lt;=  ==  !=
  </li>
<li>
    逻辑运算符：&amp;&amp;	||	!
  </li>
<li>
    赋值运算符：= += -+ *= /= %=
  </li>
<li>
    点运算符   document.write()
  </li>
</ol>
</li>
<li>
  判断语句（条件语句）</p>
<ol>
<li>
    if：单分支
  </li>
<li>
    if-else-：双分支
  </li>
<li>
    else if：多分支
  </li>
<li>
    switch-case ：多路选择
  </li>
</ol>
</li>
<li>
  数组：</p>
<ol>
<li>
    内存中一组连续的空间
  </li>
<li>
    通过下标来区分各个空间，下标从0开始
  </li>
<li>
    声明数组：</p>
<ol>
<li>
      var 数组名=[]
    </li>
<li>
      var 数组名=new Array([元素1,元素2]);
    </li>
</ol>
</li>
<li>
    数组的方法：</p>
<ol>
<li>
      数组名.sort()		数组排序
    </li>
<li>
      数组名.reverse()：数组翻转
    </li>
<li>
      数组名.join()：	数组连接成字符串
    </li>
<li>
      数组.length：		数组的长度
    </li>
</ol>
</li>
</ol>
</li>
<li>
  函数</p>
<ol>
<li>
    函数是一个代码块，可以多次调用，能够很容易的实现模块化编程
  </li>
<li>
    函数分为预定义函数和自定义函数
  </li>
<li>
    预定义函数：isNaN()，indexOf()，parseInt()，parseFloat(),select()
  </li>
<li>
    自定义函数语法
  </li>
</ol>
</li>
</ol>
<p>
  function 函数名([参数]){
</p>
<p>
  	//函数体
</p>
<p>
  }
</p>
<ul>
<li>
<ol>
<li>
      参数分为形式形数（形参）和实际参数（实参）
    </li>
<li>
      通过函数名来调用函数
    </li>
<li>
      函数定义的时候不执行，调用的时候才执行函数
    </li>
</ol>
</li>
</ul>
<h2>三元运算符（?:）</h2>
<p>
  语法：表达式?值1:值2
</p>
<p>
  描述：如果表达式的结果为真，返回值1，否则返回值2
</p>
<p><img loading="lazy" decoding="async" width="681" height="118" src="/wp-content/uploads/2018/05/word-image-342.png" class="wp-image-379" srcset="/wp-content/uploads/2018/05/word-image-342.png 681w, /wp-content/uploads/2018/05/word-image-342-300x52.png 300w" sizes="(max-width: 681px) 100vw, 681px" /></p>
<h2>循环</h2>
<p>
  重复执行称为循环
</p>
<h3>循环的分类</h3>
<ol>
<li>
  for循环
</li>
<li>
  while循环
</li>
<li>
  do-while循环
</li>
<li>
  for-in循环
</li>
</ol>
<h3>for循环</h3>
<p>
  语法：
</p>
<p>
  for(初始值;条件;增量){
</p>
<p>
  	//循环体
</p>
<p>
  }
</p>
<p>
  只要条件为真，就一直循环，一直循环到条件不成立为止
</p>
<p>
  最简单的例题（输出十句字符串）
</p>
<p><img loading="lazy" decoding="async" width="710" height="188" src="/wp-content/uploads/2018/05/word-image-343.png" class="wp-image-380" srcset="/wp-content/uploads/2018/05/word-image-343.png 710w, /wp-content/uploads/2018/05/word-image-343-300x79.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></p>
<p>
  调整一下增量
</p>
<p><img loading="lazy" decoding="async" width="682" height="107" src="/wp-content/uploads/2018/05/word-image-344.png" class="wp-image-381" srcset="/wp-content/uploads/2018/05/word-image-344.png 682w, /wp-content/uploads/2018/05/word-image-344-300x47.png 300w" sizes="(max-width: 682px) 100vw, 682px" /></p>
<p>
  分析题：
</p>
<ol>
<li>
  如下循环输出什么？
</li>
</ol>
<p>
  for(var j=1;j&lt;=10;j&#8211;){
</p>
<p>
  	document.write(&#8221;);
</p>
<p>
  }
</p>
<p>
  答：死循环，j&#8211;,j永远小于10
</p>
<ol>
<li>
  如下循环输出什么？
</li>
</ol>
<p>
  for(var j=1;j&lt;=10;){
</p>
<p>
  	alert(&#8221;);
</p>
<p>
  }
</p>
<p>
  答：死循环，因为j永远等于1,1永远小于10
</p>
<ol>
<li>
  如下循环输出什么？
</li>
</ol>
<p>
  for(var j=1;;j&#8211;){
</p>
<p>
  	alert(&#8221;);
</p>
<p>
  }
</p>
<p>
  答：没有条件永远为true，这也是死循环
</p>
<ol>
<li>
  一个典型的死循环
</li>
</ol>
<p>
  for(;;){
</p>
<p>
  	alert(&#8216;我注意你好久了&#8217;);
</p>
<p>
  }
</p>
<p>
  脚下留心：循环必须要有出口，不能出现死循环。
</p>
<p>
  思考：在一个循环了n次的循环中，初始值执行了几次？条件执行了几次？增量执行了几次？
</p>
<p>
  答：初始值1次，条件n+1次，增量n次
</p>
<p>
  for循环括号中可以放多个表达式
</p>
<p><img loading="lazy" decoding="async" width="776" height="140" src="/wp-content/uploads/2018/05/word-image-345.png" class="wp-image-382" srcset="/wp-content/uploads/2018/05/word-image-345.png 776w, /wp-content/uploads/2018/05/word-image-345-300x54.png 300w, /wp-content/uploads/2018/05/word-image-345-768x139.png 768w" sizes="(max-width: 776px) 100vw, 776px" /></p>
<h3>while循环</h3>
<p>
  语法：
</p>
<p>
  while(条件){
</p>
<p>
  	//代码
</p>
<p>
  }
</p>
<p>
  只要条件为true，就一直循环，一直循环到条件为false
</p>
<p>
  简单的例题
</p>
<p><img loading="lazy" decoding="async" width="793" height="139" src="/wp-content/uploads/2018/05/word-image-346.png" class="wp-image-383" srcset="/wp-content/uploads/2018/05/word-image-346.png 793w, /wp-content/uploads/2018/05/word-image-346-300x53.png 300w, /wp-content/uploads/2018/05/word-image-346-768x135.png 768w" sizes="(max-width: 793px) 100vw, 793px" /></p>
<p>
  多学一招：如果for和while的循环体就一句代码，大括号可以省略。
</p>
<h3>do-while</h3>
<p>
  语法：
</p>
<p>
  do
</p>
<p>
  {
</p>
<p>
  	//循环体
</p>
<p>
  }while(条件)
</p>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="648" height="188" src="/wp-content/uploads/2018/05/word-image-347.png" class="wp-image-384" srcset="/wp-content/uploads/2018/05/word-image-347.png 648w, /wp-content/uploads/2018/05/word-image-347-300x87.png 300w" sizes="(max-width: 648px) 100vw, 648px" /></p>
<p>
  可以更改成如下：
</p>
<p><img loading="lazy" decoding="async" width="652" height="162" src="/wp-content/uploads/2018/05/word-image-348.png" class="wp-image-385" srcset="/wp-content/uploads/2018/05/word-image-348.png 652w, /wp-content/uploads/2018/05/word-image-348-300x75.png 300w" sizes="(max-width: 652px) 100vw, 652px" /></p>
<p>
  也可以更改如下：
</p>
<p><img loading="lazy" decoding="async" width="677" height="166" src="/wp-content/uploads/2018/05/word-image-349.png" class="wp-image-386" srcset="/wp-content/uploads/2018/05/word-image-349.png 677w, /wp-content/uploads/2018/05/word-image-349-300x74.png 300w" sizes="(max-width: 677px) 100vw, 677px" /></p>
<h3>for-in循环</h3>
<p>
  for-in循环用了遍历数组和对象
</p>
<p>
  语法：
</p>
<p>
  for(变量 in 数组){
</p>
<p>
  	//循环体
</p>
<p>
  }
</p>
<p>
  脚下留心：变量保存的不是数组中的值，而是数组值的下标
</p>
<p>
  例题：
</p>
<p><img loading="lazy" decoding="async" width="551" height="139" src="/wp-content/uploads/2018/05/word-image-350.png" class="wp-image-387" srcset="/wp-content/uploads/2018/05/word-image-350.png 551w, /wp-content/uploads/2018/05/word-image-350-300x76.png 300w" sizes="(max-width: 551px) 100vw, 551px" /></p>
<h3>例题（打印金字塔直线）</h3>
<ol>
<li>
  代码
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  for(var i=20;i&lt;=780;i+=40){
</p>
<p>
  	document.write(&#8216;&lt;hr width=&#8221;&#8216;+i+&#8217;px&#8221;&gt;&#8217;);
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<ol>
<li>
  拼接后的字符串
</li>
</ol>
<p><img loading="lazy" decoding="async" width="335" height="63" src="/wp-content/uploads/2018/05/word-image-351.png" class="wp-image-388" srcset="/wp-content/uploads/2018/05/word-image-351.png 335w, /wp-content/uploads/2018/05/word-image-351-300x56.png 300w" sizes="(max-width: 335px) 100vw, 335px" /></p>
<ol>
<li>
  运行结果
</li>
</ol>
<p><img loading="lazy" decoding="async" width="336" height="75" src="/wp-content/uploads/2018/05/word-image-352.png" class="wp-image-389" srcset="/wp-content/uploads/2018/05/word-image-352.png 336w, /wp-content/uploads/2018/05/word-image-352-300x67.png 300w" sizes="(max-width: 336px) 100vw, 336px" /></p>
<h3>例题（遍历一维数组）</h3>
<p><img loading="lazy" decoding="async" width="660" height="142" src="/wp-content/uploads/2018/05/word-image-353.png" class="wp-image-390" srcset="/wp-content/uploads/2018/05/word-image-353.png 660w, /wp-content/uploads/2018/05/word-image-353-300x65.png 300w" sizes="(max-width: 660px) 100vw, 660px" /></p>
<p>
  脚下留心：数组的长度是4，下标最大值是3，因为下标是从0开始的。
</p>
<p>
  在上面的例题中，stu.length执行了n+1次，效率低了，其实stu.length只要执行一次就可以。
</p>
<p><img loading="lazy" decoding="async" width="762" height="78" src="/wp-content/uploads/2018/05/word-image-354.png" class="wp-image-391" srcset="/wp-content/uploads/2018/05/word-image-354.png 762w, /wp-content/uploads/2018/05/word-image-354-300x31.png 300w" sizes="(max-width: 762px) 100vw, 762px" /></p>
<h3>例题（求数组中的最大值）</h3>
<p>
  思路：声明一个变量（num）用来保存最大值，首先假设第0个数据是最大的，然后从第一个元素开始依次和num比较，如果有个数大于num,就将这个数付给num，这样就保证num中的数据肯定是最大的。
</p>
<p>
  实现代码：
</p>
<p><img loading="lazy" decoding="async" width="823" height="236" src="/wp-content/uploads/2018/05/word-image-355.png" class="wp-image-392" srcset="/wp-content/uploads/2018/05/word-image-355.png 823w, /wp-content/uploads/2018/05/word-image-355-300x86.png 300w, /wp-content/uploads/2018/05/word-image-355-768x220.png 768w" sizes="(max-width: 823px) 100vw, 823px" /></p>
<h3>例题：(求数组的平均值)</h3>
<p>
  思路：声明一个变量（sum）用来保存数组的和，然后依次从第0个元素依次向后加，每次加的和都付给sum。
</p>
<p><img loading="lazy" decoding="async" width="896" height="145" src="/wp-content/uploads/2018/05/word-image-356.png" class="wp-image-393" srcset="/wp-content/uploads/2018/05/word-image-356.png 896w, /wp-content/uploads/2018/05/word-image-356-300x49.png 300w, /wp-content/uploads/2018/05/word-image-356-768x124.png 768w" sizes="(max-width: 896px) 100vw, 896px" /></p>
<p>
  分析
</p>
<p>
  i值 			sum值
</p>
<p>
  0			score[0]
</p>
<p>
  1			score[0]+score[1]
</p>
<p>
  2			score[0]+score[1]+score[2]
</p>
<p>
  3			score[0]+score[1]+score[2]+score[3]
</p>
<p>
  4			score[0]+score[1]+score[2]+score[3]+score[4]
</p>
<h2>跳转语句</h2>
<ol>
<li>
  break（中断）：	中断循环
</li>
<li>
  continue（继续）：中断当前循环，进入下一个循环
</li>
</ol>
<p>
  例题一：
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  for(var i=1;i&lt;=10;i++){
</p>
<p>
  	if(i==5)		//i==5的时候中断循环，输出4句
</p>
<p>
  		break;		//中断循环
</p>
<p>
  	document.write(i+&#8217;锄禾日当午&lt;br&gt;&#8217;);
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p><img loading="lazy" decoding="async" width="106" height="78" src="/wp-content/uploads/2018/05/word-image-357.png" class="wp-image-394" /></p>
<p>
  例题二：
</p>
<p><img loading="lazy" decoding="async" width="758" height="192" src="/wp-content/uploads/2018/05/word-image-358.png" class="wp-image-395" srcset="/wp-content/uploads/2018/05/word-image-358.png 758w, /wp-content/uploads/2018/05/word-image-358-300x76.png 300w" sizes="(max-width: 758px) 100vw, 758px" /></p>
<h2>总结流程控制语句的分类</h2>
<ol>
<li>
  判断语句</p>
<ol>
<li>
    if				单分支
  </li>
<li>
    if-else		双分支
  </li>
<li>
    else if		多分支
  </li>
<li>
    switch-case	多路选择，多路判定
  </li>
</ol>
</li>
<li>
  循环语句</p>
<ol>
<li>
    for
  </li>
<li>
    while
  </li>
<li>
    do-whlie
  </li>
<li>
    for-in			就是用来遍历数组和对象
  </li>
</ol>
</li>
<li>
  跳转语句</p>
<ol>
<li>
    break			中断循环
  </li>
<li>
    continue		跳出当前循环，进入下一个循环
  </li>
</ol>
</li>
</ol>
<p>
  思考：for、while、do-while的区别？
</p>
<p>
  答：
</p>
<ol>
<li>
  这三种循环是相通的，相互可以替代。
</li>
<li>
  如果明确知道循环多少次首选for循环,while和do-while用于循环到条件不成立为止。
</li>
<li>
  While是先判断再执行，do-while先执行再判断
</li>
<li>
  While条件不成立就不执行，do-while条件不成立也要执行一次。
</li>
</ol>
<h2>循环的例题</h2>
<h3>例题一：打印埃及图像</h3>
<p>
  每个字母对应一个埃及图像，输入n或N退出
</p>
<p>
  do-while实现（首选）
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  body{
</p>
<p>
  	font-family:Webdings;
</p>
<p>
  	font-size:80px;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  do{
</p>
<p>
  	var str=prompt(&#8216;请输入一个字符，输入n或N退出&#8217;,&#8221;);
</p>
<p>
  	if(str==&#8217;n&#8217; || str==&#8217;N&#8217;)
</p>
<p>
  		break;
</p>
<p>
  	document.write(str);
</p>
<p>
  }while(str!=&#8217;n&#8217; &amp;&amp; str!=&#8217;N&#8217;);
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  while循环实现
</p>
<p>
  var str=prompt(&#8216;请输入一个字符，输入n或N退出&#8217;,&#8221;);
</p>
<p>
  while(str!=&#8217;n&#8217; &amp;&amp; str!=&#8217;N&#8217;){
</p>
<p>
  	document.write(str);
</p>
<p>
  	str=prompt(&#8216;请输入一个字符，输入n或N退出&#8217;,&#8221;);
</p>
<p>
  }
</p>
<p>
  for循环实现
</p>
<p>
  for(;;){
</p>
<p>
  	var str=prompt(&#8216;请输入一个字符，输入n或N退出&#8217;,&#8221;);
</p>
<p>
  	if(str==&#8217;n&#8217; || str==&#8217;N&#8217;)
</p>
<p>
  		break;
</p>
<p>
  	document.write(str);
</p>
<p>
  }
</p>
<h3>例题二：从1加到100</h3>
<p>
  for循环实现
</p>
<p><img loading="lazy" decoding="async" width="703" height="93" src="/wp-content/uploads/2018/05/word-image-359.png" class="wp-image-396" srcset="/wp-content/uploads/2018/05/word-image-359.png 703w, /wp-content/uploads/2018/05/word-image-359-300x40.png 300w" sizes="(max-width: 703px) 100vw, 703px" /></p>
<p>
  分析
</p>
<p><img loading="lazy" decoding="async" width="382" height="163" src="/wp-content/uploads/2018/05/word-image-360.png" class="wp-image-397" srcset="/wp-content/uploads/2018/05/word-image-360.png 382w, /wp-content/uploads/2018/05/word-image-360-300x128.png 300w" sizes="(max-width: 382px) 100vw, 382px" /></p>
<p>
  While循环实现
</p>
<p><img loading="lazy" decoding="async" width="706" height="103" src="/wp-content/uploads/2018/05/word-image-361.png" class="wp-image-398" srcset="/wp-content/uploads/2018/05/word-image-361.png 706w, /wp-content/uploads/2018/05/word-image-361-300x44.png 300w" sizes="(max-width: 706px) 100vw, 706px" /></p>
<p>
  Do-while循环实现
</p>
<p><img loading="lazy" decoding="async" width="683" height="115" src="/wp-content/uploads/2018/05/word-image-362.png" class="wp-image-399" srcset="/wp-content/uploads/2018/05/word-image-362.png 683w, /wp-content/uploads/2018/05/word-image-362-300x51.png 300w" sizes="(max-width: 683px) 100vw, 683px" /></p>
<h3>例题三：（自动分行）</h3>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  	table{
</p>
<p>
  		width: 780px;
</p>
<p>
  		margin: auto;
</p>
<p>
  	}
</p>
<p>
  	table,td{
</p>
<p>
  		border: #000 solid 1px;
</p>
<p>
  		border-collapse: collapse;  /*collapse:塌陷*/
</p>
<p>
  	}
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;table&gt;
</p>
<p>
  &lt;tr&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  	for(var i=1;i&lt;=100;i++){
</p>
<p>
  		document.write(&#8216;&lt;td&gt;&lt;img src=&#8221;images/&#8217;+i+&#8217;.bmp&#8221;/&gt;&lt;/td&gt;&#8217;);
</p>
<p>
  		if(i%10==0)	//一行放10个
</p>
<p>
  			document.write(&#8216;&lt;/tr&gt;&lt;tr&gt;&#8217;);
</p>
<p>
  	}
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/tr&gt;
</p>
<p>
  &lt;/table&gt;
</p>
<p><img loading="lazy" decoding="async" width="794" height="479" src="/wp-content/uploads/2018/05/word-image-363.png" class="wp-image-400" srcset="/wp-content/uploads/2018/05/word-image-363.png 794w, /wp-content/uploads/2018/05/word-image-363-300x181.png 300w, /wp-content/uploads/2018/05/word-image-363-768x463.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></p>
<h2>多重循环</h2>
<p>
  两重以上称为多重循环，最常用的就是两重循环
</p>
<h3>例题（打印阶梯数字）</h3>
<p><img loading="lazy" decoding="async" width="605" height="185" src="/wp-content/uploads/2018/05/word-image-364.png" class="wp-image-401" srcset="/wp-content/uploads/2018/05/word-image-364.png 605w, /wp-content/uploads/2018/05/word-image-364-300x92.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></p>
<h3>例题（遍历二维数组）</h3>
<p>
  分析：
</p>
<p><img loading="lazy" decoding="async" width="886" height="143" src="/wp-content/uploads/2018/05/word-image-365.png" class="wp-image-402" srcset="/wp-content/uploads/2018/05/word-image-365.png 886w, /wp-content/uploads/2018/05/word-image-365-300x48.png 300w, /wp-content/uploads/2018/05/word-image-365-768x124.png 768w" sizes="(max-width: 886px) 100vw, 886px" /></p>
<p>
  代码：
</p>
<p><img loading="lazy" decoding="async" width="654" height="257" src="/wp-content/uploads/2018/05/word-image-366.png" class="wp-image-403" srcset="/wp-content/uploads/2018/05/word-image-366.png 654w, /wp-content/uploads/2018/05/word-image-366-300x118.png 300w" sizes="(max-width: 654px) 100vw, 654px" /></p>
<h2>作业</h2>
<ol>
<li>
  去除字符串中的空格
</li>
<li>
  九九乘法表
</li>
<li>
  打印水仙花数（三位数abc  a<sup>3</sup>+b<sup>3</sup>+c<sup>3</sup>=abc）
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/377.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS初级（四）事件、 传值与引用、 函数类型、 匿名函数、 转义字符</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/405.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/405.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Thu, 17 May 2018 14:13:04 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[事件]]></category>
		<category><![CDATA[传值与引用]]></category>
		<category><![CDATA[函数类型]]></category>
		<category><![CDATA[匿名函数]]></category>
		<category><![CDATA[转义字符]]></category>
		<guid isPermaLink="false">/?p=405</guid>

					<description><![CDATA[回顾 for for(初始值;条件;增量){ //循环体 } while while(条件){ //循环体 } [&#8230;]]]></description>
										<content:encoded><![CDATA[</p>
<h2>回顾</h2>
<ol>
<li>
  for
</li>
</ol>
<p>
  for(初始值;条件;增量){
</p>
<p>
  	//循环体
</p>
<p>
  }
</p>
<ol>
<li>
  while
</li>
</ol>
<p>
  while(条件){
</p>
<p>
  	//循环体
</p>
<p>
  }
</p>
<ol>
<li>
  do-while
</li>
</ol>
<p>
  do{
</p>
<p>
  	//循环体
</p>
<p>
  }while(条件)
</p>
<ol>
<li>
  for-in
</li>
</ol>
<p>
  for(var 变量 in 数组){
</p>
<p>
  	//循环体
</p>
<p>
  }
</p>
<ol>
<li>
  注意：切记不能出现死循环
</li>
<li>
  跳转语句</p>
<ol>
<li>
    Break：中断循环
  </li>
<li>
    Continue：跳出当前循环，进入下一个循环
  </li>
</ol>
</li>
</ol>
<h2>函数</h2>
<ol>
<li>
  函数就是代码块，可以多次调用，很容易实现模块化编程。
</li>
<li>
  函数也叫方法（其实函数和方法有一点点的区别，在面向对象中去讲解，目前我们认为他们是一样的）。
</li>
<li>
  函数分为预定义函数和自定义函数
</li>
<li>
  自定义函数的语法
</li>
</ol>
<p>
  function 函数名([参数…]){
</p>
<p>
  	//函数体
</p>
<p>
  }
</p>
<ol>
<li>
  参数分为形式参数（形参）和实际参数（实参）。形参只起一个形式的作用，没有具体的值，只是告诉调用者调用的时候传递几个参数，在定义函数的时候使用。实际参数是传递给函数的具体的值，在调用函数的时候使用。
</li>
</ol>
<p><img loading="lazy" decoding="async" width="636" height="71" src="/wp-content/uploads/2018/05/word-image-368.png" class="wp-image-407" srcset="/wp-content/uploads/2018/05/word-image-368.png 636w, /wp-content/uploads/2018/05/word-image-368-300x33.png 300w" sizes="(max-width: 636px) 100vw, 636px" /></p>
<ol>
<li>
  通过函数名来调用函数
</li>
</ol>
<h3>函数的预加载</h3>
<p>
  函数有预编译（预加载）的过程，可以实现调用在前，声明再后。在编译的时候先把函数编译好放在内存中，在执行JS的时候函数其实已经编译好了，所以直接调用就可以了。
</p>
<p><img loading="lazy" decoding="async" width="539" height="94" src="/wp-content/uploads/2018/05/word-image-369.png" class="wp-image-408" srcset="/wp-content/uploads/2018/05/word-image-369.png 539w, /wp-content/uploads/2018/05/word-image-369-300x52.png 300w" sizes="(max-width: 539px) 100vw, 539px" /></p>
<p>
  多学一招：不只是函数可以预加载，只要先声明的都可以预加载。
</p>
<p><img loading="lazy" decoding="async" width="937" height="56" src="/wp-content/uploads/2018/05/word-image-370.png" class="wp-image-409" srcset="/wp-content/uploads/2018/05/word-image-370.png 937w, /wp-content/uploads/2018/05/word-image-370-300x18.png 300w, /wp-content/uploads/2018/05/word-image-370-768x46.png 768w" sizes="(max-width: 937px) 100vw, 937px" /></p>
<p><strong>提醒一下：在有的资料上也说变量不能预加载，原因是只是声明了空间，并没有将值加载进入。有的资料上称为“预编译”。</strong>
</p>
<h3>思考：形参和实参个数不一样会怎么样？</h3>
<p><img loading="lazy" decoding="async" width="718" height="198" src="/wp-content/uploads/2018/05/word-image-371.png" class="wp-image-410" srcset="/wp-content/uploads/2018/05/word-image-371.png 718w, /wp-content/uploads/2018/05/word-image-371-300x83.png 300w" sizes="(max-width: 718px) 100vw, 718px" /></p>
<p>
  总结：
</p>
<ol>
<li>
  少传递的参数是undefined
</li>
<li>
  多传递的参数函数中接受不到。
</li>
</ol>
<h3>函数的调用</h3>
<p>
  函数是通过函数名来调用的
</p>
<p>
  一般函数的调用要结合“事件”来调用
</p>
<p>
  调用的方式：
</p>
<p>
  方法一（通过HTML标签调用）：&lt;标签 事件=”函数名()”/&gt;
</p>
<p>
  方法二（JS调用）：对象.事件=函数
</p>
<p>
  方法一：
</p>
<p><img loading="lazy" decoding="async" width="731" height="141" src="/wp-content/uploads/2018/05/word-image-372.png" class="wp-image-411" srcset="/wp-content/uploads/2018/05/word-image-372.png 731w, /wp-content/uploads/2018/05/word-image-372-300x58.png 300w" sizes="(max-width: 731px) 100vw, 731px" /></p>
<p>
  方法二：
</p>
<p><img loading="lazy" decoding="async" width="598" height="167" src="/wp-content/uploads/2018/05/word-image-373.png" class="wp-image-412" srcset="/wp-content/uploads/2018/05/word-image-373.png 598w, /wp-content/uploads/2018/05/word-image-373-300x84.png 300w" sizes="(max-width: 598px) 100vw, 598px" /></p>
<h2>事件</h2>
<h3>事件和事件处理</h3>
<p>
  事件：以“on”开头的都是事件，每个事件后面都有“事件处理”，事件处理一般是由函数来担当。
</p>
<p>
  &lt;标签 事件=’事件处理[函数]’&gt;
</p>
<h3>常用的事件</h3>
<ol>
<li>
  onclick：当鼠标点击的时候
</li>
<li>
  onfocus：当获得焦点的时候
</li>
<li>
  onblur：当失去焦点的时候
</li>
<li>
  onchange：发生改变的时候
</li>
<li>
  onkeydown：当键盘按键按下去的时候
</li>
<li>
  onkeyup：当键盘的键抬起的时候
</li>
<li>
  onmouseover：当鼠标滑过的时候
</li>
<li>
  onload：当加载的时候
</li>
</ol>
<h3>例题</h3>
<ol>
<li>
  字符串.substr(start [, length ])
</li>
<li>
  字符串.substring(start, end)
</li>
</ol>
<p><img loading="lazy" decoding="async" width="623" height="98" src="/wp-content/uploads/2018/05/word-image-374.png" class="wp-image-413" srcset="/wp-content/uploads/2018/05/word-image-374.png 623w, /wp-content/uploads/2018/05/word-image-374-300x47.png 300w" sizes="(max-width: 623px) 100vw, 623px" /></p>
<p>
  代码如下
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function fun_focus(){	//得到焦点
</p>
<p>
  	if(frm.card.value==&#8217;请注意格式:10XXXXXX&#8217;)
</p>
<p>
  		frm.card.value=&#8221;;
</p>
<p>
  }
</p>
<p>
  function fun_blur(){	//失去焦点
</p>
<p>
  	if(frm.card.value==&#8221;)
</p>
<p>
  		frm.card.value=&#8217;请注意格式:10XXXXXX&#8217;;
</p>
<p>
  	else{	//判断输入值的格式是否正确
</p>
<p>
  		var card=frm.card.value;
</p>
<p>
  		if(card.length!=8){	//卡号不是8位
</p>
<p>
  			alert(&#8216;卡号是8位的,你输入的是&#8217;+card.length+&#8217;位&#8217;);
</p>
<p>
  		}else{
</p>
<p>
  			if(card.substr(0,2)!=&#8217;10&#8217;){
</p>
<p>
  				alert(&#8216;卡号必须是&#8221;10&#8243;开头&#8217;);
</p>
<p>
  			}else{
</p>
<p>
  				alert(&#8216;卡号正确&#8217;);
</p>
<p>
  			}
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;form name=&#8217;frm&#8217; action=&#8221;&#8221;&gt;
</p>
<p>
  	卡号：&lt;input type=&#8221;text&#8221; name=&#8221;card&#8221; value=&#8217;请注意格式:10XXXXXX&#8217; onfocus=&#8217;fun_focus()&#8217; onblur=&#8217;fun_blur()&#8217;&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p><img loading="lazy" decoding="async" width="222" height="30" src="/wp-content/uploads/2018/05/word-image-375.png" class="wp-image-414" srcset="/wp-content/uploads/2018/05/word-image-375.png 222w, /wp-content/uploads/2018/05/word-image-375-220x30.png 220w" sizes="(max-width: 222px) 100vw, 222px" /></p>
<h2>匿名函数</h2>
<p>
  没有名字的函数，
</p>
<p>
  语法
</p>
<p>
  function(){
</p>
<p>
  	//匿名函数
</p>
<p>
  }
</p>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="773" height="144" src="/wp-content/uploads/2018/05/word-image-376.png" class="wp-image-415" srcset="/wp-content/uploads/2018/05/word-image-376.png 773w, /wp-content/uploads/2018/05/word-image-376-300x56.png 300w, /wp-content/uploads/2018/05/word-image-376-768x143.png 768w" sizes="(max-width: 773px) 100vw, 773px" /></p>
<h3>匿名函数自调用</h3>
<p><img loading="lazy" decoding="async" width="864" height="114" src="/wp-content/uploads/2018/05/word-image-377.png" class="wp-image-416" srcset="/wp-content/uploads/2018/05/word-image-377.png 864w, /wp-content/uploads/2018/05/word-image-377-300x40.png 300w, /wp-content/uploads/2018/05/word-image-377-768x101.png 768w" sizes="(max-width: 864px) 100vw, 864px" /></p>
<h3>匿名函数的使用</h3>
<p><img loading="lazy" decoding="async" width="797" height="211" src="/wp-content/uploads/2018/05/word-image-378.png" class="wp-image-417" srcset="/wp-content/uploads/2018/05/word-image-378.png 797w, /wp-content/uploads/2018/05/word-image-378-300x79.png 300w, /wp-content/uploads/2018/05/word-image-378-768x203.png 768w" sizes="(max-width: 797px) 100vw, 797px" /></p>
<h2>return</h2>
<p>
  作用：
</p>
<ol>
<li>
  作用一：终止函数的执行
</li>
</ol>
<p><img loading="lazy" decoding="async" width="754" height="188" src="/wp-content/uploads/2018/05/word-image-379.png" class="wp-image-418" srcset="/wp-content/uploads/2018/05/word-image-379.png 754w, /wp-content/uploads/2018/05/word-image-379-300x75.png 300w" sizes="(max-width: 754px) 100vw, 754px" /></p>
<ol>
<li>
  作用二：返回数据
</li>
</ol>
<p><img loading="lazy" decoding="async" width="626" height="184" src="/wp-content/uploads/2018/05/word-image-380.png" class="wp-image-419" srcset="/wp-content/uploads/2018/05/word-image-380.png 626w, /wp-content/uploads/2018/05/word-image-380-300x88.png 300w" sizes="(max-width: 626px) 100vw, 626px" /></p>
<p>
  脚下留心：如果要返回多个数据，将多个数据放到数组中返回，不能写多个return;
</p>
<p><img loading="lazy" decoding="async" width="577" height="72" src="/wp-content/uploads/2018/05/word-image-381.png" class="wp-image-420" srcset="/wp-content/uploads/2018/05/word-image-381.png 577w, /wp-content/uploads/2018/05/word-image-381-300x37.png 300w" sizes="(max-width: 577px) 100vw, 577px" /></p>
<p>
  应该这样写：
</p>
<p><img loading="lazy" decoding="async" width="237" height="26" src="/wp-content/uploads/2018/05/word-image-382.png" class="wp-image-421" /></p>
<h2>使用类型函数进行类型的获取或转换</h2>
<p>
  在计算机内部，所有的数据都可以转成布尔值。转换规律：
</p>
<p>
  1、数字和布尔值转换规律： 0为false，非0为true
</p>
<p>
  2、字符串和布尔值转换规律：空字符串为false，非空字符串为true
</p>
<p>
  我们也可以通过类型函数显式转换
</p>
<p>
  String()：转成字符串
</p>
<p>
  Boolean()：转成布尔型
</p>
<p>
  Number()：转成数字型
</p>
<p>
  typeof 获取数据类型
</p>
<p><img loading="lazy" decoding="async" width="651" height="209" src="/wp-content/uploads/2018/05/word-image-383.png" class="wp-image-422" srcset="/wp-content/uploads/2018/05/word-image-383.png 651w, /wp-content/uploads/2018/05/word-image-383-300x96.png 300w" sizes="(max-width: 651px) 100vw, 651px" /></p>
<h2>值传递和引用传递</h2>
<p>
  函数中参数的传递有两种方式，值传递，引用传递（传递地址）
</p>
<p>
  分析如下代码执行过程（值传递）
</p>
<p><img loading="lazy" decoding="async" width="520" height="96" src="/wp-content/uploads/2018/05/word-image-384.png" class="wp-image-423" srcset="/wp-content/uploads/2018/05/word-image-384.png 520w, /wp-content/uploads/2018/05/word-image-384-300x55.png 300w" sizes="(max-width: 520px) 100vw, 520px" /></p>
<p>
  第一步：将保存10的空间的地址付给x。（x保存的是10的地址）
</p>
<p>
  第二步：将10复制一份，将10的副本的地址付给y
</p>
<p><img loading="lazy" decoding="async" width="571" height="190" src="/wp-content/uploads/2018/05/word-image-385.png" class="wp-image-424" srcset="/wp-content/uploads/2018/05/word-image-385.png 571w, /wp-content/uploads/2018/05/word-image-385-300x100.png 300w" sizes="(max-width: 571px) 100vw, 571px" /></p>
<p>
  分析如下代码执行过程（地址传递）
</p>
<p><img loading="lazy" decoding="async" width="492" height="139" src="/wp-content/uploads/2018/05/word-image-386.png" class="wp-image-425" srcset="/wp-content/uploads/2018/05/word-image-386.png 492w, /wp-content/uploads/2018/05/word-image-386-300x85.png 300w" sizes="(max-width: 492px) 100vw, 492px" /><br />
<img loading="lazy" decoding="async" width="577" height="192" src="/wp-content/uploads/2018/05/word-image-387.png" class="wp-image-426" srcset="/wp-content/uploads/2018/05/word-image-387.png 577w, /wp-content/uploads/2018/05/word-image-387-300x100.png 300w" sizes="(max-width: 577px) 100vw, 577px" /></p>
<p>
  总结：只要是基本数据类型都是值传递，复杂类型都是地址传递。
</p>
<h2>传递不确定参数</h2>
<p>
  通过arguments关键字保存传递的参数数组
</p>
<p><img loading="lazy" decoding="async" width="664" height="288" src="/wp-content/uploads/2018/05/word-image-388.png" class="wp-image-427" srcset="/wp-content/uploads/2018/05/word-image-388.png 664w, /wp-content/uploads/2018/05/word-image-388-300x130.png 300w" sizes="(max-width: 664px) 100vw, 664px" /></p>
<h2>变量作用域</h2>
<p>
  变量按照作用的范围不一样分为
</p>
<ol>
<li>
  全局变量：在整个页面使用的变量
</li>
<li>
  局部变量：在函数内部使用的变量
</li>
</ol>
<p><img loading="lazy" decoding="async" width="814" height="195" src="/wp-content/uploads/2018/05/word-image-389.png" class="wp-image-428" srcset="/wp-content/uploads/2018/05/word-image-389.png 814w, /wp-content/uploads/2018/05/word-image-389-300x72.png 300w, /wp-content/uploads/2018/05/word-image-389-768x184.png 768w" sizes="(max-width: 814px) 100vw, 814px" /></p>
<p>
  思考：隐式声明局部变量
</p>
<p><img loading="lazy" decoding="async" width="649" height="199" src="/wp-content/uploads/2018/05/word-image-390.png" class="wp-image-429" srcset="/wp-content/uploads/2018/05/word-image-390.png 649w, /wp-content/uploads/2018/05/word-image-390-300x92.png 300w" sizes="(max-width: 649px) 100vw, 649px" /></p>
<p>
  总结：在函数中，通过var声明的变量是局部变量，不用var声明的变量在全局变量。
</p>
<h2>JS嵌入到网页的方法</h2>
<p>
  方法一：内嵌引入，直接将函数体写到事件处理中
</p>
<p><img loading="lazy" decoding="async" width="680" height="56" src="/wp-content/uploads/2018/05/word-image-391.png" class="wp-image-430" srcset="/wp-content/uploads/2018/05/word-image-391.png 680w, /wp-content/uploads/2018/05/word-image-391-300x25.png 300w" sizes="(max-width: 680px) 100vw, 680px" /><br />
<img loading="lazy" decoding="async" width="1050" height="41" src="/wp-content/uploads/2018/05/word-image-392.png" class="wp-image-431" srcset="/wp-content/uploads/2018/05/word-image-392.png 1050w, /wp-content/uploads/2018/05/word-image-392-300x12.png 300w, /wp-content/uploads/2018/05/word-image-392-768x30.png 768w, /wp-content/uploads/2018/05/word-image-392-1024x40.png 1024w" sizes="(max-width: 1050px) 100vw, 1050px" /></p>
<p>
  方法二：内部引入：在HTML页面的内部通过&lt;script&gt;开头，&lt;/script&gt;结束
</p>
<p><img loading="lazy" decoding="async" width="347" height="60" src="/wp-content/uploads/2018/05/word-image-393.png" class="wp-image-432" srcset="/wp-content/uploads/2018/05/word-image-393.png 347w, /wp-content/uploads/2018/05/word-image-393-300x52.png 300w" sizes="(max-width: 347px) 100vw, 347px" /></p>
<p>
  方法三：外部文件引入
</p>
<p>
  第一步：创建JS文件，并在JS文件中写入代码
</p>
<p><img loading="lazy" decoding="async" width="219" height="86" src="/wp-content/uploads/2018/05/word-image-394.png" class="wp-image-433" /></p>
<p>
  第二步：在HTML中引入外部的JS文件
</p>
<p><img loading="lazy" decoding="async" width="368" height="25" src="/wp-content/uploads/2018/05/word-image-395.png" class="wp-image-434" srcset="/wp-content/uploads/2018/05/word-image-395.png 368w, /wp-content/uploads/2018/05/word-image-395-300x20.png 300w" sizes="(max-width: 368px) 100vw, 368px" /></p>
<h2>具有特殊含义的字符</h2>
<p>
  “”：字符串
</p>
<p>
  ‘’：字符串
</p>
<p>
  JS换行		\n		（new）
</p>
<p>
  JS回车		\r			（return）
</p>
<p>
  制表位：		\t
</p>
<p><img loading="lazy" decoding="async" width="427" height="58" src="/wp-content/uploads/2018/05/word-image-396.png" class="wp-image-435" srcset="/wp-content/uploads/2018/05/word-image-396.png 427w, /wp-content/uploads/2018/05/word-image-396-300x41.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></p>
<h2>转义字符（\）</h2>
<p>
  作用：将具有特殊含义的字符转成普通字符。
</p>
<p><img loading="lazy" decoding="async" width="861" height="144" src="/wp-content/uploads/2018/05/word-image-397.png" class="wp-image-436" srcset="/wp-content/uploads/2018/05/word-image-397.png 861w, /wp-content/uploads/2018/05/word-image-397-300x50.png 300w, /wp-content/uploads/2018/05/word-image-397-768x128.png 768w" sizes="(max-width: 861px) 100vw, 861px" /></p>
<h2>对象</h2>
<p>
  能够了解对象的概念以及对象的分类
</p>
<p>
  对象是属性（变量）和方法（函数）的组合。
</p>
<p>
  调用对象的属性：    对象.属性
</p>
<p>
  调用对象的方法:			对象.方法()
</p>
<h2>JavaScript三类对象</h2>
<ol>
<li>
  HTML对象：就是HTML标签
</li>
<li>
  脚本对象
</li>
<li>
  浏览器对象
</li>
</ol>
<h2>作业题</h2>
<h3>计算器</h3>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function cal(op){
</p>
<p>
  	var num1=frm.num1.value;
</p>
<p>
  	var num2=frm.num2.value;
</p>
<p>
  	if(num1==&#8221; || isNaN(num1) || num2==&#8221; || isNaN(num2))
</p>
<p>
  		return;		//不是数字就终止执行
</p>
<p>
  	num1=parseFloat(num1);	//转换层数字类型
</p>
<p>
  	num2=parseFloat(num2);
</p>
<p>
  	switch(op){
</p>
<p>
  		case &#8216;+&#8217;:
</p>
<p>
  			frm.result.value=num1+num2;
</p>
<p>
  			break;
</p>
<p>
  		case &#8216;-&#8216;:
</p>
<p>
  			frm.result.value=num1-num2;
</p>
<p>
  			break;
</p>
<p>
  		case &#8216;*&#8217;:
</p>
<p>
  			frm.result.value=num1*num2;
</p>
<p>
  			break;
</p>
<p>
  		case &#8216;/&#8217;:
</p>
<p>
  			frm.result.value=num1/num2;
</p>
<p>
  			break;
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;form action=&#8221;&#8221; name=&#8217;frm&#8217;&gt;
</p>
<p>
  第一个数: &lt;input type=&#8221;text&#8221; name=&#8221;num1&#8243; id=&#8221;&#8221;&gt; &lt;br&gt;
</p>
<p>
  第二个数：&lt;input type=&#8221;text&#8221; name=&#8221;num2&#8243; id=&#8221;&#8221;&gt; &lt;br&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221; + &#8221; onclick=&#8221;cal(&#8216;+&#8217;)&#8221;&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221; &#8211; &#8221; onclick=&#8221;cal(&#8216;-&#8216;)&#8221;&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221; * &#8221; onclick=&#8221;cal(&#8216;*&#8217;)&#8221;&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221; / &#8221; onclick=&#8221;cal(&#8216;/&#8217;)&#8221;&gt; &lt;br&gt;
</p>
<p>
  结果：&lt;input type=&#8221;text&#8221; name=&#8221;result&#8221; id=&#8221;&#8221;&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p><img loading="lazy" decoding="async" width="305" height="99" src="/wp-content/uploads/2018/05/word-image-398.png" class="wp-image-437" srcset="/wp-content/uploads/2018/05/word-image-398.png 305w, /wp-content/uploads/2018/05/word-image-398-300x97.png 300w" sizes="(max-width: 305px) 100vw, 305px" /></p>
<h3>去字符串的空格</h3>
<p>
  思路：声明一个变量用来保存结果字符串，遍历循环字符串，如果不是空格就保存到变量中。最后这个变量就是去掉空格的字符串。
</p>
<p><img loading="lazy" decoding="async" width="932" height="408" src="/wp-content/uploads/2018/05/word-image-399.png" class="wp-image-438" srcset="/wp-content/uploads/2018/05/word-image-399.png 932w, /wp-content/uploads/2018/05/word-image-399-300x131.png 300w, /wp-content/uploads/2018/05/word-image-399-768x336.png 768w" sizes="(max-width: 932px) 100vw, 932px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/405.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS初级（五）BOM、 DOM、 定时器、 对象、 时钟周期</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/440.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/440.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Thu, 17 May 2018 14:12:06 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[BOM]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[定时器]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[时钟周期]]></category>
		<guid isPermaLink="false">/?p=440</guid>

					<description><![CDATA[回顾 函数预加载：在页面编译的时候就将函数编译到内存中，就可以先调用，再定义。 通过arguments关键字可 [&#8230;]]]></description>
										<content:encoded><![CDATA[</p>
<h2>回顾</h2>
<ol>
<li>
  函数预加载：在页面编译的时候就将函数编译到内存中，就可以先调用，再定义。
</li>
<li>
  通过arguments关键字可以实现传递的参数个数不一样
</li>
<li>
  事件：以on开头的都是事件
</li>
<li>
  事件后面肯定有事件处理程序，事件处理程序一般都是函数
</li>
<li>
  函数调用</p>
<ol>
<li>
    方法一：&lt;标签 事件=’函数()’&gt;
  </li>
<li>
    方法二：对象.事件=函数
  </li>
</ol>
</li>
<li>
  匿名函数：没有名字的函数
</li>
<li>
  匿名函数自调用   (匿名函数)();
</li>
<li>
  return</p>
<ol>
<li>
    作用一：终止函数的执行
  </li>
<li>
    作用二：从函数内部将值返回到调用处
  </li>
</ol>
</li>
<li>
  变量的作用域</p>
<ol>
<li>
    全局变量：供整个页面使用
  </li>
<li>
    局部变量：在函数内部使用变量，注意在函数内部通过var声明的变量是局部变量，不通过var声明的是全局变量。
  </li>
</ol>
</li>
<li>
  Js嵌入到页面的方法</p>
<ol>
<li>
    方法一：直接写在事件处理程序中 &lt;p onclick=’alert(‘锄禾日当午’)’&gt;
  </li>
<li>
    方法二：通过&lt;script&gt;开头，&lt;/script&gt;结束嵌套在页面的内部
  </li>
<li>
    方法三：写在页面的外部，通过&lt;script&gt;标记引入到页面内部
  </li>
</ol>
</li>
<li>
  特殊含义的字符</p>
<ol>
<li>
    \r：回车
  </li>
<li>
    \n：换行
  </li>
<li>
    \t：制表位
  </li>
</ol>
</li>
<li>
  转义字符：\  将具有特殊含义的字符转成普通字符
</li>
<li>
  对象：由属性（变量）和方法（函数）组成的组合。</p>
<ol>
<li>
    对象.属性
  </li>
<li>
    对象.方法()
  </li>
</ol>
</li>
</ol>
<h2>对象的分类</h2>
<ol>
<li>
  HTML：就是HTML元素
</li>
<li>
  脚本对象
</li>
<li>
  浏览器对象
</li>
</ol>
<h2>脚本对象</h2>
<h3>Array（数组）</h3>
<p>
  数组也属于对象
</p>
<p><img loading="lazy" decoding="async" width="612" height="52" src="/wp-content/uploads/2018/05/word-image-401.png" class="wp-image-442" srcset="/wp-content/uploads/2018/05/word-image-401.png 612w, /wp-content/uploads/2018/05/word-image-401-300x25.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<p>
  常用的一些方法与属性
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  var stu=new Array(&#8216;tom&#8217;,&#8217;berry&#8217;,&#8217;ketty&#8217;);
</p>
<p>
  document.write(&#8216;排序后:&#8217;+stu.sort()+'&lt;br&gt;&#8217;);		//排序
</p>
<p>
  document.write(&#8216;翻转后:&#8217;+stu.reverse()+'&lt;br&gt;&#8217;);		//反转
</p>
<p>
  document.write(&#8216;连接后：&#8217;+stu.join(&#8216;&gt;&gt;&gt;&#8217;)+'&lt;br&gt;&#8217;)	//将数组元素连接起来
</p>
<p>
  document.write(&#8216;数组长度：&#8217;+stu.length+'&lt;br&gt;&#8217;);		//数组的长度
</p>
<p>
  stu.unshift(&#8216;李白&#8217;);//在数组的前面插入
</p>
<p>
  document.write(&#8216;unshift：&#8217;+stu+'&lt;br&gt;&#8217;);
</p>
<p>
  stu.shift();		//将数组的第一个元素删除
</p>
<p>
  document.write(&#8216;shift：&#8217;+stu+'&lt;br&gt;&#8217;);
</p>
<p>
  stu.push(&#8216;杜甫&#8217;);	//将元素插入到数组的后面
</p>
<p>
  document.write(&#8216;push：&#8217;+stu+'&lt;br&gt;&#8217;);
</p>
<p>
  stu.pop();			//删除数组的最后一个元素
</p>
<p>
  document.write(stu);
</p>
<p>
  &lt;/script&gt;
</p>
<h3>String（字符串）</h3>
<p>
  字符串的声明
</p>
<p>
  方法一：把字符串当成基本类型直接赋值
</p>
<p><img loading="lazy" decoding="async" width="176" height="24" src="/wp-content/uploads/2018/05/word-image-402.png" class="wp-image-443" /></p>
<p>
  方法二：把字符串当成对象来声明
</p>
<p><img loading="lazy" decoding="async" width="804" height="29" src="/wp-content/uploads/2018/05/word-image-403.png" class="wp-image-444" srcset="/wp-content/uploads/2018/05/word-image-403.png 804w, /wp-content/uploads/2018/05/word-image-403-300x11.png 300w, /wp-content/uploads/2018/05/word-image-403-768x28.png 768w" sizes="(max-width: 804px) 100vw, 804px" /></p>
<p>
  字符串是基本类型，在字符串运行的时候会在内存中生成一个临时对象，通过临时对象调用属性和方法
</p>
<ol>
<li>
  截取子字符串   语法： 字符串.substr(开始位置,[截取长度])
</li>
</ol>
<p><img loading="lazy" decoding="async" width="869" height="140" src="/wp-content/uploads/2018/05/word-image-404.png" class="wp-image-445" srcset="/wp-content/uploads/2018/05/word-image-404.png 869w, /wp-content/uploads/2018/05/word-image-404-300x48.png 300w, /wp-content/uploads/2018/05/word-image-404-768x124.png 768w" sizes="(max-width: 869px) 100vw, 869px" /></p>
<ol>
<li>
  截取子字符串   语法：字符串.substring(起始位置，结束位置)
</li>
</ol>
<p><img loading="lazy" decoding="async" width="752" height="107" src="/wp-content/uploads/2018/05/word-image-405.png" class="wp-image-446" srcset="/wp-content/uploads/2018/05/word-image-405.png 752w, /wp-content/uploads/2018/05/word-image-405-300x43.png 300w" sizes="(max-width: 752px) 100vw, 752px" /></p>
<p>
  例题
</p>
<p><img loading="lazy" decoding="async" width="615" height="97" src="/wp-content/uploads/2018/05/word-image-406.png" class="wp-image-447" srcset="/wp-content/uploads/2018/05/word-image-406.png 615w, /wp-content/uploads/2018/05/word-image-406-300x47.png 300w" sizes="(max-width: 615px) 100vw, 615px" /></p>
<ol>
<li>
  indexOf()：返回 <strong>String</strong> 对象内第一次出现子字符串的字符位置
</li>
<li>
  lastIndexOf（）：返回字符串最后出现的位置
</li>
</ol>
<p><img loading="lazy" decoding="async" width="866" height="94" src="/wp-content/uploads/2018/05/word-image-407.png" class="wp-image-448" srcset="/wp-content/uploads/2018/05/word-image-407.png 866w, /wp-content/uploads/2018/05/word-image-407-300x33.png 300w, /wp-content/uploads/2018/05/word-image-407-768x83.png 768w" sizes="(max-width: 866px) 100vw, 866px" /></p>
<ol>
<li>
  toLowerCase()：转成小写
</li>
<li>
  toUpperCase()：转成大写
</li>
</ol>
<p><img loading="lazy" decoding="async" width="665" height="70" src="/wp-content/uploads/2018/05/word-image-408.png" class="wp-image-449" srcset="/wp-content/uploads/2018/05/word-image-408.png 665w, /wp-content/uploads/2018/05/word-image-408-300x32.png 300w" sizes="(max-width: 665px) 100vw, 665px" /></p>
<ol>
<li>
  字符串长度
</li>
</ol>
<p><img loading="lazy" decoding="async" width="579" height="22" src="/wp-content/uploads/2018/05/word-image-409.png" class="wp-image-450" srcset="/wp-content/uploads/2018/05/word-image-409.png 579w, /wp-content/uploads/2018/05/word-image-409-300x11.png 300w" sizes="(max-width: 579px) 100vw, 579px" /></p>
<p>
  多学一招：字符串可以当成字符数组来使用
</p>
<p><img loading="lazy" decoding="async" width="489" height="75" src="/wp-content/uploads/2018/05/word-image-410.png" class="wp-image-451" srcset="/wp-content/uploads/2018/05/word-image-410.png 489w, /wp-content/uploads/2018/05/word-image-410-300x46.png 300w" sizes="(max-width: 489px) 100vw, 489px" /></p>
<h3>Math（数学）</h3>
<p><img loading="lazy" decoding="async" width="943" height="277" src="/wp-content/uploads/2018/05/word-image-411.png" class="wp-image-452" srcset="/wp-content/uploads/2018/05/word-image-411.png 943w, /wp-content/uploads/2018/05/word-image-411-300x88.png 300w, /wp-content/uploads/2018/05/word-image-411-768x226.png 768w" sizes="(max-width: 943px) 100vw, 943px" /></p>
<p>
  例题：产生一个1~100的随机整数
</p>
<p><img loading="lazy" decoding="async" width="763" height="263" src="/wp-content/uploads/2018/05/word-image-412.png" class="wp-image-453" srcset="/wp-content/uploads/2018/05/word-image-412.png 763w, /wp-content/uploads/2018/05/word-image-412-300x103.png 300w" sizes="(max-width: 763px) 100vw, 763px" /></p>
<h3>Date（日期）</h3>
<p><img loading="lazy" decoding="async" width="598" height="128" src="/wp-content/uploads/2018/05/word-image-413.png" class="wp-image-454" srcset="/wp-content/uploads/2018/05/word-image-413.png 598w, /wp-content/uploads/2018/05/word-image-413-300x64.png 300w" sizes="(max-width: 598px) 100vw, 598px" /></p>
<p>
  Date()对象的方法有很多，我们可以把它分为3组
</p>
<p>
  第一组：setXXX：设置时间
</p>
<p>
  第二组：getXXX：获取时间
</p>
<p>
  第三组：toXXX：转化时间格式
</p>
<p>
  例题：获取当前时间
</p>
<p><img loading="lazy" decoding="async" width="854" height="260" src="/wp-content/uploads/2018/05/word-image-414.png" class="wp-image-455" srcset="/wp-content/uploads/2018/05/word-image-414.png 854w, /wp-content/uploads/2018/05/word-image-414-300x91.png 300w, /wp-content/uploads/2018/05/word-image-414-768x234.png 768w" sizes="(max-width: 854px) 100vw, 854px" /><br />
<img loading="lazy" decoding="async" width="1031" height="28" src="/wp-content/uploads/2018/05/word-image-415.png" class="wp-image-456" srcset="/wp-content/uploads/2018/05/word-image-415.png 1031w, /wp-content/uploads/2018/05/word-image-415-300x8.png 300w, /wp-content/uploads/2018/05/word-image-415-768x21.png 768w, /wp-content/uploads/2018/05/word-image-415-1024x28.png 1024w" sizes="(max-width: 1031px) 100vw, 1031px" /></p>
<p>
  例题：转换时间格式
</p>
<p><img loading="lazy" decoding="async" width="949" height="93" src="/wp-content/uploads/2018/05/word-image-416.png" class="wp-image-457" srcset="/wp-content/uploads/2018/05/word-image-416.png 949w, /wp-content/uploads/2018/05/word-image-416-300x29.png 300w, /wp-content/uploads/2018/05/word-image-416-768x75.png 768w" sizes="(max-width: 949px) 100vw, 949px" /><br />
<img loading="lazy" decoding="async" width="199" height="56" src="/wp-content/uploads/2018/05/word-image-417.png" class="wp-image-458" /></p>
<p>
  例题：上月的1号是星期几？
</p>
<p><img loading="lazy" decoding="async" width="941" height="165" src="/wp-content/uploads/2018/05/word-image-418.png" class="wp-image-459" srcset="/wp-content/uploads/2018/05/word-image-418.png 941w, /wp-content/uploads/2018/05/word-image-418-300x53.png 300w, /wp-content/uploads/2018/05/word-image-418-768x135.png 768w" sizes="(max-width: 941px) 100vw, 941px" /></p>
<h2>浏览器对象</h2>
<p><img loading="lazy" decoding="async" width="508" height="194" src="/wp-content/uploads/2018/05/word-image-419.png" class="wp-image-460" srcset="/wp-content/uploads/2018/05/word-image-419.png 508w, /wp-content/uploads/2018/05/word-image-419-300x115.png 300w" sizes="(max-width: 508px) 100vw, 508px" /></p>
<h3>浏览器的分层结构</h3>
<p><img loading="lazy" decoding="async" width="491" height="257" src="/wp-content/uploads/2018/05/word-image-420.png" class="wp-image-461" srcset="/wp-content/uploads/2018/05/word-image-420.png 491w, /wp-content/uploads/2018/05/word-image-420-300x157.png 300w" sizes="(max-width: 491px) 100vw, 491px" /></p>
<h3>window（窗口）</h3>
<p>
  在浏览器对象中最顶层的对象。
</p>
<p><img loading="lazy" decoding="async" width="482" height="135" src="/wp-content/uploads/2018/05/word-image-421.png" class="wp-image-462" srcset="/wp-content/uploads/2018/05/word-image-421.png 482w, /wp-content/uploads/2018/05/word-image-421-300x84.png 300w" sizes="(max-width: 482px) 100vw, 482px" /></p>
<p>
  脚下留心：由于window是最顶层对象，所以window可以省略。
</p>
<h3>document（文档）【重点】</h3>
<ol>
<li>
  window.document.write(‘’)；将字符串输出到浏览器上
</li>
<li>
  document.bgColor=&#8217;#cccccc&#8217;;	//背景色
</li>
<li>
  document.fgColor=&#8217;#FF0000&#8242;;	//前景色
</li>
<li>
  获取网页标签对象（重点）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="951" height="321" src="/wp-content/uploads/2018/05/word-image-422.png" class="wp-image-463" srcset="/wp-content/uploads/2018/05/word-image-422.png 951w, /wp-content/uploads/2018/05/word-image-422-300x101.png 300w, /wp-content/uploads/2018/05/word-image-422-768x259.png 768w" sizes="(max-width: 951px) 100vw, 951px" /></p>
<p>
  例题：标签属性进行取值赋值
</p>
<p>
  &lt;input type=&#8221;text&#8221; id=&#8221;txt&#8221;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  window.onload=function(){
</p>
<p>
  	var oTxt=document.getElementById(&#8216;txt&#8217;);
</p>
<p>
  	oTxt.onblur=function(){
</p>
<p>
  		//alert(oTxt.value);
</p>
<p>
  		//alert(oTxt.type);		//text
</p>
<p>
  		oTxt.type=&#8217;button&#8217;;		//给属性赋值
</p>
<p>
  		oTxt.value=&#8217;确定&#8217;;		//给属性赋值
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  结果：当文本框失去焦点的时候变成按钮
</p>
<h3>history（历史）</h3>
<p>
  back ( ) 方法相当于后退按钮
</p>
<p>
  forward ( ) 方法相当于前进按钮
</p>
<p>
  go (1)代表前进1页，等价于forward( )方法；
</p>
<p>
  go(-1) 代表后退1页，等价于back( )方法；
</p>
<p>
  第一页
</p>
<p>
  当前是第一页
</p>
<p>
  &lt;a href=&#8221;11-history2.html&#8221;&gt;跳转到第二页&lt;/a&gt;
</p>
<p>
  第二页
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function myforward(){
</p>
<p>
  	//history.forward();	//前进一级  等价于
</p>
<p>
  	history.go(1);
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  当前是第二页
</p>
<p>
  &lt;a href=&#8221;11-history3.html&#8221;&gt;跳转到第三页&lt;/a&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;前进一级&#8221; onclick=&#8217;myforward()&#8217;&gt;
</p>
<p>
  第三页
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function myback(){
</p>
<p>
  	//history.back();	//返回上一级，等价于下一句
</p>
<p>
  	history.go(-1);
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  这是第三页&lt;br&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;返回一级&#8221; onclick=&#8217;myback()&#8217;&gt;&lt;br&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;返回两级&#8221; onclick=&#8217;history.go(-2)&#8217;&gt;
</p>
<h3>location（地址）</h3>
<p>
  location对象主要用来做页面的跳转
</p>
<p>
  属性：href——设置或检索完整的 URL 字符串
</p>
<p>
  方法：
</p>
<p>
  assign(&#8220;url&#8221;)：跳转到指定页面
</p>
<p>
  reload()：重新加载当前页面
</p>
<p>
  replace(&#8220;url&#8221;) ：通过加载 URL 指定的文档来替换当前文档
</p>
<p>
  例题：
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function jump1(){
</p>
<p>
  	//通过更改location的属性来跳转
</p>
<p>
  	alert(location.href);	//当前的url地址
</p>
<p>
  	location.href=&#8217;4-生成1~100的随机整数.html&#8217;;
</p>
<p>
  }
</p>
<p>
  function jump2(){
</p>
<p>
  	//通过方法来跳转
</p>
<p>
  	location.assign(&#8216;4-生成1~100的随机整数.html&#8217;);
</p>
<p>
  }
</p>
<p>
  function jump3(){
</p>
<p>
  	//将其他页面加载到当前窗口上来，reload()是用来做刷新的
</p>
<p>
  	//location.reload(&#8216;4-生成1~100的随机整数.html&#8217;);
</p>
<p>
  	location.reload();	//刷新本页面
</p>
<p>
  }
</p>
<p>
  function jump4(){
</p>
<p>
  	//跳转完毕后不能点击&#8221;后退&#8221;按钮
</p>
<p>
  	location.replace(&#8216;4-生成1~100的随机整数.html&#8217;);
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;href属性跳转&#8221; onclick=&#8217;jump1()&#8217;&gt; &lt;br&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;assign()跳转&#8221; onclick=&#8217;jump2()&#8217;&gt; &lt;br&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;reload()【刷新】&#8221; onclick=&#8217;jump3()&#8217;&gt; &lt;br&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;replace()&#8221; onclick=&#8217;jump4()&#8217;&gt;
</p>
<p><img loading="lazy" decoding="async" width="450" height="95" src="/wp-content/uploads/2018/05/word-image-423.png" class="wp-image-464" srcset="/wp-content/uploads/2018/05/word-image-423.png 450w, /wp-content/uploads/2018/05/word-image-423-300x63.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></p>
<h3>screen（屏幕）【了解】</h3>
<p>
  包含有关客户端显示屏幕的信息
</p>
<p>
  注意：没有应用于 screen 对象的公开标准，不过所有浏览器都支持该对象。
</p>
<p>
  width：返回显示器屏幕的宽度。
</p>
<p>
  height：返回显示屏幕的高度。
</p>
<p>
  availWidth：返回显示屏幕的宽度 (除 Windows 任务栏之外)。
</p>
<p>
  availHeight：返回显示屏幕的高度 (除 Windows 任务栏之外)。
</p>
<p><img loading="lazy" decoding="async" width="749" height="421" src="/wp-content/uploads/2018/05/word-image-424.png" class="wp-image-465" srcset="/wp-content/uploads/2018/05/word-image-424.png 749w, /wp-content/uploads/2018/05/word-image-424-300x169.png 300w" sizes="(max-width: 749px) 100vw, 749px" /></p>
<p>
  例题
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  document.write(&#8216;屏幕宽度：&#8217;+screen.width+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(&#8216;屏幕高度：&#8217;+screen.height+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(&#8216;屏幕宽度(不包含任务栏)：&#8217;+screen.availWidth+'&lt;br&gt;&#8217;);
</p>
<p>
  document.write(&#8216;屏幕高度(不包含任务栏)：&#8217;+screen.availHeight+'&lt;br&gt;&#8217;);
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  脚下留心：screen对象的属性都是只读属性
</p>
<h3>navigator（导航）【了解】</h3>
<p>
  navigator 对象包含有关浏览器的信息。
</p>
<p>
  注意：没有应用于 navigator 对象的公开标准，不过所有浏览器都支持该对象。
</p>
<p>
  appCodeName：返回浏览器的代码名。
</p>
<p>
  在所有以 Netscape 代码为基础的浏览器中，它的值是 &#8220;Mozilla&#8221;。为了兼容起见，在 Microsoft 的浏览器中，它的值也是 &#8220;Mozilla&#8221;。
</p>
<p>
  appName：返回浏览器的名称。
</p>
<p>
  appVersion：返回浏览器的平台和版本信息。
</p>
<p><img loading="lazy" decoding="async" width="1046" height="114" src="/wp-content/uploads/2018/05/word-image-425.png" class="wp-image-466" srcset="/wp-content/uploads/2018/05/word-image-425.png 1046w, /wp-content/uploads/2018/05/word-image-425-300x33.png 300w, /wp-content/uploads/2018/05/word-image-425-768x84.png 768w, /wp-content/uploads/2018/05/word-image-425-1024x112.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" /></p>
<h2>对象操作语句</h2>
<h3>this语句</h3>
<p>
  this表示当前对象
</p>
<p><img loading="lazy" decoding="async" width="905" height="168" src="/wp-content/uploads/2018/05/word-image-426.png" class="wp-image-467" srcset="/wp-content/uploads/2018/05/word-image-426.png 905w, /wp-content/uploads/2018/05/word-image-426-300x56.png 300w, /wp-content/uploads/2018/05/word-image-426-768x143.png 768w" sizes="(max-width: 905px) 100vw, 905px" /></p>
<h3>with语句</h3>
<p>
  with用来执行一组方法和属性，所有的属性和方法都属于with后面的对象
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  with(document){
</p>
<p>
  	write(&#8216;锄禾日当午&lt;br&gt;&#8217;);
</p>
<p>
  	write(&#8216;汗滴禾下土&lt;hr&gt;&#8217;);
</p>
<p>
  	bgColor=&#8217;#cccccc&#8217;;
</p>
<p>
  	fgColor=&#8217;#FF0000&#8242;;
</p>
<p>
  }
</p>
<p>
  with(Math){
</p>
<p>
  	document.write(PI+'&lt;br&gt;&#8217;);
</p>
<p>
  	document.write(abs(-10)+'&lt;br&gt;&#8217;);
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p><img loading="lazy" decoding="async" width="246" height="100" src="/wp-content/uploads/2018/05/word-image-427.png" class="wp-image-468" /></p>
<h3>eval语句</h3>
<p>
  用来执行字符串表达式
</p>
<p><img loading="lazy" decoding="async" width="976" height="50" src="/wp-content/uploads/2018/05/word-image-428.png" class="wp-image-469" srcset="/wp-content/uploads/2018/05/word-image-428.png 976w, /wp-content/uploads/2018/05/word-image-428-300x15.png 300w, /wp-content/uploads/2018/05/word-image-428-768x39.png 768w" sizes="(max-width: 976px) 100vw, 976px" /></p>
<h2>DOM和BOM</h2>
<p>
  DOM：document object model 文档对象模型
</p>
<p><img loading="lazy" decoding="async" width="697" height="260" src="/wp-content/uploads/2018/05/word-image-429.png" class="wp-image-470" srcset="/wp-content/uploads/2018/05/word-image-429.png 697w, /wp-content/uploads/2018/05/word-image-429-300x112.png 300w" sizes="(max-width: 697px) 100vw, 697px" /></p>
<p>
  BOM：brower object model 浏览器对象模型
</p>
<p><img loading="lazy" decoding="async" width="672" height="85" src="/wp-content/uploads/2018/05/word-image-430.png" class="wp-image-471" srcset="/wp-content/uploads/2018/05/word-image-430.png 672w, /wp-content/uploads/2018/05/word-image-430-300x38.png 300w" sizes="(max-width: 672px) 100vw, 672px" /></p>
<p>
  DOM由HTMDOM，XMLDOM，CSSDOM组成
</p>
<p>
  CSSDOM的语法结构：对象.style.样式属性
</p>
<p>
  oDiv.style.width
</p>
<p>
  oDiv.style.height
</p>
<p><img loading="lazy" decoding="async" width="449" height="49" src="/wp-content/uploads/2018/05/word-image-431.png" class="wp-image-472" srcset="/wp-content/uploads/2018/05/word-image-431.png 449w, /wp-content/uploads/2018/05/word-image-431-300x33.png 300w" sizes="(max-width: 449px) 100vw, 449px" /></p>
<h2>例题</h2>
<h3>表单验证</h3>
<p>
  难点：
</p>
<ol>
<li>
  验证表单的函数在表单提交的时候调用，表单提交的事件是onsubmit
</li>
<li>
  Onsubmit事件后面如果return fasle就终止提交，return true就提交
</li>
</ol>
<p><img loading="lazy" decoding="async" width="678" height="67" src="/wp-content/uploads/2018/05/word-image-432.png" class="wp-image-473" srcset="/wp-content/uploads/2018/05/word-image-432.png 678w, /wp-content/uploads/2018/05/word-image-432-300x30.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></p>
<p>
  代码
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  function check(){
</p>
<p>
  	//验证用户名
</p>
<p>
  	var oUser=document.getElementById(&#8216;username&#8217;);	//获取用户名的文本框对象
</p>
<p>
  	if(oUser.value==&#8221;){
</p>
<p>
  		alert(&#8216;用户名不能为空&#8217;);
</p>
<p>
  		oUser.focus();	//获取焦点
</p>
<p>
  		return false;
</p>
<p>
  	}
</p>
<p>
  	//验证密码
</p>
<p>
  	var oPwd=document.getElementById(&#8216;pwd&#8217;);	//获取密码对象
</p>
<p>
  	if(oPwd.value==&#8221;){
</p>
<p>
  		alert(&#8216;密码不能为空&#8217;);
</p>
<p>
  		oPwd.focus();
</p>
<p>
  		return false
</p>
<p>
  	}else{
</p>
<p>
  		if(oPwd.value.length!=6 || isNaN(oPwd.value)){
</p>
<p>
  			alert(&#8216;密码必须是6位的数字&#8217;);
</p>
<p>
  			oPwd.select();	//选中文本框的内容
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  	return true;
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;form action=&#8221;&#8221; method=&#8217;post&#8217; onsubmit=&#8217;return check()&#8217;&gt;
</p>
<p>
  	&lt;table&gt;
</p>
<p>
  		&lt;tr&gt;
</p>
<p>
  			&lt;td&gt;用户名：&lt;/td&gt;
</p>
<p>
  			&lt;td&gt;&lt;input type=&#8221;text&#8221; id=&#8221;username&#8221;&gt;&lt;/td&gt;
</p>
<p>
  		&lt;/tr&gt;
</p>
<p>
  		&lt;tr&gt;
</p>
<p>
  			&lt;td&gt;密码：&lt;/td&gt;
</p>
<p>
  			&lt;td&gt;&lt;input type=&#8221;password&#8221; id=&#8221;pwd&#8221;&gt;&lt;/td&gt;
</p>
<p>
  		&lt;/tr&gt;
</p>
<p>
  		&lt;tr&gt;
</p>
<p>
  			&lt;td colspan=&#8217;2&#8242; align=&#8217;center&#8217;&gt;
</p>
<p>
  				&lt;input type=&#8221;submit&#8221; value=&#8221;提交&#8221;&gt;
</p>
<p>
  			&lt;/td&gt;
</p>
<p>
  		&lt;/tr&gt;
</p>
<p>
  	&lt;/table&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p><img loading="lazy" decoding="async" width="243" height="90" src="/wp-content/uploads/2018/05/word-image-433.png" class="wp-image-474" /></p>
<h3>设置时钟周期</h3>
<p><img loading="lazy" decoding="async" width="984" height="243" src="/wp-content/uploads/2018/05/word-image-434.png" class="wp-image-475" srcset="/wp-content/uploads/2018/05/word-image-434.png 984w, /wp-content/uploads/2018/05/word-image-434-300x74.png 300w, /wp-content/uploads/2018/05/word-image-434-768x190.png 768w" sizes="(max-width: 984px) 100vw, 984px" /><br />
<img loading="lazy" decoding="async" width="177" height="30" src="/wp-content/uploads/2018/05/word-image-435.png" class="wp-image-476" /></p>
<h3>设置定时器</h3>
<p><img loading="lazy" decoding="async" width="749" height="163" src="/wp-content/uploads/2018/05/word-image-436.png" class="wp-image-477" srcset="/wp-content/uploads/2018/05/word-image-436.png 749w, /wp-content/uploads/2018/05/word-image-436-300x65.png 300w" sizes="(max-width: 749px) 100vw, 749px" /><br />
<img loading="lazy" decoding="async" width="173" height="29" src="/wp-content/uploads/2018/05/word-image-437.png" class="wp-image-478" /></p>
<h2>作业</h2>
<ol>
<li>
  打印100以内的6的倍数，一行放7个
</li>
<li>
  求一元二次方程的根
</li>
<li>
  倒计时
</li>
</ol>
<p><img loading="lazy" decoding="async" width="339" height="34" src="/wp-content/uploads/2018/05/word-image-438.png" class="wp-image-479" srcset="/wp-content/uploads/2018/05/word-image-438.png 339w, /wp-content/uploads/2018/05/word-image-438-300x30.png 300w" sizes="(max-width: 339px) 100vw, 339px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/440.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
