ES6常用的特性总结:
let&const
- let类似于var,用来声明一个变量。
var 声明的变量往往会有越域
let声明的变量有严格局部作用域
var a = 1;
let b = 2;
//console.log(a); //1
//console.log(b); //ReferenceError: b is not defined
- var 可以声明多次,但let只能声明一次
var m = 1;
var m = 2;
let n = 3;
let n = 4;
//console.log(m);//2
//console.log(n);//Identifier 'n' has already been declared
- var 变量会提升,let不存在变量提升
//console.log(x); // undefined
var x = 10;
//console.log(y); //ReferenceError: y is not defined
let y = 20;
- let声明之后不允许改变,一但声明必须初始化,要不然会报错。
const a = 1;
a = 3; //Uncaught TypeError: Assignment to constant variable.
解构表达式
- 数组解构:
let arr = [1,2,3];
// let a = arr[0];
// let b = arr[1];
// let c = arr[2];
let [a,b,c] = arr;
console.log(a,b,c)
- 对象解构:
//person对象
const person = {
name: "jack",
age: 21,
language: ['java', 'js', 'css']
}
// const name = person.name;
// const age = person.age;
// const language = person.language;
const { name: abc, age, language } = person;
console.log(abc, age, language)
- 字符串扩展:
let str = "hello.vue";
console.log(str.startsWith("hello"));//true
console.log(str.endsWith(".vue"));//true
console.log(str.includes("e"));//true
console.log(str.includes("hello"));//true
- 字符串模板:
相较于以前的语法:ES6中字符串模板可以使用``中插入字符串。
let ss = `<div>
<span>hello world<span>
</div>`;
console.log(ss);
// // 2、字符串插入变量和表达式。变量名写在 ${} 中,${} 中可以放入 JavaScript 表达式。
function fun() {
return "这是一个函数"
}
//插入函数
let info = `我是${abc},今年${age + 10}了, 我想说: ${fun()}`;
console.log(info);
函数优化
- 函数参数默认值:
在ES6之前,我们无法给一个函数参数设置默认值,只能采用变通写法:
function add(a, b) {
// 判断b是否为空,为空就给默认值1
b = b || 1;
return a + b;
}
// 传一个参数
console.log(add(10));
而ES6中我们可以这样写:
//直接给参数写上默认值,没传就会自动使用默认值
function add2(a, b = 1) {
return a + b;
}
console.log(add2(20));
- 不定参数:
function fun(...values) {
console.log(values.length)
}
fun(1, 2) //2
fun(1, 2, 3, 4) //4
- 箭头函数:
ES6中提供了箭头函数,以前声明一个方法:
var print = function (obj) {
console.log(obj);
}
var sum = function (a, b) {
c = a + b;
return a + c;
}
const person = {
name: "jack",
age: 21,
language: ['java', 'js', 'css']
}
function hello(person) {
console.log("hello," + person.name)
}
使用ES6中箭头函数声明上面的方法:
var print = obj => console.log(obj);
print("hello");
var sum2 = (a, b) => a + b;
console.log(sum2(11, 12));
//箭头函数+解构
var hello2 = ({name}) => console.log("hello," +name);
hello2(person);
对象优化
- 声明对象简写:
const age = 21
const name = "阿文"
const person1 = { age: age, name: name }
const person2 = { age, name }
console.log(person2);
- 对象函数属性简写:
let person3 = {
name: "阿文",
// 以前:
eat: function (food) {
console.log(this.name + "在吃" + food);
},
//箭头函数this不能使用,对象.属性
eat2: food => console.log(person3.name + "在吃" + food),
eat3(food) {
console.log(this.name + "在吃" + food);
}
}
person3.eat("香蕉");
person3.eat2("苹果")
person3.eat3("橘子");
- 对象拓展运算符:
// 1、拷贝对象(深拷贝)
let p1 = { name: "Amy", age: 15 }
let someone = { ...p1 }
console.log(someone) //{name: "Amy", age: 15}
// 2、合并对象
let age1 = { age: 15 }
let name1 = { name: "Amy" }
let p2 = {name:"zhangsan"}
p2 = { ...age1, ...name1 }
console.log(p2)
- 新增API
const person = {
name: "jack",
age: 21,
language: ['java', 'js', 'css']
}
console.log(Object.keys(person));//["name", "age", "language"]
console.log(Object.values(person));//["jack", 21, Array(3)]
console.log(Object.entries(person));//[Array(2), Array(2), Array(2)]
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
//{a:1,b:2,c:3}
Object.assign(target, source1, source2);
console.log(target);//["name", "age", "language"]
map&reduce
数组中新增了map和reduce方法,
- map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。
let arr = ['1', '20', '-5', '3'];
arr = arr.map(item=> item*2);
console.log(arr);
- reduce():为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素
/**
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)*/
let arr = ['1', '20', '-5', '3'];
arr = arr.map(item=> item*2);
let result = arr.reduce((a,b)=>{
console.log("上一次处理后:"+a);
console.log("当前正在处理:"+b);
return a + b;
},100);
console.log(result);