Javascript成长之路

零基础学习JavaScript

Day1

  1. JavaScript的使用方式
    使用JS的方式有三种,分别是行内式、内嵌式、外链式

    1.1 行内式:
    在标签中使用JS语句

<input type="button" name="" id="" value="click me" onclick="alert('Hello World')"/>
1.2 内嵌式:
在html中引入script标签,在标签中写JS代码
一个HTML中可以添加多个script标签,由上到下依次执行

1.3 外链式:
	在html中导入外部JS文件
	注意:script标签中不能执行JS代码
<script src="JS/1.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">

2.JS中的注释:
单行注释是 // 多行注释是 / 多行注释 /

<script type="text/javascript">
			// 单行注释
			/*
				多行注释
				多行注释
			*/
		</script>

3.变量
使用关键字 var 声明变量。

// 同时声明多个变量
			var weight = 120,height = 175,age = 19;
			// console.log(weight);
			// console.log(height);
			// console.log(age);
			console.log(weight,height,age);/* 一次性输出多个 */

JS中主要有六种变量类型
number、string、undefined、object、boolean、null

4.标识符和关键字
JavaScript是弱类型语言,声明变量不需要指定变量的类型。
标识符命名规则:不能以数字开头,可以使用数字字母下划线$,不能使用关键字,推荐使用小驼峰命名法

可以使用typeof查看变量的类型

Day2

		var a = 3; 
		var name = 'zhangsan';
		console.log(typeof a); /* number*/
		console.log(typeof(name)); /* string*/
		
		// typeof 返回的结果为string类型
		
		// 1.number
		var val = 3;
		console.log(typeof val);/* number */  
		
		// 2.string
		var str = 'this is a str'
		console.log(typeof str);/* string */
		
		// 3.boolean
		var bool = false; 
		console.log(typeof bool);/* boolean */
		
		// 4.undefined
		var v;
		console.log(typeof v);/* undefined */
		
		// 5.null   表示空对象
		var v2 = null;
		console.log(typeof v2);/* object */
		
		// 6.object  对象类型   属于复合类型
		var  person = {'name':'zhangsan','age':20};  //JSON格式
		console.log(typeof person);
		console.log(person.name,person.age);
string字符串类型
var str = 'lixingyun';
	console.log(str,typeof str);
	
	// 单引号添加转义字符后可以放在单引号中
	var str = 'i\'m constraintUser';/* 转义字符算一个字符的长度 */
	console.log(str);
	
	// +号的使用
	// 如果两边都是数值,执行的是数学运算
	var n1 = 15,n2 = 20;
	console.log(n1+n2);
	
	// 两边都是字符串,执行的是字符串相连
	var s1 = '字符串1',s2 = '字符串2';
	console.log(s1+s2);
	
	// 只要有一边是字符串类型,相加变为字符串类型
	var s1 = '字符串',v1 = 56;
	console.log(s1+v1,typeof (s1+v1));
	
	// typeof的使用方式
	console.log(typeof s1+v1);/* 等价于 typeof(s1) + v1 */
	
	// typeof后面可以添加括号设置表达式的范围

day3

JS中的运算符分为:
算数运算符、逻辑运算符、关系运算符、自增自减运算符、赋值运算符

运算中的自动类型转换

	1.任何类型的数据和字符串类型的数据相加,其类型将会转换成字符串类型,再进行拼接
	2.任何类型除了字符串之外的数据和数值类型进行运算,都会先转换成数值类型,再进行运算,<1>NaN做运算的结果都为NaN  <2>字符串如果是纯数字,将会转换成数字,否则转换成NaN

强制类型转换

Boolean()
	将别的数据类型转换成布尔类型
	空字符串、null、undefined会转换成false
	infinity会转成true
Number()
	将别的数据类型转换成数值类型
	纯数值字符串转成数值从,否则转换成NaN
parseInt()
	取整(兼容Number()的功能)
parseFLoat()
	取浮点数

关系运算符:

>   <   =   >=   <=   ==   !=   ===   !==

逻辑运算符:

&&   ||   !

Day4

1.循环和判断

1.1单分支语句
if(表达式1){
	执行语句;
}

1.2双分支语句

if(){
	
}else{
	
}

1.3多分支语句

if(表达式1){
	执行语句1;
}else if(表达式2){
	执行语句2;
}...
else{
	执行语句n;
}

2.循环
2.1for循环

/* 格式 */
for(表达式1;表达式2;表达式3){
	循环体;
}

2.2while循环

while(表达式){
	循环体;
}

2.3dowhile循环

do{
	循环体;
}while(表达式)

while和dowhile循环的区别:
dowhile循环至少执行一次
3.break和continue
break:跳出一层循环
continue:跳出本次循环

函数

1.函数的概念、分类、作用
函数:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块
作用:提高程序的简洁性,有利于程序的维护,提高代码的重用性,提高开发效率
分类:内置函数,自定义函数
2.函数的声明:
2.1无参函数的声明:

// 函数名(即标识符)要求见名知意
function 函数名(){
	函数体;
}

2.2有参函数的声明

// 函数名(即标识符)要求见名知意
function 函数名(参数1,参数2...){
	函数体;
}

3.arguements
在每一个函数内都有一个内置数组,这个数组叫做arguements,存储传入的所有参数,并按照传入的顺序进行存储
元素按照下标访问
arguements.length 获取元素的个数
4.函数的返回值
return 语句执行结束,函数调用结束
5.函数的作用域
在函数中创建的变量为局部变量,生命周期为函数的调用到调用结束
在外部创建的变量为全局变量
补充:判断闰年的条件为年份能被4或者400整除不能被100整除
6.事件驱动函数:
什么是事件驱动函数?
在和页面交互所调用的函数
什么是事件?
和页面交互的行为称之为事件
7.window.onload方法
因为html中的代码运行是从上往下的,一般在head中撰写javascript代码,所以按照执行顺序,在javascript中无法使用document.getElementById来获取到标签的。window.onload方法是在页面加载完毕才执行的,所以结合使用事件驱动的方法在window.onload触发函数中进行body中标签的获取即可

window.onload = function(){
	var Object = document.getElementById(ID);
}

Day5

数组

1.概念:
数组是一种数据类型。复合数据类型,数组的作用是使用单独的变量来存储一系列的值
2.数组的定义

//使用new关键字创建
var arr = new Array(1,2,3,4,5);
//省略new关键字
var arr = Array(1,2,3,4,5);
//使用常量创建数组(推荐使用)
var arr = [1,2,3,4,5];

3.数组的属性和遍历数组

//length可以获取数组的长度
arr.length
//通过长度和循环来遍历数组
for(var i  = 0;i < arr.length; i++)
	console.log(arr[i]);

//for  in   对数组快速遍历
for(var i in arr){
//i为数组的下标
	console.log(arr[i]);
}

4.栈方法和队列方法:
4.1栈结构(FILO):

//在数组末尾添加元素,返回值为数组中元素的个数
push()
//弹出数组末尾的一个元素,返回值为删除的元素
pop()

4.2队列结构(FIFO):

//取出数组头部的一个元素,返回值为取出的元素
shift()
//向数组的头部添加元素,返回值为数组中元素的个数
unshift()

4.3concat:连接两个数组

//返回值为合并后的新数组
arr1.concat(arr2);

4.4slice(start,end)数组的切片(左闭右开)

//返回值为开始到结束下标对应的元素
arr.slice(0,2);

4.5splice() 完成插入,删除,替换操作
arr.splice(start,count[,新元素])

//第一个参数:截取开始下标
//第二个参数:截取的长度,若为0则不会删除数据
//第三个参数:在截取下标位置插入的元素,添加多个元素用逗号分隔开

//替换操作就是先把数据删除再在删除的位置添加元素

4.6系统提供的排序方法

//1.reverse()   将数组倒置   会改变原数组
arr.reverse();
//2.sort()   将数组升序排序   从小到大
//sort 方法	默认是按字符串进行排序的  所以19会排在9的前面
arr.sort();

4.7数组的引用类型
声明在函数中的变量或当前函数的形参,都是局部变量,在函数调用结束,会释放内存,
数组是复合数据类型/引用数据类型
!所有的复合数据类型都不存储在函数中,存储在堆段中
!函数运行的内存空间是分配好的,一旦被分配好就能不能改变了
!所有的复合数据类型中存储的都是数据的地址,所有的这种数据类型被称之为引用数据类型

字符串

1.字符串的概念和创建方式

//在JS中所有的用双引号或者单引号括起来的数据类型都是字符串类型
//字符串的类型为object

//字符串的创建方法1
var str = new String("这是一个字符串");
//2
var str = String("这是一个字符串");
//3通常使用这种方式创建方便快捷
var str = "这是一个字符串";

注意ECMAscript中的字符串是不可变的。一旦传概念就不能更改
2.字符串输出的常用函数

/*
				这些方法都必须在document.write()中使用
				big()		用大号字体显示字符串
				blink()		显示闪动字符串
				bold()		使用粗体显示字符串
				fixed()		以打字机文本显示字符串
				strike()	使用删除线来显示字符串
				fontcolor()	使用指定颜色来显示字符串
				fontsize()	使用指定尺寸来显示字符串
				link()		把字符串显示为链接
				sub()		把字符串显示为下标
				sup()		把字符串显示为上标
			 */
			var str1 = "Hello World";
			document.write(str1.big());
			document.write(str1.blink());
			document.write(str1.bold());
			document.write(str1.fixed());
			document.write(str1.strike());
			document.write(str1.fontcolor());
			document.write(str1.fontsize());
			document.write(str1.link());
			document.write(str1.sup());
			document.write(str1.sub());

3.字符串中的重要方法
3.1charCodeAt()

//	charCodeAt()   返回下标对应元素的ASCII码值
arr.charCodeAt(0);

3.2fromCharCode()

//使用string.fromCharCode()调用    ASCII对应的字符组成的字符串
//传入参数为ASCII码值,不同值用逗号隔开
string.fromCharCode(65,66,67,68,69);//ABCDE

3.3concat()

//同数组中的concat方法,对字符串进行拼接
//一般使用 + 来进行拼接

```javascript
var str1 = "123";
var str2 = "456";
var str3 = str1.concat(str2);

3.4字符串的查找

//1.indexOf()   查找子串所在的位置,找不到返回-1
arr.indexOf("lo");
//2.lastIndexOf()  查找子串最后一次出现的位置,找不到返回-1
arr.lastIndexOf("lo");
//3.search()  参数可以是字符串可以是正则表达式

4.replace()

//string.replace("oldstring"/正则表达式,"newstring")  替换字符串 
//返回值为替换完成后的字符串,如果向替换字符串中多个相同的子串,就需要使用正则表达式,
//i忽略大小写    g为全局变量
arr.replace(/he/ig,'HE');

5.substring(start,end) 提取下标从start到end作为新字符串返回

6.split(“分隔符”,count)

//传入的分隔符如果为空字符串"" 则字符串会分割成单个字符
//toLowerCase()   将字符串中的大写转小写
//toUpperCase()   将字符串中的小写转大写

Day6

Math和日期对象

1.Math对象
常用的Math函数

Math.round()    	四舍五入
Math.random()   	0-1之间随机数
Math.max()			返回较大的数
Math.min()			返回较小的数
Math.abs()			返回参数的绝对值
Math.ceil()			向上取整
Math.floor			向下取整
Math.pow(x,y)		求x的y次方
Math.sqrt()			开根号

2.Math对象的三角函数

Math.sin()		正弦
Math.cos()		余弦
Math.tan()		正切

在JS中Math.PI == 180弧度
1弧度 = Math.PI/180

3.对象的概念
对象也是一种数据类型 引用数据类型
对象中的变量叫做属性
对象中的函数叫做方法
3.1创建对象的方式有三种

//1.使用new关键字创建对象
var tool = new Object();
//2.省略new关键字
var person = Object();
//3.使用常量创建对象
var animal = {};

一般使用第三种方式创建对象

3.2对象的属性和方法的定义与使用

//定义
a.name = "zhangsan";
//还可以赋值给下标对应的元素
a['name'] = "zhangsan";

a.run = function(){
	alert("keep running!");
}

//使用
a.name;
a.run();

4.日期对象

在JS中日期也是一种数据类型 复合数据类型

//使用new关键字创建
var date = new Date();
//传入的参数可以是下列情况
Date("2021/04/16");
Date("2021-04-16");
Date(2021,04,16,21,40);

4.1日期对象的方法:


//以特定的方法显示月日年
date.toDateString();
//以特定的格式显示时分秒时区
date.toTimeString();

4.2日期对象的常用方法

//1.set/getDay()   获取一周中的某一天   从0开始  0代表周日
//2.set/getMonth()    获取日期中的月份   从0开始
//3.getTime()    获取从1970年到现在的毫秒数
//4.Date.prase(date)    返回从1970-date的毫秒数
//5.date.getDate()    返回一个月中的第几天

4.3定时器

//setInterval(func,毫秒数)  每隔传入的毫秒数就调用一次函数
//返回值为当前页面上对这个定时器的唯一标识

//clearInterval(timer)   参数为定时器的ID,可以取消定时器

4.4innerHTML
innerHTML为标签中的全部内容

4.5ECMAscript中数组新增的方法

//查找el在数组中的下标,从start下标开始查找
indexOf(el,start);

//forEach()
arr.forEach(function(item,index,array){
item:当前遍历的元素
index:当前遍历的下标
array:当前数组
})

//map()   映射   遍历-操作-返回
map(function(item,index,array){
	//将数组中的元素一一传入函数处理后生成新数组返回
	return  item+"123";
})

//reduce()   归并
reduce(function(pre,next,index,array){
//pre  上一次遍历return后面的值
//next  当前遍历的值
return pre+next;
})

//filter()   过滤
filter(function(item,index,array){
//返回满足条件的元素
return item > 30;
})

//some()  判断return后面的条件是否存在元素成立  成立返回true否则返回false
some(function(item,index,array){
	return item == 10;
})

//every()   跟some一样  但是要求所有元素都需要满足条件

4.6计时器小案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>秒表</title>
		<style type="text/css">
			#M{
				width: 200px;
				height: 400px;
				background-color: #5F9EA0;
				text-align: center;
				position: absolute;
			}
			
			#content{
				margin: 50px auto;
				font-size: 30px;
				color: #FFEEEE;
			}
			input{
				width: 150px;
				height: 50px;
				margin: 10px;
				background-color: #DEB887;
				color:black;
			}
			
		</style>
		<script type="text/javascript">
			//封装一个函数用来获取按钮
			function $(id){
				return document.getElementById(id);
			}
			
			//处理数字,单个数字显示进行处理
			function deal(num){
				if(num < 10) return "0"+num;
				else return num;
			}
			
			window.onload = function(){
				var count = 0;
				var timer;
				$("start").onclick = function(){
					timer = setInterval(function(){
					count++;
					$("id_s").innerHTML = deal(count%60);
					$("id_m").innerHTML = deal(parseInt(count/60)%60)+":";
					$("id_h").innerHTML = deal(parseInt(count/3600))+":";
					},1000)
				}
				
				$('pause').onclick = function(){
					clearInterval(timer);
				}
				
				$("stop").onclick = function(){
					count = 0;
					clearInterval(timer);
					$("id_s").innerHTML = "00";
					$("id_m").innerHTML = "00:";
					$("id_h").innerHTML = "00:";
					
				}
			}
		</script>
	</head>
	<body>
		<div id="M">
			<div id="content">
				<span id="id_h">00:</span>
				<span id="id_m">00:</span>
				<span id="id_s">00</span>
			</div>
			<input type="button" id="start" value="start">
			<input type="button" id="pause" value="pause">
			<input type="button" id="stop" value="stop" />
		</div>
	</body>
</html>

Javascript成长之路_第1张图片

Day7

BOM(Browse Object Model)

1.概念:BOM为浏览器对象模型,浏览器通过调用系统对话框向用户显示信息有三个常用函数
1.1alert()
弹出警示框,内容为参数
1.2confirm()
弹出一个带有确认和取消的警示框,点击确认返回true,取消返回false
1.3prompt()
弹出一个带有输入框的提示框
返回值为输入的内容,若内容为空则返回null

2.window.open()
expr1:要加载的url
expr2:窗口的名称后者窗口的目标
expr3:一串具有特殊意义的字符串(样式)

open("http://www.baidu.com");//重复点击都会在新窗口加载url
open("http://www.baidu.com","baidu");//重复点击不会在新页面加载url

3.sup(父窗口)和sub(子窗口)

在sup中添加一个open函数跳转到本地的sub网页,sub网页会捕获到一个opener对象,它是当前窗口的父窗口的window对象,可以使用此对象来操作父对象。

4.location属性
window.location和document.location是等效的
location包含当前加载页面的URL(统一资源定位符)的信息
URL是由多个部分组成
protoco//host:port/pathname?search#hash
协议//主机名:端口号/路径/搜索

location.href :		 "http://www.example.com:8080/tools/display.php?section=435#list"
location.protocol:	 "http:"
location.host:		 "www.example.com"
location.port:		 "8080"
location.pathname:	 "/tools/display.php"
location.search:	 "?section=435"
location.hash:		 "#list"

location的方法:
1.assign()
跳转到指定的url
2.reload()
重新加载当前页面,如果传入true,强制浏览器跳过浏览器的缓存,直接从源头加载页面。
3.replace()
用新的页面替换当前页面,并将新页面当作根页面(避免产生历史记录)

5.history属性
浏览器的历史记录
history.length返回当前历史记录的条数
history.back() 返回上一级
history.forward() 前进到下一条历史记录
history.go():传入参数为0会重载当前页面,传入正数会前进对应数量的记录,传入负数会后退对应数量的记录。

DOM

1.DOM的概念
DOM:Document Object Model
文档对象模型
DOM中节点的种类一共有三种
在JS中所有的节点都是对象

<div id="d1" name="con" class="txt">这是一段话</div>
//1.元素节点
<div></div>
//2.文本节点
这是一段话
//3.属性节点
id="d1" name="con" class="txt"

2.获取元素节点的方法

种类		方法
id			getElementById()
class		getElementsByClassName()
tagname		getElementsByTagName()
name		getELementsByName()

//返回的是符合条件的所有元素组成的数组

//注意getElementsByName() 不支持从某一个节点查找子节点的元素节点
//一下方法是不支持的
 var divObject = document.getElementById("div1");
 var nodes = divObject.getElementsByName("world");
 alert(nodes);

元素节点的属性:
1.tagname 标签名
2.innerHTML 获取元素节点的内容(包括HTML)

访问这些元素使用 元素节点.属性
注意访问style样式中
访问background-color属性需要这样写a.style.backgroundColor

//根据不同的获取元素节点方式获取节点
function $(arg){
switch(arg[0]){
	case "#" : return document.getElementById(arg.substring(1));
		break;
	case "." : return document.getElementsByClassName(arg.substring(1));
		break;
	default:
		var str = arg.substring(0,5);
		if(str == "name=")
			return document.getElementsByName(arg);
		else return document.getElementsByTagName(arg);
			break;
				}
			}

3.获取节点样式
//getComputedStyle(元素节点)[待查找的样式]

var btnObject = document.getElementById('p1');
alert(getComputedStyle(btnObject)["backgroundColor"]);
4.attribute方法
//get/setAttribute()		获取/设置属性值
//removeAttribute()			删除属性

//元素节点.attribute方法和元素节点.属性方法的区别
1.class属性访问的区别,点操作是ClassName,attribute是class
2.attribute对用户自定义的属性是支持的,点操作是不支持的
3.attribute支持删除属性的操作

5.元素节点的属性
childNodes可以获取当前节点下的所有子节点
这些节点有三个属性nodeName/nodeType/nodeValue

节点类型    		nodeName		nodeType	nodeValue
元素			元素名称			1			null
属性			属性名称			2			属性值
文本			#text			3			文本内容(不包含HTML)

firstChild() 快速找到节点的第一个子节点
lastChild() 快速找到节点的最后一个子节点

元素节点.parentNode			返回该节点的父节点
元素节点.previousSibling		返回该节点的前一个子节点
元素节点.nextSibling			返回该节点的后一个同级节点

attributes可以返回元素节点的所有属性的集合
集合是无序的并且没有重复数据

Day8

1.document.write方法
直接使用此方法会将原有的内容覆盖

2.创建节点的方法发:

createElement("标签名")		//创建元素节点
createTextNode("文本内容")		//创建文本节点
parent.appendChild(node)		//将节点添加到parent的子节点末尾

3.insertBefore()

parent.insertBefore(newNode,oldNode);
将newNode插入到oldNode之前

4.元素节点的操作方法

//replaceChild()
	parent.replace(newNode,oldNode);
//cloneNode()
	node.cloneNode()   参数默认是false,改为true会将innerHTML也复制
//removeChild()
	parent.removeChild(node)		删除节点node

Day9

事件详解

1.1常见的交互事件

//鼠标单击
onclick()
//鼠标双击
onabclick()
//鼠标划过
onmouseover()
//鼠标按下了
onmousedown()
//鼠标弹起了
onmouseup()

1.2关于HTML页面的常用交互事件

//表单的提交事件
form.onsubmit()
//文本框的聚焦事件
text.onfocus()
//文本框的失去焦点事件
text.onblur()
//当文本框内容发生改变并且生效时,触发
text.onchange()
//当有内容输入时
text.oninput()

2.事件对象

/*
	当有某个事件发生时,会产生一个事件对象,这个事件兑现包含所有与该事件有关的信息,通过事件绑定的函数中会自动传入一个隐藏参数event
*/

```javascript
text.onchange = function(e){
	//e中包含所有关于此事件的信息
	console.log(e);
}

3.事件对象的常用属性

e.clientX	可视区域鼠标指针的横坐标	
e.clientY	可视区域鼠标指针的纵坐标
e.pageX		页面左上角的横坐标
e.pageY		页面左上角的纵坐标
e.offsetX	针对目标元素的左上角为原点的横坐标
e.offsetY	针对目标元素的左上角为原点的纵坐标

4.键盘事件

//通过按下键盘的字符键触发
document.onpress = function(){}
//通过按下键盘的任意键触发
document.keydown = function(){}

常用做快捷键的三个属性
altKey ctrlKey shiftKey

可以根据三种属性判断用户按下的键是否为其中之一
document.keydown = function(e){
console.log(e.altKey,e.ctrlKey,e.shiftKey);
//如果按下了ctrl+shift  则输出  false,true,true

5.事件流
两种事件流模型
1.冒泡型事件流
从最特定的事件到最不特定的事件
2.捕获型事件流
从不特定的事件到最特定的事件
事件捕获的思想就是不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件
阻止冒泡的方法,在最里层添加阻止的方法
e.preventPropageation();

6.事件代理(事件委托)
事件代理的原理用到的就是事件冒泡和目标元素,把事件处理器添加到父元素,等待子元素事件冒泡,并且父元素能够通过target判断是哪个子元素,从而做相应处理
利用事件冒泡原理,将本应该添加给某元素的某事件委托给父级元素

7.事件默认的行为的阻止

//JavaScript事件本身所具有的属性,例如a标签的跳转
//Submit按钮的提交右键菜单,文本框的输入等
//阻止默认行为的方式
event.preventDefault();
event.returnValue = false;
reutrn false;
//在事件相应函数中添加上述代码即可

8.DOM2级事件
1.添加监听器
可以为元素添加多个处理函数,触发时,按照添加顺序依次执行

o.addEventListener(事件名, 响应函数, 布尔值);

2.移除监听器

o.removeEventListener(事件名, 函数);

3.事件的冒泡与捕获
在绑定事件时采用事件捕获还是事件冒泡,在定义事件监听器时可以设置第三个参数,若为false则为事件冒泡,为true就是事件捕获

<div> <span></span> </div>
//事件捕获
点击span标签,相应顺序为div > span
//事件冒泡
点击span标签,相应顺序为span > div

9.cookie
1.cookie的基本操作增删改查
1.1新增cookie

document.cookie = "key=value";
//新增带有有效期限的cookie
var oDate = new Date();
oDate.setDate(oDate.getDate()+day);
document.cookie = "cookie1=value;expries="+oDate;

1.2查询cookie

document.cookie
//若存在多个cookie则用字符串的方式返回所有的cookie
"cookie1=value;cookie2=valuecookie3=value"

1.3改cookie

document.cookie = "cookie=value";
//旧的cooki将会被覆盖

1.4删除cookie

在创建cookie的时候可以同时设置该cookie的有效期限
将有效期限设置为一个过去的时间就可以使cookie失效
从而间接删除了cookie

Day10

正则表达式

1.创建正则表达式的方式
1.1使用字面量创建正则表达式

//匹配abc字符串,忽略大小写,全局匹配
var reg = /abc/ig;

1.2使用构造函数创建正则表达式

var reg = new RegExp("abc");

2.正则表达式的修饰符

i:忽略大小写
g:进行全局匹配

3.方法
3.1match
字符串方法
将匹配到的元素按顺序放入一个数组中返回

var arr = str.match(reg);

3.2test
正则表达式的方法
对字符串进行正则匹配,匹配到返回true,否则返回false

var boolVal = reg.test(str);

3.3search
字符串方法
查找符合规则的字符串,只返回第一次匹配到的位置

var temp = str.search(reg);

3.4replace
字符串方法
将符合规则的字符替换为指定的字符串

var str = str.replace(reg,newStr);

3.5split
字符串方法
将字符串按照某一规则分割

var arr = str.split(reg);

3.6exec
正则表达式方法
将匹配成功的内容放到数组中,如果没有匹配成功则返回null
每次匹配起始位置从上一次匹配结束开始

var val1 = reg.exec(str);
var val2 = reg.exec(str);
var val3 = reg.exec(str);

4.正则表达式的语法

  .  除了换行符之外的所有字符
  *  进行0-n次重复匹配
  +  进行1-n次匹配,至少匹配一次
  ?  进行01次匹配    
  []  限制返回,[0-9] 表示数字09
  \w  数字字母下划线等同于[0-9a-zA-Z]
  \W  非数字字母下划线
  \d  数字 等同于[0-9]
  \D  非数字  
  \s  空格
  {m,n}  至少匹配m次至多匹配n次
  /^  匹配开始   $/  匹配结尾
  |  
  ()  分组,将内容作为一个整体进行匹配
  
//可以使用RegExp对象获取匹配的内容
RegExp.$1

Day11

ES6

1.概念
ES6全程ECMAscript6 2015年发布,是javascript的新版本
2.let和const的使用

let 用来声明变量,语法和var类似但是所声明的变量只在代码块内有效
	存在块级作用域,不存在声明提升,不允许重复声明(包括普通变量和函数)

const 声明一个只读变量,声明过后值不能发生改变,一旦声明就必须初始化

3.ES6的解构赋值

数组解构
var [a,b] = [1,2];//a=1,b=2
var [a=3,b] = [];//a=3,b=undefined
//当解构赋值有匹配结果且匹配结果为undefined时,自动将默认值作为返回值

对象模型的解构
let obj = {p:{start:1,line:5}};
let {p:{start,line}} = obj;
console.log(start,line);//1  5
//这里的p为匹配模式
//变量应该和属性同名,在赋值的时候会自动查找同名的属性

4.模板字符串
将变量或者表达式直接嵌入字符串
用反引号( )拼接字符串

`
	反引号中可以保留HTML的代码格式,例如
	

`
反引号中使用${}来给变量占位,将使用的变量直接放入大括号中

5.箭头函数

1.只含有一个表达式
2.含有多条语句
3.this的指向问题

ES5定义函数:

function foo(){}

ES6定义的函数

foo = () => {}
//传递参数
foo = (a) => {return a;} 

6.this的指向问题
在ES6中:
定义箭头函数后,函数中的this是指向函数定义的作用域

箭头函数可以绑定函数的作用域

var name = "jjj";		
var obj = {
	"name":"bob",
	"foo":function(){
		let s = () =>console.log(this.name);
		return s;
	}
}
var f = obj.foo();
f();
//在定义的对象函数中再定义一个箭头函数,在箭头函数中输出name并返回函数名	
//1.该函数所在的作用域:因为此函数是在对象函数中定义的,所以作用域在foo函数中
//2.作用域指向对象foo指向的对象是obj

Day12

1.this的指向问题

//每一个函数都有一个内置变量this,this指向当前函数的主人
常见的this有下列三种
//1.在全局定义的函数,this指向的是window对象
function foo(){
console.log(this);
}
//2.在某个对象中创建的函数,this指向当前对象
var person = {
	'name':'zhangsan',
	'age':18,
	'run':function(){
	console.log(this.name);
	}
}
//3.事件驱动函数中的this指向的是当前事件对象。

2.改变this的指向
//1.call
第一个参数为强制指向的对象
后面的参数为传入的参数

function foo(){
	alert(this);
}

foo.call("call");

//2.apply
第一个参数为强制指向的对象
第二个参数为一个列表,存放传入的参数

function foo(){
	alert(this);
}
foo.apply("apply",[0,1,2,3]);

//3.bind
预设this的指向
改变this的指向并生成新函数返回

var foo = foo.bind("bind");

3.ES6新增数组的方法
1.Array.from()

var aLi = document.getElementsByTagName("li");
var aLi = Array.from(aLi);

2.find()

功能:在数组中查找符合条件的元素,只要找到一个符合条件的元素终止遍历
arr.find(12);

//findIndex()
找到符合条件的元素返回元素下标

4.合并对象

//将所有对象合并到第一个对象中
Object.assign(Object1,Object2...)

5.拖拽三剑客
onmousedown
onmouseup
onmousemove

Day13

1.面向对象的概念

//类:一类具有相同特征的事物的抽象概念
//对象:具体的一个对象,唯一的一个实例

2.使用构造函数的方法创建一个类

function Person(name, age){
//	添加类的属性
	this.name = name;
	this.age = age;
	//添加类的方法
	this.showInfo = function(){}
	this.showName = function(){}
}

上述创建的对象的所有方法都是独立的
3.prototype原型对象

在每一个函数上都有一个原型对象prototype
在prototype对象上添加的方法,构造函数创建的对象将共享原型上的所有方法

4.继承和多态
继承:将父级的属性和方法复制给子级
多态:相同类的不同表示状态

Boy类继承Person类
//继承属性
function Boy(name,age,height){
	Person.call(this,name,age);
	this.height = height;
}
//方法继承(原型链继承)
Boy.prototype.showInfo = Person.prototype.showInfo;

instanceof 判断一个对象是否由一个构造函数创建的
alert(b instanceof Boy);//true b是由Boy类创建的

5.ES6中类的概念

使用ES6的语法创建一个类
class Person{
	constructor(name, age, gender){
	this.name = name,
	this.age = age,
	this.gender = gender
	}
	//创建类的方法
	sayHello(){
		console.log("hello world");
	}
}

类的继承
class Boy extends Person{
	constructor(name,age,gender,height){
		//继承父一级的属性
		super(name,age,gender);
		this.height = height;
	}
	//新添加的方法
	sayBye(){}
}

5.运动和游戏开发

//运动框架
//1.在设置定时器之前终止上一个定时器
//2.if...else  将运动停止和分开

你可能感兴趣的:(web前端,javascript)