解构赋值

不能对undefined和null解构
在函数 解构 的 参数 中 如果不传参数,默认是 undefined 
数组解构赋值:
	用[]表示,中间加变量名,表示数组中每一个元素
	例如:[a,b,c]=[1,2,3]
			[a,,c]=[1,2,3] c表示3
			[,,c]=[1,2,3] c表示3
	数组也可以看成一个键为下标的对象
对象解构赋值:
	用{}表示,中间用对象的键:变量名来表示,如果变量名和键一样,可以省略 :变量名
arguments关键字:
	表示当前函数的所有参数,是一个形似数组的对象,可以用 ...变量名表示,也可以使用 for ... of 迭代

this指向问题

1.在 js 上下文中 指向 window ,上下文指script标签中的内容
2.在 普通函数中 ,不在严格模式下 this指向 window ,在严格模式下,指向 undefined
3.在 构造函数中,this 指向当前对象
4.在 箭头函数中,指向父级作用域this指向的对象

函数传参:

函数在传参的时候,如果不传,则为undefined,此时如果有默认值会取默认值,注意:默认值只有在实参为undefined的时候才会取默认值

构造函数:

构造函数本身和普通函数没有区别,构造函数通过new来构建对象,构造函数的参数就是属性,给属性赋值需要添加this加以区别,方法的定义前面也要加this 例如:this.sum=function(){}

不定项参数:

在方法的参数末尾 加...变量名,这个表示不确定有几个参数,可以传入多个,这个变量为数组

展开运算符…:

数组或者对象在 解构 的时候 可以使用展开运算符,用来包揽后面的所有值,只能出现在尾部,并且只能有一个
在合并的时候,可以有无数个 合并数组 :
									let arr=[1,2,3]
									let arr2=[4,5,6]
									let newarr=[...arr,...arr2];
							合并对象操作与之相同,要注意如果键相同会覆盖

改变this的指向:

apply(要指向的对象,[]):
call(要指向的对象,...参数)
bind(要指向的对象,...参数):注意这个方法是返回该函数对象 不会立即调用函数,需要在后面加()才可以调用

原型链 prototype (Java中的多例,js中的原型)

原型链中的方法相当于Java中的成员方法,只能对象调
原型链有点像 Java 中的继承关系
原型链中的this 指向 调用它的对象
作用:扩展方法
	1.使用:函数.prototype.方法名=function(){}
	示例	
			Date.prototype.format=function (){
				console.log("s")
			}
	相当于给Date的对象扩展了一个 format 方法
	
	可以一次定义多个方法 :
							函数.prototype={
								format:function(){
									
								}
							}
	
	注意:只有自己的构造函数 才可以一次定义多个 方法
	2.使用:对象.__proto__.方法名=function(){}
		注意这种方法只能给此对象添加方法,这个构造函数的其他对象不共享

window 定时器:

setTimeout(fn,间隔的时间,毫秒):
	间隔一段时间后执行一次,执行完结束
	使用此方法实现轮询:
						let b=0;
						function a(){
						  b++;
						  console.log("---")
						  let m=setTimeout(a,1000)
						  if (b==10)clearTimeout(m)
						}
						setTimeout(a,1000)
						  
setInterval(fn,间隔的时间,毫秒):
	每间隔一段时间执行一次,要停止的话,使用 clearInterval(定时器的返回值)

location 获取 网址(URL)的组成:

完整的网址由 协议 、主机名(域名) 、端口号、请求地址、请求参数、锚点组成
 用location的属性获取URL各个组成部分:
	location.href: 获取完整的 URL 
	location.protocol : 获取协议
	location.hostname : 获取主机名
	location.port : 获取端口号
	location.pathname : 获取请求地址
	location.search : 获取请求参数
	location.hash : 获取锚点

document 操作:

选择器:
	document.getElementById() :根据 id 选择 元素
	document.getElementsByTagName() : 根据 标签名 获取 元素,获取到的是形似数组的对象
	document.getElementsByClassName() : 根据 class 获取 元素,获取到的是形似数组的对象
	document.getElementsByName() : 根据 name 获取 元素,获取到的是形似数组的对象
操作元素的属性:
	元素.属性 可以获取到元素自带的属性 修改可以直接赋值修改
	如果上面操作拿不到的属性可以用以下方法获取和操作:
		元素.getAttribute( key ) :获取属性名为key的属性值
		元素.setAttribute(key,value) : 设置(修改) 属性
		元素.removeAttribute(key) : 删除 属性名为 key 的属性

css选择器

document.querySelectorAll() : 获取匹配到的所有元素
document.querySelector()	: 获取匹配到的第一个元素
注意:使用这个选择器选择 id 需要在前面加# 选择 class需要加 .
可以使用 css 语法来获取元素,前面可以加父级标签,这样就更能准确的获取元素