一、什么是ES6
ES6是说明新的JavaScript标准
二、变量声明
1、var
(1)var 定义的变量存在变量提升
(2)var定义的变量不存在块级作用域
(3)var可以重复声明变量
2、let
(1)let与var基本一致,用作变量声明
(2)let在一堆大括号{}中形成局部作用域
(3)let声明的变量只在作用域内起作用
(4)let不能在同一个作用域内重复声明
(5)let存在暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”在这个区域,不再受外部的影响
3、const
(1)与let一致(局部作用域,不存在变量声明提升,不能重复声明)
(2)const声明变量时必须赋值
(3)const定义的变量,不能修改(即值得类型)
(4)建议,在声明变量时,变量名大写
三、数组和对象的解构
1、数组的解构
// 把数组解析为单个的变量
// 可以逗号跳过某个元素
let arr = [1, 2, 3, 4, 5];
let [a, , b, ...c] = arr;
console.log(a);
console.log(b);
console.log(c);
// 可以给默认值
// 通过...接收剩余内容(不定参)
let arr2 = [1, 2, 3, 4];
let [d, e, f, g = 22] = arr2;
console.log(d, e, f, g);
// 可以交换变量
var i = 100;
var j = 50;
[i, j] = [j, i];
console.log(i, j);
2、对象的解构
// 把对象解析为单独的变量
// 不用按顺序解构
let obj = { name: "aaa", age: 12, job: "教师" };
let { age, name, job } = obj;
console.log(age);
console.log(name);
console.log(job);
四、箭头函数
1、箭头函数:函数的简写
var fun = function () {
alert("love");
}
var fun1 = () => alert("love");
// =>左侧是参数
// =>右侧是执行语句也是返回值
fun();
fun1();
2、如果不是一个则需要添加()
var fun2 = (name, age) => alert("大家好,我是" + name + ",今年" + age + "岁");
fun2("xxx", 23);
3、如果有多行语句用{}
var fun3 = item => {
if (item > 18) {
alert("可以参军");
} else {
alert("小屁孩一个");
}
}
fun3(19);
4、如果需要返回对象用({})
var fun4 = (name, age) => ({
name: name,
age: age,
msg: "大家好我是" + name
})
var obj = fun4("小小怪", 17);
console.log(obj);
5、箭头函数中this的指向问题
箭头函数的this指向的是上一层函数调用者,不能作为构造函数
var age = 50;
var obj = {
age: 18,
grow: () => {//此处不为箭头函数,是function普通函数时需要注意,情况就不一样了
setInterval(() => {//此处同上,会有一些小陷阱,需要注意
this.age++;
console.log(this.age);
}, 3000)
}
}
// obj.grow();
var arr = [2, 4, 6, 7, 8,];
var arr1 = arr.filter(item => item > 5);
console.log(arr1);
var total = arr.reduce((a, b) => a + b);
console.log(total);
var arr2 = arr.map(item => item * 10);
console.log(arr2);
五、ES6新增的字符串方法
1、遍历:forEach
var arr1 = ["小红", "小蓝", "小子", "小黑"];
arr1.forEach(function (item, index, self) {
console.log(item, index, self);
})
2、查找:includes、startsWith、endsWith
var str = "假如把范得起的错,能错的都错过,应该还来得及去悔过";
//includes:查找是否包含
alert(str.includes("错"));
//查找是否已XXX开头
alert(str.startsWith("假如"));
//查找是否已XXX结尾
alert(str.endsWith("过"));
//查找存在返回true,否则返回false
3、补齐:padStart(len,symbol)、padEnd(len,symbol)
len:需要补齐的长度
symbol:用什么补齐
var a = "1";
console.log(a.padStart(3, "0"));//输出结果001
console.log(a.padEnd(4, "0"));//输出结果10000
4、去空白trim、trimLeft、trimRight
var b = " 132 ";
console.log(b);
//去除两侧空白
console.log(b.trim());
//去除左侧空白
console.log(b.trimLeft());
//去除右侧空白
console.log(b.trimRight());
六、数组新增方法
1、排序:sort
arr1 = [1, 12, 15, 33, 7, 9]
arr1.sort((a, b) => a - b);//a-b升序,b-a降序
console.log(arr1);
//运行结果[1,7,9,12,15,33]
2、查找:find、findIndex
find:查找符合条件的元素
findIndex:查找符合条件的元素的下标
var arr = [2, 4, 6, 8];
var el = arr.find(function (item) {
if (item > 5) {
return true;
}
})
var el2 = arr.find(item => item > 5);
console.log(el);
console.log(el2);
var index = arr.findIndex(function (item) {
if (item > 5) {
return true;
}
})
console.log(index);
3、过滤:filter
var arr2 = arr.filter(function (item) {
return item % 2 == 0;
})
console.log(arr2, arr);
4、遍历:forEach
var arr1 = ["小红", "小蓝", "小子", "小黑"];
arr1.forEach(function (item, index, self) {
console.log(item, index, self);
})
//item:当前遍历的元素
//index:当前元素得到下标
//self:被遍历的数组
5、映射:map
//通过数组arr得到数据ages
var arr = [
{
name: "小明",
age: 16,
sex: "男"
},
{
name: "小红",
age: 17,
sex: "女"
},
{
name: "小白",
age: 18,
sex: "女"
}
]
var ages = arr.map(item => item.age)
console.log(ages);
6、累计:reduce
reduce(function (a, b) {
return a + b
})
// a:上一次返回的结果
// b:当前遍历的元素
7、some和every
some:都不符合条件返回false,有一个满足返回true,且剩下不再进行检测,返回值为布尔值
every:检测数组所有元素是否满足指定条件,所有元素都满足返回true,一个不满足返回false,且剩下元素不再进行检测,返回值为布尔值
//数组是否有一个大于16岁,是否所有小于60岁
var computers = [
{ name: "Apple", age: 8 },
{ name: "IBM", age: 12 },
{ name: "Acer", age: 32 },
]
var big = computers.map(item => item.age);
var a = big.some(item => item > 16);
if (a) {
alert("有一个大于16岁");
}
var b = big.every(item => item < 60);
if (a) {
alert("所有都小于60岁");
}