1.let/const替代var
var声明的变量会挂载在window上,而let和const声明的变量不会
var a = 100;
console.log(a,window.a); // 100 100
let b = 10;
console.log(b,window.b); // 10 undefined
const c = 1;
console.log(c,window.c); // 1 undefined
var声明变量存在变量提升,let和const不存在变量提升
console.log(a); // undefined ===> a已声明还没赋值,默认得到undefined值
var a = 100;
console.log(b); // 报错:b is not defined ===> 找不到b这个变量
let b = 10;
console.log(c); // 报错:c is not defined ===> 找不到c这个变量
const c = 10;
let和const声明形成块作用域
if(1){
var a = 100;
let b = 10;
}
console.log(a); // 100
console.log(b) // 报错:b is not defined ===> 找不到b这个变量
if(1){
var a = 100;
const c = 1;
}
console.log(a); // 100
console.log(c) // 报错:c is not defined ===> 找不到c这个变量
同一作用域下let和const不能声明同名变量,而var可以
var a = 100;
console.log(a); // 100
var a = 10;
console.log(a); // 10
let a = 100;
let a = 10;
// 控制台报错:Identifier 'a' has already been declared ===> 标识符a已经被声明了。
注意:
- let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
- const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
2.对象解构
对象属性的完全解构
(1)如果{ }里面的属性是对象的属性,解构出来是对应的属性值
let obj = {
name: "heal",
age: 22,
email: "node.js@163.com"
};
let { name, age, email } = obj;
console.log(name, age, email); //heal 22 node.js@163.com
//这个是完全解构。
//相当于是let name=obj.name;let age = obj.age...
(2)如果{ }里面的属性不是对象的属性,直接改了对象的属性名,那么解构出来得到的是undefined
let obj = {
name: "heal",
age: 22,
email: "node.js@163.com"
};
let { name1, age, email } = obj;
console.log(name1, age, email); //undefined 22 'node.js@163.com'
(3)如果想解构对象,但是解构时属性名跟本身对象的属性不一样,可以在解构时给这个属性起别名,如下name1就是给name起了个别名
let obj = {
name: "heal",
age: 22,
email: "node.js@163.com"
};
let { name: name1, age, email } = obj;
console.log(name1, age, email); //heal 22 node.js@163.com
对象属性的部分解构
let obj = {
name: "heal",
age: 22,
email: "node.js@163.com"
};
let { name } = obj;
console.log(name); //heal
注意:
1、let {name} = obj; 相当于 let name = obj.name
2、大括号里面的变量名最好和obj的属性名一致,如果不一致,则是undefined
3、大括号里面的变量名顺序可以调换
4、可以部分解构也可以完全解构
5、解构可能出现变量名已经被定义的错误。解决:取出属性之后重新命名。let {name:name2} = obj;然后控制台输出name2的值就是对象中name属性的值
3.新数据结构
Map/Set/WeakMap/WeakSet
// Sets
var s = new Set();
s.add("hello").add("goodbye").add("hello");
s.size === 2;
s.has("hello") === true;
// Maps
var m = new Map();
m.set("hello", 42);
m.set(s, 34);
m.get(s) == 34;
// Weak Maps
var wm = new WeakMap();
wm.set(s, { extra: 42 });
wm.size === undefined
// Weak Sets
var ws = new WeakSet();
ws.add({ data: 42 });
4.扩展
Array
- Array.from()
- Array.of()
- Array.copyWithin()
- Array.find()
- Array.findIndex()
- Array.fill()
- Array.includes()
ES7
Object
- Object.keys()
- Object.values()
ES8
- Object.entries()
ES8
- Object.assign()
- Object. is()