教你如何编程 -JavaScript

JavaScript
ESCMAScript(核心)
变量
关键字
一组特定用途的关键字:Var、if、else、do、while、for、in …
var、let用于定义变量,使用了let定义变量不能重复,使用const定义的叫常量,定义之后不能改变
保留字
未来有可能成为关键字
变量命名规则
由数字、字母、下划线和美元符号的一种或几种组成,不能以数字开头,严格区分大小写
数据类型
基本(原始)数据类型
数字(一般用于计算)
number
字符串
string
布尔
Boolean
undefined
undefined
null
object
Symbol 类型 表示独一无二的值
使用console.log(typeof a);//在控制台看数据类型
引用(复合)数据类型
对象
object

	类型转换
		显式转换
			把字符串转换为数字
				var num1 = parseInt();  //把字符串转换成整数数值(取出整数部分)
				parseFloat();   //把字符串直接转换成浮点数(小数)
				number();   //\n把字符串直接转换成数字(只有纯数字才能转换,如果里面包含有字母,就直接转为NAN【不是数字】)
			把数字转换为字符串
				console.log(string(num));    //直接转化为字符串
				console.log(booLean(0));     //转换为布尔值,只有值为0,输出false,其他值输出为true
		隐式转换
	运算符
		算术运算符
			+
			-
			*
			/
			%
				求余数  求n/m的余数    n/2看结果可知道n为奇偶
			**
				求次方 n**m   求n的m次方
		赋值运算符
			=
				直接赋值
			+=
				box+=10;  //box结果为原先的box值加10
			-=
				box-=10;  //box结果为原先的box值减10
			*=
				box*=10;  //box结果为原先的box值乘10
			/=
				box/=10;  //box结果为原先的box值处以10
			%=
				box%=10;  //box结果为原先的box值处以10的余数
		关系运算符
			>
				n>m;  //当结果为正确时,打印出来的结果为true,反之为false
			<
			<=
			>=
			==
				用于判断是否相等,只判断数字是否相等
			!=
				用于判断是否不相等,不光比较数值,还比较类型
			===
				全等,精确相等,判断等号前后是否完全一致,不光比较数值,还比较类型
			!==
				只判断数字是否不相等
		单目运算符
		双目运算符
			1+2;
		三目运算符(相当于一个if  else判断)
			let res1 = 1 > 2 ? 2 : 3;  console.log(res1)     // let res1 = 表达式1 ? 表达式2 : 表达式3;(如果表达式1的值为true,整个表达式的值为表达式2,反之结果为表达式3)
	程序的基本结构
		顺序结构
			代码从上往下执行
		选择结构(分支结构)
			单分支
				if
					if (){}
				if   else
					if (){}else{}
				switch
					switch (){case:     console.log()      break;    default:  console.log()    break;     }
			多分支
			双分支
		循环结构
			while 循环
				while(条件){语句}
			do while循环
				do{语句}while(条件)
			for循环
				for(初始化表达式;条件;递增表达式){}
			循环嵌套
				外层循环循环一次,能层循环循环一圈
			死循环
				当不知道循环次数时,使用死循环然后再合适的时候结束循环
				while(true){}
				for(;;){}
			跳转,让代码不按既有的顺序循环
				break
					结束整个循环流程
				continue
					结束本次循环,返回循环的头部,进入下一轮循环
	函数:一个函数只执行一个功能,可以反复调用
		function函数
			function 函数名称(){函数中要执行的代码}
			变量的声明提升(面试题)
				在函数内部使用var命令声明的变量,会被提升到函数体的头部,js引擎在执行js时,会先做一个预解析。提前将所都要用到的变量先定义但是没有赋值
				function foo(x){if(x>100){var tmp=x-100;}}\n//等同于\nfunction foo(x){var tmp;if(x>100){tmp=x-100;};}
		函数表达式
			采用变量赋值的方式声明函数
			var 函数名称=function(){函数中要执行的代码}
		内置函数
			parseInt();//parseInt函数  功能:把参数转换成整数
			parseFloat();//parseFloat函数 功能:转换为数字
		函数和事件
			鼠标事件
				but.onclick=function(){}//鼠标左键单击
				ondblclick  鼠标双击
				onmousedown    鼠标按键抬起
				onmousemove  鼠标按键在元素上移动
				onmouseover   鼠标进入
				onmouseout    鼠标移出    (与onmouseover是一对)  他们两个默认冒泡
				onmouseleave    鼠标移出(与onmouseenter是一对)他们两个默认不冒泡
				onmouseenter     鼠标移入
				oncontextmenu   鼠标右键点击
			根据id名获得HTML中的元素
				let btn=document.getElementById('btn')
			div.innerHTML获取元素内部的HTML代码
			div.innerHTML='字符串'//相当于替换了DIV内部的原HTML代码
			键盘事件
				Onkeydown   键盘按键按下
				Onkeyup    键盘按键抬起
				Onkeypress    键盘按键按住
			表单事件
				Onblur   失去焦点
				Onfocus    获取焦点
				Onchange     内容修改
		函数的返回值:return
			如果没有return该函数将返回undefined
		arguments 对象
			在函数内部读取所有的参数
			arguments【0】是第一个实参
			arguments【1】是第二个实参
			arguments【‘length’】用于求参数的长度
			arguments.length 用于求参数的长度
			console.log(arguments)  获取所有的实参
		随机数
			Math.random()
				它是一个【0-1)之间的数值
			parseInt(Math.random()*10)
				它是一个【0-9)之间的整数
		作用域
			局部作用域
				局部变量(形参都是局部变量)
					使用var在函数内部定义的变量
					使用let或者const在代码块中定义的变量
			全局作用域
				全局变量(在函数外部声明的)
					全局变量会被同名的局部变量覆盖
		递归函数
			能用循环的都能用递归,但是一般都用循环,循环的效率比递归高
			步骤
				先找临界值
				找本项和上一项的关系
				假设当前函数已经可以用了,调用上一次的结果写出关系式
		构造函数
			函数名(首字母大写)
			属性
				this;//当使用new调用构造函数的时候,会自动创建一个this  是一个{}对象
				this.name=name;this age=1;
			方法
				函数
	数组
		创建
			字面量和构造函数
		方法
			尾部添加:push(改变原数组)
			尾部删除:pop(改变原数组)
			头部添加:unshift(改变原数组)
			头部删除:shift(改变原数组)
			复制数组:slice(不改变原数组)
			删除数组:splice(改变原数组)
			反转数组:reverse(改变原数组)
			按字典方式排序:sort(改变原数组)
			将数组转为字符串:join
			把多个数组合并成为一个:concat(不改变原数组)
			判断是不是数组Array.isArray()
			遍历数组中的每一个元素:arr.forEach(function(v,i){})
			根据return后面的规则一一映射:arr.map(function(v,i){return v*1.3})
			用于过滤满足条件的元素:arr.filter(function(v,i){return v>5})
			累计:arr.reduce(function(v,i){return a+b})
			数组中某个元素第一次出现的位置,找不到返回-1:arr.indexOf()
			数组中某个元素最后一次出现的位置,找不到返回-1:arr.lastIndexOf()
			判断是否数组中的每一个元素都符合某个条件:arr.every(function(v,i){return v>3})
			判断是否数组中有某一个元素符合某个条件:arr.some(function(v,i){return v>3})
			查找元素,返回元素,找不到返回undefined:arr.find(function(v,i){return v===3})
			查找元素,返回元素所在的下标,找不到返回undefined:arr.findIndex(function(v,i){return v===3})
			将可遍历的对象和伪数组以及arguments对象都转化为数组:Array.from
			数组去重:Arrayfrom(new Set(arr))
			数组去重:【...(new Set(arr))】
			判断数组中是否包含某个元素:includes
	字符串
		创建
			字面量
			构造函数
		方法【字符串中的所有方法都不改变原数组】
			获取指定位置的字符:charAt
			复制字符串:slice   substr    substring
			查找某个字符串第一次出现的位置:indexOf
			查找某个字符串最后一次出现的位置:lastIndexOf
			去除字符串两端的空格:trim
			将字符串全部转为小写:toLowerCase
			将字符串全部转为大写:toUpperCase
			替换字符串:str.replace(/b/g,'*')  将字符串中的所有的b替换为*
			将字符串转换为数组:split
			获取某个位置的字符的编码:charCodeAt
			将编码转换为字符串:String.fromCharCode
			判断字符串中是否包含某个字符串:includes
			判断是否以某个字符串开头:startsWith
			判断是否以某个字符串结尾:endswith
			将字符串进行重复:repeat
			查找与正则表达式相匹配的某个字符串第一次出现的位置:search
			对字符串进行正则匹配,返回匹配的结果:match
	Math
		创建
			字面量
			构造函数
		方法
			Math.PI     Π值
			Math.E     常数e的值
			Math.abs    绝对值
			Math.max   最大值
			Math.min   最小值
			arr.indexOf(Math.max(...arr))    获取数组中的最值的位置
			Math.floor  求小于参数的最大整数值
			Math.ceil   求大于参数的最小整数值
			Math.round   四舍五入
			Math.pow   求次方
			Math.sqrt    求平方根
			Math.sin     正弦,它的参数是弧度,180度对应的Π值
			Math.random   随机数
			随机m-n之间的整数:parseInt(Math.random()*(n-m+1))+m
	Date
		创建
			字面量
			构造函数
				var now=new Date();     等同于    now.toString()
		方法
			getDate()    返回一个月中的某一天  (1-31)
			getDay    返回一周中的某一天  (0-6)0代表周一
			getMonth    返回月份 (0-11)   0代表一月
			getFullYear   返回年份
			getHours   返回当前小时    (0-23)
			getMinutes   返回当前分钟   (0-59)
			getSeconds  返回当前秒   (0-59)
			getMillisenconds   返回毫秒数(0-999)
			getTimes  返回1970年至今的毫秒数
			设置即是将上面所有的get改为set
			将日期转为毫秒数:Date.parse(new Date())   将日期转换为 相对于1970年的毫秒数
	定时器
		设置
			let timer=setInterval(function(){},1000)
		清除
			clearInterval(timer)
	延时器
		设置
			let timer=setTimeout(function(){},1000)
		清除
			clearTimeout(timer)
DOM(文档对象模型)
	属性操作
		自定义
			className=''
		设置
			添加class名:classList.add
			删除class名:classlist.remove
			判断是否包含某个类名:classList.contains
			替换类名:classList.replace('a','b')将a替换为b
		最终样式
			let style=box.currentStyle||getComputedStyle(box)
		获取自定义样式的值:getAttribute
	元素操作
		CRUD
			增(创建)
				创建元素document.createElement()
				添加子元素:appendChild()
				创建文本节点:createTextNode
				创建注释节点:createComment
				复制元素节点:cloneNode(true)复制整个元素包括标签里的内容
				复制元素节点:cloneNode(false)只是单纯的复制一个空标签
				ul.insertBefore(li,ul.firstChild)将li标签添加为ul里的第一个子元素
				ul.insertBefore(li,ul.lastChild)将li标签添加为ul里的最后一个子元素
				box.insertBefore(span,p)将span标签插到box标签里的p标签之前
				document.createDocumentFragment()    文档碎片     作为容器使用   ,避免频繁使用操作dom,减少渲染次数
			删(删除)
				this.remove删除当前元素
				this.parentNode.remove删除当前操作的父元素
				a.removeChild(b)将 a标签里的子元素b删除
			改(修改)
				a.replaceChild(b,c)将a标签中的c标签替换为b标签
			查(查询)
				document.querySelector()
				document.querySelectorAll()
				document.getElementById()
				document.getElementsByClassName()
				document.getElementsByName()
				document.getElementsByTagName()
	节点之间的关系
		childNodes获取子节点
		children获取子元素
		parentNode获取父节点
		parentElement父元素
		firstChild第一个子节点
		firstElementChild第一个子元素
		lastChild最后一个节点
		lastElementChild最后一个子元素
		nextSibling下一个节点
		nextElementSibling下一个元素节点
		previousSibling上一个节点
		previousElementSibling上一个元素节点
		节点类型:nodeType
		节点的值:nodeValue
	Element
		offsetWidth    元素可视区域的宽度(当元素被隐藏时值为零)
		offsetHeight    元素可视区域的高度(当元素被隐藏时值为零)
		offsetParent     返回最靠近当前元素的,且定位属性值不为static的父元素(类似于包含块)
		offsetLeft   元素距离offsetParent的左边界偏移量
		offsetTop   元素距离offsetLeft的右边界的偏移量
	事件
		HTML事件
			onload:当页面加载完毕时触发
			onselect:当用户选择文本框(input或者texteara)内容改变或者失去焦点后触发
			onchange:当文本框(input或texteara)内容改变且失去焦点后触发
			oninput:当(input或textarea)内部输入输入内容时触发
			onfocus:当页面或元素获得焦点时在window及相关元素上面触发
			onresize:当页面或者框架的大小发生变化时触发
			onblur:当页面或者元素失去焦点时触发
			onscoll:当用户滚动带滚动条的元素时触发
			将元素滚动到可视区域(写聊天框时,一直使后面发送的内容显示)li.scrollIntoView();
		鼠标事件
			oncontextmenu:鼠标右键事件
			onmousedown当鼠标点击时
			btn.onmousedown=function(e){console.log(e.button)}          0是左键    1是滚轮     2是右键
		键盘事件
			onkeyup   当键盘按键释放
			onkeydown  当键盘按键被按下
			onkeypress   当用户按下键盘上的字符键触发
			ctrlkey   Boolean类型  表示事件发生的时候ctrlkey键是否被按下
			altkey    Boolean类型 表示事件发生时alt键是否被按下
			shiftkey      Boolean类型   表示发生事件的时候shift按键是否被按下
			获取键码的兼容性写法(通过键码判断用户是否按下了某个键)let keyCode=e.keyCode||e.which
			组合键判断(即判断用户是否同时按下了两个键)
				e.ctrlKey&&e.keyCode==13;  判断是否同时按下了ctrl和回车键
		事件对象
			获取
				let e=evt||window.event
			属性
				event.button     当事件触发时哪个按键被按下
				clienkX    鼠标光标相对窗口的左边界的位置
				clienkX    鼠标光标相对窗口的右边界的位置
				screenX  鼠标光标相对于屏幕的X坐标
				screenY    鼠标光标相对于屏幕的Y坐标
				offsetX  鼠标光标相对于事件源(e.target)的X坐标
				offsetY    鼠标光标相对于事件源(e.target)的Y坐标
				pageX  鼠标光标相对于页面的X坐标
				pageY  鼠标光标相对于页面的Y坐标
			事件源
				target    事件在哪个元素上产生
			事件冒泡
				阻止事件冒泡的兼容性写法:e.stopPropagation();e.cancelBubble=true;
		阻止默认事件
			e.preventDefalt()       W3C的方式
			e.returnValue=false        IE的方式
		DOM2添加事件监听器
			ele.addEventListenter(事件名,处理函数(回调函数),布尔值)【注:事件名不带on,是一个字符串,它默认是冒泡(false)】
			IE兼容写法  attachEvent(事件名,处理函数)【注:事件名带on,它默认是捕获】
		DOM2移除事件监听器
			removeEventListener(事件名,处理函数,(false或者true))【注:事件名不带on,是一个字符串,它默认是冒泡】
			IE兼容写法       detachEvent(事件名,处理函数)【注:事件名带on,它默认是捕获】
	正则
		创建
			字面量
			构造函数
				let reg=new RegExp('sss',ig)        i忽略大小写     g  全局匹配
		方法
			reg.test('a'):返回布尔值,表示当前正则表达式能否匹配参数字符串
				如果test匹配的正则表达式含有g
				,则每一次test方法都从上一次结束的位置开始向后匹配
			reg.exec('a')     用于检索字符串中正则表达式的匹配,返回一个数值,其中存放的是所有匹配的结果,如未找到匹配,返回null
		字符串方法结合正则使用
			str.replace(reg,'b')    将str中满足reg的字符串替换为b
			str.search(reg)     返回与正则 表达式相匹配的第一个值所在的下标,不存在返回-1
			str.match(reg)    返回str中所有匹配reg的结果
		限定符
			*      匹配前面的子表达式零次或多次
			+       匹配前面的子表达式一次或多次
			?    匹配前面的子表达式零次或一次
			{n}     匹配前面的子表达式n次
			{n,m}     最少匹配n次,最多匹配m次
		字符匹配符
			[0-9]     匹配0-9中的任意一个字符
			[^0-9]    匹配除了0-9的任意一个字符
			[a-z]     26个小写字母
			[A-Z]    26个大写字母
			\d    相当于【0-9】
			\D   相当于【^0-9】
			\w   相当于【0-9a-zA-Z】
			\W   相当于【^0-9a-zA-Z】
			\s   匹配空格(包括换行符,制表符,空格符等)
			\S     匹配非空格的字符
			.        匹配除了\n  (换行) 之外的任何字符
		定位符
			^    限定开始(匹配输入字符串的开始位置)
			$      限定结尾(匹配字符串的结束位置)
		转义符
			\       用于匹配那些特殊字符(即匹配在正则中有特殊含义的字符)
		选择匹配符
			|      相当于or
		正则分组
			/hahaha/       相当于/(ha){3}/
			捕获型分组
				被正则表达式匹配到的内容会被暂存起来,用$1可以获得被第一个分组捕获的内容
			非捕获型分组
				(?:)当不需要捕获某个分组的时候可以使用它
	this关键字
		(在严格模式下,普通函数的this指的是undefined)
		非严格模式下,在全局环境下使用this,他指的就是顶层对象window
		(普通函数里的this被谁调用它就指向谁)
		(构造函数使用new调用,this指向的是这个函数)
		(构造函数不使用new调用,this指的还是全局)
		(普通函数里的this被谁调用它就指向谁)
		bind 方法
			bind方法用于将函数体内的this绑定到某个对象,然后返回一个新的函数
	let关键字
		let(定义变量)在代码块中声明的变量都是局部变量
	const关键字
		const 定义常量,const声明的变量不能改变值
	箭头函数
		let f=()=>{}
	变量解构
		解构数组
			let [a,b,c]=[1,2,3]
		解构对象
			let {f,b}={b:0,f:1}
	...     扩展运算符
		将数组展开    ...arr
		合并数组      [...[1,2],...[3,4]]//[1,2,3,4]
		取出参数对象的所有可便利属性       {...{a:1,b:2}}///{a:1,b:2}
	复制对象
		Object.assign({对象1},{对象2})//把对象2里的所有内容拷贝到对象1里
	Set
		数组去重
			[...(new Set([1,2,2]))] //[1,2]
		方法
			size    获取Set的长度
			add   添加
			delete    删除
			clear   清空
			has   判断
		遍历
			set.forEach((v) => console.log( v))
	Map
		方法
			set     设置
			get     获取
			has    判断
			delete   删除
			clear      清除
			size    长度
		遍历
			map.forEach((k,v)=>console.log(k,v))
			for(let [k,v] of map){console.log(k,v)}
	class  类
		constructor    默认方法
		继承   extends
			super()
		static   关键字   方法前面添加此关键字,此方法不会被继承,只能直接通过类调用
	JSON   字符串和对象的转换
		JSON.parse()    将JSON字符串转换为对象
		JSON.stringify()     将对象转换为JSON字符串
	eval   函数
		计算某个字符串,并执行其中的JavaScript代码
	localstorage
		设置
			localStorage.setItem('user','123')
		获取
			localStorage.getItem('user')
		删除
			localStorage.removeItem('user')
		清空
			localStorage.clear()
BOM(浏览器对象模型)
	location对象
		href:返回完整的URL
		hash:返回从#开始的URL
		seach:返回从?开始的URL
	history对象
		后退一页:history.go(-1)          history.back()
		前进一页:history.go(1)       history.forwary()
		前进两页:history.go(2)
	事件
		window.onresize   事件会在窗口或框架被调整大小时发生
		window.onload     事件放生在页面加载完毕时
		window.onscroll    监听页面的滚动
	方法
		assign:加载新的文档
		reload:重新加载当前文档
		replace():用心的文档替换当前文档
		open:打开一个新的浏览器窗口或者查找一个已命名的窗口
		close:关闭浏览器窗口
		confirm:显示一个带有提示信息和确认及取消按钮的警告框
		prompt:显示可提示用户进行输入的对话框
		alert:弹出警示框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值