变量提升
var 在代码执行之前,把所有的var声明的变量提升到当前作用域的最前面 只提升声明,不提升赋值
函数提升
会把所有函数声明提升到当前作用域的最前面
函数提升能使函数声明更加灵活
函数表达式不存在提升现象
函数提升出现在相同作用域当中
函数参数
动态参数 arguements
是伪数组 只存在函数中 不能使用数组里边的函数
剩余参数 是真数组
function getSum(...other){
console.log(other);
}
getSum(1,2,3,4,5);
剩余函数使用场景
用于获取多余的实参
剩余函数和动态参数区别是什么 开发时长使用哪一个
动态参数是伪数组
剩余参数是真数组
开发中使用剩余参数想必也是极好的
展开运算符也是...
const arr = [1,2,3];
console.log(...arr);
console.log(Math.max(...arr));
...arr === 1,2,3
展开运算符不会修改数组
数组没有求最大值的所以用展开运算符来进行求最大值
合并数组
arr = [...arr1,arr2];
展开运算符主要作用是
可以把数组展开,可以利用求数组的最大值以及合并数组等操作
展开运算符和剩余参数有什么区别
展开运算符主要是数组展开
剩余参数在函数内部使用
箭头函数
目的:引用箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁
使用场景:更适用于那些本来需要匿名函数的地方
只有一个参数时可以省略小括号 const fn = (x,y) =>x+y;
箭头指向是省略return
const fn = x =>x;
箭头函数可以直接返回一个对象 返回的对象用括号括起来()
const fn = (uname)=> ({name:uname});
console.log(fn('刘德华'));
箭头函数属于表达式函数,一次不存在函数提升
箭头函数只有一个参数时可以省略括号()
箭头函数函数体一行代码时可以省略花括号{},并自动作为返回值被返回
加括号的函数体返回对象字面量表达式
箭头函数没有arguements动态参数,但是又剩余参数 ...arr
箭头函数没有this指向
箭头函数不会创建子级的this,他只会从自己的作用域链的上一级
解构
数组解构
是将数组的单元值快速批量赋值给一系列变量的简洁语法
const [max,min,avg] = [3,1,2];
console.log(max);
console.log(min);
console.log(avg);
数组交换
const a = 1;
const b = 2;
[b,a] = [a,b];
立即执行函数前面也要加分号
数组解构前面必须加分号
(function(){})(); 立即执行函数
[]开头的上一步要加;
忽略赋值
const [a,b,,d] = [1,2,3,4];
console.log(d);
二维数组解构
const [a,b,[c,d]] = [1,2,[3,4]];
对象解构
const {uname,age} = {uname:'pink',age:123};
console.log(name,age);
解构的时候变量名要跟对象名相同 不然为underfined
如果有一样的话这样改名
const {uname:username,age:userage} = {uname:'pink',age:123};
console.log(name,age);
解构数组对象 对象是无序的只需要变量的名字和数组变量的名字一样即可
const pig = [{
name:'pig1',
age:2
}]
const [{name,age}] = pig;
多级对象解构对象要用冒号隔开
const pig = [{
name:'pig1',
age:2,
family:{
mother:123,
father:456
}
}]
const [{name,age,family:{mother,father}}] = pig;
forEach遍历数组 实际上就是回调i函数 不返回就是遍历 加强版的for循环 适合遍历数组都西昂
const arr = ['red','green','blue'];
arr.forEach(function(item,index){ item必须写遍历数组 index可写遍历索引号
console.log(item);
console.log(index);
})
arr.forEach((item)=>console.log(item)); 箭头函数
</script>
filter 过滤方法 创建一个新的数组返回一个新的数组 return用于返回过滤的数组
const arr = [10,20,30];
const newarr = arr.filter((item,index)=> {
return item>=20;
})
console.log(newarr);
DOM 元素的 tagName 属性返回元素的标签名,且始终以大写形式表示。例如,<a> 标签的 tagName 值为 "A"。
深入对象和构造函数
创建对象三种方式
1字面量创建对象
const obj = {}
2new Object创建对象
const o = new Object({})
3构造函数创建对象
构造函数是一种特殊的函数,主要用来初始化对象 可以通过构造函数快速创建多个类似的对象
构造函数有两个约定 命名时大写开头 只能通过new操作符执行function Pig(uname,age) {
this.uname = uname;
this.age = age;
}
let son = new Pig('佩奇',6);
创建对象 只要加new就自动创建一个空对象 构造函数里边的this指向新对象 执行构造函数
代码,修改this,添加新的属性 返回新对象 this相当于obj
使用new关键字调用函数的行为被称为实例化
实例化构造函数时没有参数时可以省略()
构造函数无需写retrun,返回值即为新创建的对象
构造函数内部的return返回的值无效,所以不要写return 返回值时默认创建的对象
new Object() new Date()也是实例化构造函数