1. JS基础语法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 书写js代码 -->
		<script type="text/javascript">
			alert("HELLO JS");
		</script>
	</head>
	<body>
		<!-- JS和HTML的结合方式
		 1.内联方式:将JS代码写在html标签的内部,不推荐使用,偶尔可以用一下
		 2.内部方式:将JS代码写在script标签的内部
		 <script type="text/javascript">
			书写js代码,这种方式比较常见
		</script>
		补充说明:script标签 可以放在html页面的任意地方,但是你现在先放到<head>标签之间,
		那么至于script标签放到html页面的上面或下面有没有区别?是有区别的,那我们后面涉及到了再是说,你先放到<head>标签之间
		
		 3.外部方式:开发首选,将JS代码单独放到一个js文件中,html页面引用这个js文件
		 <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
		 -->
		<button type="button" onclick="alert('哈哈!')">一个按钮</button>
	</body>
</html>

2. 引入外部的js文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入外部的js文件 -->
		<script src="js/index.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
	</body>
</html>

3. 数据类型

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 单行注释,JS的注释和Java的注释一样
			/* 多行注释 */
			//数据类型:
			//Java的数据类型:基本数据类型和引用数据类型
			//Java的基本数据类型:四类八种:整数型 byte short int long,小数型 float double,字符型 char,布尔型 boolean
			//JS的数据类型:简单数类型(原始数据类型)和 复杂数据类型
			//原始数据类型:Number 数字型(整数和小数),字符串类型(字符,字符串)布尔类型,未定义类型undefined null
			//ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。
			
			//ES5 没有类这个概念的,有对象的概念 但是在 ES6 引入了class类的这个概念
			
			//定义变量:JS是一门弱类型语言,JS中定义变量,采用关键字var
			//定义数字类型
			var num=100;
			var num2=3.14;
			//定义字符串类型
			// 字符串,使用单引号和双引号都可以,推荐使用双引号
			var str="abc";
			var str2='abc';
			//定义布尔类型
			var flag=true;
			var flag2=false;
			var v;
			var obj=null;
			//我们可以通过typeof运算符可以获取该变量的原始数据类型
			alert(typeof num);
			alert(typeof num2);
			alert(typeof str);
			alert(typeof flag);
			alert(typeof flag2);
			alert(v);
			alert(typeof v);
			alert(obj);
			//alert(typeof obj);
			//JS中,一条语句后面的的分号,可以省略不写,但是我建议你还是写上
			
			// ES5 中没有定义常量 的关键字
			// ES6 提供了一个关键字const 可以用来定义常量
			const name="abc"; //定义一个常量
		          //name="aaa";
			
		</script>
	</head>
	<body>
		
	</body>
</html>

数据类型补充说明:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。
			var v;
			alert(v);
			alert(typeof v);
			alert(v== undefined); //true
			// Null 类型
			// 另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
			alert(null == undefined);  //输出 "true"
			
			
			// 尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
			
			var obj=null;
			alert(typeof obj)//null object 
			// 注释:您也许会问,为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。

		</script>
	</head>
	<body>
	</body>
</html>

4. JS中的语句

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/* JS中的语句的语法,跟java中一模一样 
			if
			for
			while
			do..while
			switch
			
			
			*/
		   for(var i=0;i<10;i++ ){
			   alert(i);
		   }
		   
		   //打印99乘法表
		   
		   
		</script>
	</head>
	<body>
	</body>
</html>

5. 往html网页输出内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//可以输出,普通的字符串,数字等等,当然也可以输出html代码,js代码
			document.write("hello JS");
			document.write("<hr>");
			document.write(true);
			document.write("<br>");
			document.write(3.14);
			document.write("<br>");
			document.write("<h1 style='color: red;'>hello JS</h1>");
			var num=100;
			//往页面上输出这个变量
			document.write(num);
			  //打印99乘法表
		</script>
	</head>
	<body>
	</body>
</html>

6. 打印九九乘法表

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			for(var i=1;i<=9;i++){
				for(var j=1;j<=i;j++){
					document.write("<span style='font-size: 25px;color: red;'>"+j+"*"+i+"="+(j*i)+"    "+"</span>");
				}
				document.write("<br>");
			}
		</script>
	</head>
	<body>
	</body>
</html>

7. 一元运算符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var num=1;
			num++;
			++num;
			alert(num);
			
			var j=1;
			// ++  -- 混合使用
			//++在前,先运算后使用,++在后先使用,再运算
			var n=++j;
			alert(n);
			alert(j);
			
			var h=-1;
			var r=+5;
			
		</script>
	</head>
	<body>
	</body>
</html>

8. 数据类型的自动转换

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var num="100";
			//类型的自动转换:当一个运算符想要的数据类型和他期望的不一致时,就会尝试进行数据类型的转换。
			var r=num-20;
			alert(r);
			//字符串类型转换成数字,根据字面上的值来转换,如果字面上是个数字,就转换成数字。
			//如果字面上不是一个有效的数字,就转换成NaN
			var str=+"a100";
			//Number 整数 小数 NaN(不是一个数字)
			alert(str)
			//注意:NaN 参与数学运算结果都是NaN
			var r2=NaN*5;
			alert(r2);
			
			var flag=true;
			//布尔类型转换成数字,true 转换成1 false 转换成0;
			var f2=flag+5+false;
			alert(f2);
			
			
		</script>
	</head>
	<body>
	</body>
</html>

9. 比较运算符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//== ===
			// ==
			//=== 全等于  先比较数据类型,如果数据类型不一致,直接就false,如果类型一致,就比较值是否相等
			
			//类型的转换
			var num="1";
			// == 号,就会转换这个num的类型
			var r=num==1;
			alert(r);
			// === 先比较数据类型,如果数据类型不一致,直接就false,如果类型一致,就比较值是否相等
			
			var r2=num===1;
			alert(r2);
			
			//JS关于字符串的比较,字面上的内容是否相同,使用 ==号来比较即可
			//如果长度一致按照字典顺序比较  长度不一致 那谁的长度长那就谁大
			var s1="abc";
			var s2="abcd";
			alert(s1==s2);
			
			//注意:NaN参与比较运算,结果都是false 除了!=号
			alert(NaN==NaN);
			alert(NaN>1);
			alert(NaN!=NaN);//true
			var ss=+"aa";
			alert(ss==NaN);//NaN
			//你要判断一个数据是不是NaN 不能用==号来判断,可以调用方法来判断
			
		</script>
	</head>
	<body>
	</body>
</html>

10. 逻辑运算符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//&& || !
			var a="aabc";
			//&&想要的类型是布尔类型的,如果你给的不是,就会尝试去转换。
			//String类型转换成布尔,空串转换成false,非空串转换成true
			var f=a&&true;
			alert(f);
			alert(!'');
			
			
			if(""){
				alert("真的")
			}else{
				alert("假的");
			}
			//数字类型转换成布尔:0转换成false 非0转换成true
			if(10){
				alert("真的")
			}else{
				alert("假的");
			}
			
			//NaN 和 undefined 转布尔类型,转换成false
			var v;
			if(v){
				alert("真的")
			}else{
				alert("假的");
			}
			
			//对象转换布尔,对象不为空,转换成true 为null转换成false
			var obj=new Object();
			if(obj){
				alert("真的")
			}else{
				alert("假的");
			}

		</script>
	</head>
	<body>
	</body>
</html>

11. 函数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//函数,JS中的函数类似与Java中的方法,对一段功能逻辑代码进行封装,以实现重复调用。

			//定义函数的两种常见方式
			//方式1:采用 function 来定义函数
			/* 	
					 函数名(形参)
			function  add(){
					//函数体
				}
			 */
			//注意形参不需要写var
			function add(a, b) {
				//函数体
				var sum = a + b;
				return sum; //可以使用return来返回结果
			}
			//调用函数
			var r = add(10, 20);
			document.write(r);
			
			//方式2:
			var show=function(a,b,c){
				alert("show---"+a);
			}
			
			show("hello");
			
			
			// 定义函数的方式3,不推荐用 var fun = new Function("参数列表","方法体");
			var fun = new Function("a,b","alert(a+b)");
			fun(2,3);
			
		</script>
	</head>
	<body>
	</body>
</html>

12. 函数语法的注意事项

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			function add(a,b){
				alert(a);
				alert(b);
				return a+b; 
			}
			//JS中,调用函数时,你可以传参,也可以不传参,传多传少,语法不会报错,但是我们建议实参和形参一一对应。
			var sum=add(20);
			alert(sum);
			alert(add.length)
			
			//函数:有一个内置对象arguments 是一个伪数组,会接收所有传过来的实参。
			//arguments 是一个伪数组 可以存储传过来的实参,有角标,你可以通过角标取传过来的实参
			//之所以arguments 是一个伪数组,就是不能调用数组对象的方法
			function add2(){
				var a=arguments[0];
				var b=arguments[1];
				var c=arguments[2];
				return a+b+c;
			}
			var sum2=add2(20,30,40);
			alert(sum2);
		   //函数还有一个属性length 可以获取形参的个数
		  var len= add2.length;
		  alert(len);
		   
		</script>
	</head>
	<body>
	</body>
</html>

13. 自调用函数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//自调用函数:(function () { /* code */ } ());
		/* 	function show(){
				alert("呵呵");
			}
			show(); */
			// 自调用函数
			var sum=(function add(a,b){
				return a+b;
			}(10,20));
			alert(sum);
			
		</script>
	</head>
	<body>
	</body>
</html>

14. 内置对象 - String 对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//ES5 没有类这个概念,只有对象的概念,JS 也提供了一些常用的内置对象,我可以创建对象,调用方法。
			//String 对象
			//1.创建String对象的方式
			//方式1 
			//当 String() 和运算符 new 一起作为构造函数使用时,它返回一个新创建的 String 对象,存放的是字符串 s 或 s 的字符串表示。
		   var str=new String("abc");
		   //方式2:
		  // 当不用 new 运算符调用 String() 时,它只把 s 转换成原始的字符串,并返回转换后的值。
		   var s=String("aaa");
		   var s2="abc";
		   
		   alert(typeof str);
		   alert(typeof s);
		   //instanceof 判断一个对象或引用,是不是该类型的一个引用
		   alert(str instanceof String);
		   alert(s instanceof String);
		   
		   //属性:length 获取字符串的长度
		   
		   
		   
		</script>
	</head>
	<body>
	</body>
</html>

15. String对象中的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var str=new String("abc");
			//charAt() 返回在指定位置的字符。
			 var ch=str.charAt(0);
			 //打印到浏览器的调试模式的控制台输出 按F12到浏览器的调试模式
			 console.log(ch);
			// concat() 连接字符串。 你可以使用 + 来拼接字符串
			
			var s1="abc".concat("cccc").concat("dddd");
			//alert(s1);
			
			//indexOf() 检索字符串。 检索该字符串第一次出现的索引,如果检索不到返回 -1
			//lastIndexOf() 从后向前搜索字符串。 
			var index= "abcdeff".indexOf("fff");
			
			console.log(index);
			
			//replace() 替换与正则表达式匹配的子串。
			 var s2="aaa====bbb======ccc";
			 var regx=/[=]+/g;
			var s3= s2.replace(regx,"#");
			console.log(s3);
			
			 //slice() 提取字符串的片断,并在新的字符串中返回被提取的部分。 
			 // substring() 提取字符串中两个指定的索引号之间的字符。 
			//从起始索引,截取到终止索引,但是不包含终止索引这个字符
			var v= "替换与正则表达式匹配的子串".substring(0,5);
			console.log(v);
			//替换与正则
			var vv="替换与正则表达式匹配的子串".slice(-5,-1);
			console.log(vv);
			
			
			// toLowerCase() 把字符串转换为小写。 
			// toUpperCase() 把字符串转换为大写。 

			//split() 把字符串分割为字符串数组。 
			
			//startsWith()	查看字符串是否以指定的子字符串开头。
			//trim()	去除字符串两边的空白
			//去除左端空格
			"     替换与正则表达式匹配的子串    ".trimLeft();
			//去除右端空格
			"     替换与正则表达式匹配的子串    ".trimRight();
		</script>
	</head>
	<body>
	</body>
</html>

16. 内置对象中Number对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var num=100; 
			// 创建 Number 对象的语法:
			// var myNum=new Number(value);
			// var myNum=Number(value);
			var obj=new Number(num);
			var myNum=Number("100");
			
			alert(typeof obj);// object
			alert(typeof myNum);//number


// 参数

// 参数 value 是要创建的 Number 对象的数值,或是要转换成数字的值。

// 返回值

// 当 Number() 和运算符 new 一起作为构造函数使用时,它返回一个新创建的 Number 对象。
//如果不用 new 运算符,把 Number() 作为一个函数来调用,它将把自己的参数转换成一个原始的数值,并且返回这个值(如果转换失败,则返回 NaN)。

// MAX_VALUE 可表示的最大的数。 
// MIN_VALUE 可表示的最小的数。 



//toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。
        
		var v= new Number(3.1455555587474747474);
		//保留小数点后面几位,会四舍五入,返回的是字符串类型的数字
		var str=v.toFixed(3);// "3.146"
		alert(str);
		
		var sum=str*1;
		var v2=Number(str);
		
		
		//Integer Double  Number
           
		</script>
	</head>
	<body>
	</body>
</html>

17. Date日期对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// Date 对象
			
			// Date 对象用于处理日期和时间。
			
			// 创建 Date 对象的语法:
			// var myDate=new Date()
			
			// 注释:Date 对象会自动把当前日期和时间保存为其初始值。
			
			var myDate=new Date();
			var year=myDate.getFullYear();
			alert(year);
			//getTime() 返回 1970 年 1 月 1 日到现在所间隔的毫秒数。
			var time= myDate.getTime();
			
			alert(myDate);
			// toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。 
			// toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。 
			// toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串 
			 var timeStr=myDate.toLocaleString();
			 alert(timeStr);
			 alert(myDate.toLocaleTimeString());
			 alert(myDate.toLocaleDateString());
			
		</script>
	</head>
	<body>
	</body>
</html>

18. 第三方的日期时间处理的工具类

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入js文件 -->
		<script src="js/moment.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			var timeStr=moment().format();  
			alert(timeStr);
			//格式化当前的日期为一个如日期字符串
			var timeStr2=moment().format('YYYY-MM-DD HH:mm:ss'); 
			alert(timeStr2);
			
			
			//把指定的毫秒值毫秒值,格式化成日期字符串。
			var time=new Date().getTime();
			var dateStr2=moment(time).format('YYYY-MM-DD HH:mm:ss');
			document.write("<h1>"+dateStr2+"</h1>");
			
			
			//把日期字符串转换成毫秒值 unix()
			var a=moment('2019-08-22 12:30:23').unix()
			//1566448223
			alert(a);
			
		</script>
	</head>
	<body>
	</body>
</html>

19. Math 内置类

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//Math 内置对象,不需要new 直接使用对象名调用方法即可
			/* var pi=Math.PI;
			var num=Math.random();
			Math.max(2.5,35);
			Math.min(3.5,89);
			Math.ceil(3.25);
			Math.floor(3.5);
			Math.round(3.69); */
			
			//要 1---100 之间一个随机整数包含 1也包含100
			//Java中:int num=(int)(Math.random()*100+1);
			
		/* 	
			for(var i=0;i<1000;i++){
				var num=Math.random()*100+1;
				 num=Math.floor(num);
				document.write(num);
				document.write("<br>");
			}
			 */
			//弹出一个四位的随机验证码
			var str="0123456789asdfasdfADFEfsdfefiliafedaefaWQEFF";
		/* 	//生成四个随机索引
			var index1=Math.floor(Math.random()*str.length);
			var index2=Math.floor(Math.random()*str.length);
			var index3=Math.floor(Math.random()*str.length);
			var index4=Math.floor(Math.random()*str.length);
			var code=str.charAt(index1).concat(str.charAt(index2)).concat(str.charAt(index3)).concat(str.charAt(index4));
			alert(code); */
			var code="";
			for(var i=0;i<4;i++){
				var index=Math.floor(Math.random()*str.length);
				code+=str.charAt(index);
			}
			alert(code);
			
		</script>
	</head>
	<body>
	</body>
</html>

20. 全局对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//全局属性和函数可用于所有内建的 JavaScript 对象。直接调用即可
			//isNaN() 检查某个值是否是数字。
			 var n=NaN;
			 var s=NaN;
			// alert(n==s);
			//判断一个值是不是NaN 使用方法来判断isNaN()
			var b=isNaN(n);
			alert(b);
			var c=isNaN(2*"abc");
			alert(c);
			
			//把字符串的数字,转换成数字
			
			//parseFloat() 解析一个字符串并返回一个浮点数。 
			//parseInt() 解析一个字符串并返回一个整数。
			var numStr="100";
			//方式1
			var nn=numStr*1;
			//方式2
			var n1=Number(numStr);
			//方式3
			var n2=parseInt(numStr);
			
			var n3=parseFloat("3.1458585");
			// 解析一个字符串并返回一个整数。  
			// 					* 从左向右依次查找,每一位是否是数字,直到遇到不是数字为止。将前边的值转为数字
			// 						比正号强大些  var v=+“123”;
			var v=parseInt("100abc");
			alert(v+20);
		</script>
	</head>
	<body>
	</body>
</html>

21. 全局对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//decodeURIComponent() 解码一个编码的 URI 组件。 
			//encodeURIComponent() 把字符串编码为 URI 组件。 
			
			var str="张三";
			var code=encodeURIComponent(str);
			alert(code);
			var name=decodeURIComponent(code);
			alert(name);
			
			//浏览器会对中文参数进行 URL编码
		//	http://127.0.0.1:8848/20210222-JS-%E4%B8%8A%E5%8D%88/8.%E5%85%A8%E5%B1%80%E5%AF%B9%E8%B1%A1.html
		
		var v=decodeURIComponent("http://127.0.0.1:8848/20210222-JS-%E4%B8%8A%E5%8D%88/8.%E5%85%A8%E5%B1%80%E5%AF%B9%E8%B1%A1.html");
		alert(v);

		</script>
	</head>
	<body>
	</body>
</html>

22. Boolean对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var b="true";
			var f=Boolean(0);
			// 注释:如果省略 value 参数,或者设置为 0、-0、null、""、false、undefined 或 NaN,则该对象设置为 false。否则设置为 true(即使 value 参数是字符串 "false")。
			if(f){
				alert("真的")
			}else{
				alert("假的")
			}
		</script>
	</head>
	<body>
	</body>
</html>

23. 预解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// 1.问
			console.log(num);
			//2.问
			console.log(v);
			var v=100;
			
			//问3:
			//show();
			function show(){
				console.log(100);
			}
			//show();
			
			//test();
			var test=function(){
				console.log(100);
			}
			test();
		</script>
	</head>
	<body>
	</body>
</html>

24. 数组对象Array

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//JS中数组的定义方式
			//JS中的数组其实更像Java中 ArrayList
			//方式1:new
			var arr=new Array(3); //长度可以规定,也可以不用规定。
			//方式2:定义的时候,就可以往数组中放置元素
			var arr2=new Array(20,20,58,200,3.14,"abc",false);
			//方式3:简写方式
			var arr3=[20,50,60,68];
			
			//1.JS中的数组长度是可变的。
			arr[0]=20;
			arr[1]=30;
			arr[2]=60;
			arr[3]=80;
			alert(arr[0]);
			alert(arr[1]);
			alert(arr[2]);
			alert(arr[3]);
			alert(arr[5]); //undefined
			
			//2.JS中的数组可以任意数据类型。
			
			alert(arr2[arr2.length-1]);
			
		</script>
	</head>
	<body>
	</body>
</html>

25. 数组对象中的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var arr=[10,20,30,40,50];
			var arr2=[60,70,80];
			//遍历数组
			// for(var i=0;i<arr.length-1;i++){
			// 	alert(arr[i]);
			// }
			//concat() 连接两个或更多的数组,并返回结果。
			//把多个数组的元素,归并到一个新的数组中
			var newArr=arr.concat(arr2,arr2);
			alert(newArr);
			
			//join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
			 //分隔符 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。 
			var arr3=[10,20,30,40,50];
			var str=arr3.join("");
			alert(str);
			
		</script>
	</head>
	<body>
	</body>
</html>

26. 数组中的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			
			// push() 向数组的末尾添加一个或更多元素,并返回新的长度。 

			var arr = new Array();
			arr[0] = 10;
			//往数组中后面元素添加元素
			arr.push(100);
			arr.push(200); //add()
			var len=arr.push(300, 400, 500, 600);
			//unshift() 向数组的开头添加一个或更多元素,并返回新的长度。 
			arr.unshift(1,2,3);
			alert(arr);
		</script>
	</head>
	<body>
	</body>
</html>

27. 数组中的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var arr=[10,20,30,40];
			//shift() 删除并返回数组的第一个元素 
			//pop() 删除并返回数组的最后一个元素 
			var ele=arr.pop();
			alert(ele);
			alert(arr);
			
			var ele2=arr.shift();
			alert(ele2);
			alert(arr);
			
			//根据索引来删除数组中的某个元素
			
			var arr2=[10,20,30,40,50,60,70,80];
			
			//splice() 删除元素,并向数组添加新元素。记住这个方法,这个方法可以完成,删除,替换
			// 参数1:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 
			//参数2: 必需。要删除的项目数量。如果设置为 0,则不会删除项目。 

			 arr2.splice(4,1);
			 alert(arr2);
			 
			 var arr3=[10,20,30,40,50,60,70,80];
			 
			 arr3.splice(4,1,500,100,300);
			 
			 alert(arr3);
			 
			// reverse() 颠倒数组中元素的顺序。 
			 
			// sort() 对数组的元素进行排序 
			 
		

		</script>
	</head>
	<body>
	</body>
</html>

28. 数组排序

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var arr=[10,20,30,40,50,1,8,9,10,8];
			//冒泡排序,选择排序,直接插入排序,快速排序,归并排序,堆排序,桶排序
			//sort() 不传参,默认是按照元素的字典顺序来排序的。
			arr.sort();
			alert(arr);
			
			//如果你想要安照元素的大小顺序来排,需要传入比较函数。
			var bjq=function(a,b){
				return a-b; //正负0
			}
			arr.sort(bjq);
			alert(arr);
			
			//直接传入匿名函数
			arr.sort(function(a,b){
				return b-a; //正负0
			});
			
			alert(arr);
		</script>
	</head>
	<body>
	</body>
</html>

26. ES6新增加的关于数组的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			
			// ES6 数组新增的方法: https://www.runoob.com/jsref/jsref-obj-array.html
			//every()	检测数值元素的每个元素是否都符合条件。

			var arr = [10, 20, 30, 40, 50, 1, 8, 9, 10, 8];
			var hs = function(ele) {
				return ele > 0;
			}
			var f = arr.every(hs);
			alert(f);

			//forEach()	数组每个元素都执行一次回调函数。
			//ele 数组中的元素 ,index元素的索引
			arr.forEach(function(ele, index) {
				//alert(index + "==" + ele);
			})

			//filter()	检测数值元素,并返回符合条件所有元素的数组。
			var arr = [10, 20, 30, 40, 50, 1, 8, 9, 10, 8, 3, 11, 13, 14, 49, 20];
			//过滤出数组中的偶数
			var newArr = arr.filter(function(ele) {
				/* if(ele%2==0){
					return true; //返回true就说明符合条件,就会放到新数组中
				}else {
					return false; //返回false就说明不符合条件,就不要
				} */
				return ele % 2 == 0;
			})
			//alert(newArr);


			//map()	通过指定函数处理数组的每个元素,并返回处理后的数组。
			//提取:应用的一个新的函数上
			var arr2 = [10, 20, 30, 40, 50, 1, 8, 9, 10];
			//提取数组中的偶数,并对提取出来的偶数进行平方的操作
			// 定义和用法
			// map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

			// map() 方法按照原始数组元素顺序依次处理元素。

			// 注意: map() 不会对空数组进行检测。

			// 注意: map() 不会改变原始数组。
			var newArr3 = arr2.map(function(ele,index,oldArr) {
				if (ele % 2 == 0) {
					return Math.pow(ele, 2)
				}else{
					return ele;
				}
			})
			//alert(newArr3);
			
			//reduce()	将数组元素计算为一个值(从左到右)。
			var arr3 = [10, 20, 30, 40, 50, 1, 8, 9, 10];
			//array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
			var sum=arr3.reduce(function(total,currentValue,index,arr){
				return total+currentValue;
			},0);
			alert(sum);
			
		</script>
	</head>
	<body>
	</body>
</html>

27. 二维数组

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var arr1=new Array(20,20,58,200);
			var arr2=new Array(20,20,58,200);
			var arr3=new Array(20,20,58,200);
			var maxArray=new Array();
			maxArray[0]=arr1;
			maxArray.push(arr1);
			maxArray.push(arr2);
			maxArray.push(arr3);
			
			for(var i=0;i<maxArray.length;i++){
				for(var j=0;j<maxArray[i].length;j++){
					alert(maxArray[i][j]);
				}
			}

			//简便定义二维数组
			var myArray=[[20,20,58],[20,20,58],[20,20,58]];
			
		</script>
	</head>
	<body>
	</body>
</html>

28. 正则表达式对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//定义正则表达式对象
			//方式1:new RegExp(pattern, attributes);
			var regx=new RegExp("^[a-z0-9]+$","i"); //i 不区分大小写
			
			var f=regx.test("AAA");
			alert(f);
			
	
			//方式2:简便方式 /正则表达式/模式  比较常用
			
			
			var regx2=/^[a-z0-9]{6,16}$/i;
			
			//test("要匹配的数据") 判断这数据是否符合正则表达式
			var f2=regx2.test("AAAaaaaa");
			alert(f2);
			
		</script>
	</head>
	<body>
	</body>
</html>

29. 正则表达式的注意

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var str = "hello123";
			//注意加上开头和结尾,防止一部分匹配上,也会返回true
			var reg = /^[A-Z0-9]+$/;
			alert("匹配吗?" + reg.test(str));
		</script>
	</head>
	<body>
	</body>
</html>

30. 正则表达式的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//test 检索字符串中指定的值。返回 true 或 false。 
			
			//exec 检索字符串中指定的值。返回找到的值,并确定其位置。 
			//获取字符串中是3个字母组成的单词。
			// \b 单词边界
			var str  ="da abcd jia hao hao xue xi a";
			
			var reg = /\b[a-z]{3}\b/gi; //g全文匹配
			/* var s=reg.exec(str);
			alert(s);
			s=reg.exec(str);
			alert(s);
			s=reg.exec(str);
			alert(s); */
			var ss="";
			while((ss=reg.exec(str))!=null){
				alert(ss);
			}
		</script>
	</head>
	<body>
		
		
	</body>
</html>

31. 支持正则表达式的 String 对象的方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
		/* 	var str="aaa=bbb=ccc";
			//跟据普通的分隔符来截取
			var arr=str.split("=");
			alert(arr);
			//根据正则来截取
			var arr2=str.split(/=/);
			alert(arr2)
			// replace(/=/g,"#");说明
			
			// 字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

			var newStr=str.replace(/=/g,"#");
			alert(newStr);
			 */
			
			
		/* 	var str="Hello world!"
			document.write(str.match("world") + "<br />")
			document.write(str.match("World") + "<br />")
			document.write(str.match("worlld") + "<br />")
			document.write(str.match("world!")) */
			
			
			var str="1 plus 2 equal 3"
			document.write(str.match(/\d+/g)) //[0-9]+
			
		</script>
	</head>
	<body>
	</body>
</html>

32. 作用域

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//JS中的作用域:全局作用域,局部作用域
			//全局作用域:一对script标签所包裹起来的范围,或者一个单独的js文件
			//局部作用域:就是函数的范围
			//ES5:里面没有块级作用域:if(){ 块级作用域 }  for(){ 块级作用域  }
			
			
			/* 2.3 全局变量和局部变量的区别
			
			- 全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存
			- 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间 */
			var num=100; //全局变量,
			
			function show(){
				var num=200; //局部变量
			}
			show();
			//alert(num);
			
			
			if(true){
				 let i=100;
			}
			
			alert(i);
			for(let j=20;j<30;j++){
				
			}
			alert(j);
			
			
			{
				//ES6新增的let 关键字 let定义块级作用域变量
				let h=20;
			}
			alert(h);


			//var let const
		</script>
	</head>
	<body>
	</body>
</html>

33. 作用域

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			function show(){
				//局部变量
				var num=20;
				n=200; //如果函数中的变量,省略var 此变量为全局变量
			}
			show();
			alert(n);
			//alert(num);
			
			
		</script>
	</head>
	<body>
	</body>
</html>

34. 变量的访问-就近原则

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//Java中方法不能嵌套定义
			//JS中函数时可以嵌套定义的
			var num = 500;
				//变量的访问遵循就近原则
			function show() {
				//var num = 20;
				console.log(num);
				function test() {
					//var num = 100;
					console.log(num);
				}
				test();
			}
			show();
			console.log(num);
		</script>
	</head>
	<body>
	</body>
</html>

35. 预解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//问题1:
			//console.log(num);
			//问题2:
			/* console.log(num); //undefined
			
			var num=100; */
			/* show();
			function show(){
				alert("函数调用了");
			} */
			/* test();
			var test=function(){
				alert("函数调用了");
			} */
		</script>
	</head>
	<body>
	</body>
</html>

36. 预解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/* 4.1 预解析的相关概念
			
			JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。
			
			JavaScript 解析器在运行 JavaScript 代码的时候分为两步:
			
				预解析和代码执行。
			
			- 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义,预解析也叫做变量、函数提升。
			
			- 代码执行: 从上到下执行JS语句。
			
			  注意:**预解析会把变量和函数的声明在代码执行之前执行完成。** */
			  
		/* 	  console.log(num); //undefined
			  
			  var num=100; */
			  //上面的代码进行预解析后,其实是下面这样的
			   var num;
			   	//变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。
			   console.log(num); 
			   num=100;
			   
			   

		</script>
	</head>
	<body>
	</body>
</html>

37. 预解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/* console.log(num);
			var num = 10;
			show();

			function show() {
				//alert("abc");
				console.log("函数调用了");
			} */

			//上面的代码相当于下面的执行顺序
			var num;
			function show() {
				//alert("abc");
				console.log("函数调用了");
			}
			console.log(num);
			num=10;
			show();
		</script>
	</head>
	<body>
	</body>
</html>

38. 预解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			test();
			var test=function(){
				console.log("函数调用了")
			}
			//上面代码就相当于下面的。
			var test;
			test();
			test=function(){
				console.log("函数调用了")
			}
			
		</script>
	</head>
	<body>
	</body>
</html>

39. 预解析

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var num = 10;
			fun();
			function fun() {
			
				console.log(num); //
				var num = 20;
			}
			/* //上面的代码进行预解析,变成如下:
			var num = 10;
			function fun() {
				var num;
				console.log(num); //
				 num = 20;
			}
			fun(); */
			
			
		</script>
	</head>
	<body>
	</body>
</html>

40. 倒计时

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		手机号:<input type="" name="" id="" value="" /> <button type="button">发送</button>
	</body>
	<script type="text/javascript">
		var btn=document.querySelector('button');
		var time=60;
        btn.addEventListener('click',function(){
			//alert("倒计时")
			btn.disabled=true;
			var timeID=setInterval(function(){
				if(time==0){
					//倒计时完毕,清除定时器,并回复按钮原来的状态。
					clearInterval(timeID);
					//不要禁用按钮
					btn.disabled=false;
					//按钮的文字改回来
					btn.innerHTML="发送";
					//时间在设置为原来的
					time=60;
				}else{
					btn.innerHTML="剩余"+time+"秒钟";
					time--;
				}
			},1000);
		})
	</script>
</html>