1.let
1.在大括号中,才有let是块级作用域 :防止循环变量变成全局变量
2.不存在变量提升 就是不会预解析
3.会存在暂时死区性 就是在外部定义var num,在funtion也存在let,这个let num会让区域绑定,不访问外部的num
2.const
1、具有块级作用域
const只在自己的{}内有效 不会影响其他的作用域
2.使用const设置常量一定要初始值
3.常量就是值(内存地址)不能变化的值
注意:复杂数据类型例如是数组:
const =[123,abc];arr[0]=321;
这样修改里面的值是可以的 对于复杂数据类型可以修改 就是修改内部的值是可以的,但是不可以重新赋值
3.解构赋值
es6中允许从数组中提取值,按照变量对应的位置,对变量进赋值。对象也可实现解构
let arr = [1,2,3];
let [a,b,c] = arr;/* []这个不是数组,而是解构的意思,里面全部都是变量 可以实现一对一完美对应
console.log(a);输出1
console.log(b);输出2
console.log(c);输出3
解构的时候,参数多了d和e,这是输出的e和d是undefind
let [a,b,c,d,e] = arr
对象解构:
let person = {name:'andy',age :18};
let {name ,age} = person;
console.log(name); //andy
console.log(age);//18
4.箭头函数
() => {} 简化函数的 一般把箭头函数赋值给一个变量,这样调用才方便
1.在箭头函数中,如果函数体只有一句代码,并且返回值就是执行的结果,函数的大括号可以省略
const sum = (n1,n2) =>n1+n2
console.log(sum(2,4)); //6
2.如果形参只有一个那么这个小括号也可以省略
const fun = v => v;
console.log(fun(2));
箭头函数没有自己的this 不进行绑定,箭头函数的this 指向的是函数定义位置的上下文this
5.剩余参数
1.剩余参数允许将一个不定数量的参数表示为一个数组
const sum = (...args) => {
/* 三个点代表接收所有的形参将这些形参相加 */
let total = 0;
args.forEach(
(item) => (total += item)
); /* item只有一个形参 所以小括号省略 代码只有一行所以大括号省略 */
return total;
};
console.log(sum(12, 34, 21));
console.log(sum(43, 2, 45, 13, 5));
let arr = ["张三", "物理", "历史"];
// 数组解构
let[s1,...s2] = arr;
console.log(s1);
console.log(s2);/* 就会把除s1,其他剩余的值存储成一个数组 */
6.find
找出第一个符合条件的数组成员,如果没有找到就返回undefind
var ary = [
{
id: 1,
name: "bee",
},
{
id: 2,
name: "comby",
},
];
let f = ary.find((item) => item.id == 2);
console.log(f);
和findIndex一样的使用 不过返回的是索引号;
7.includes();
表示某个数组是否含有指定的值,返回的是布尔值
[1,2,3,4]includes(2) //true
8.模板字符串
1.可以直接对字符串进行拼接 不需要+号 :
var name ='andy'
`hello, my name is $(name)`
- 模板字符串可以换行
3、模板字符串可以调用函数
const fn =()=>return '我是字符串'
`我是字符串${fn()}`