ES6新特性一览

1.let/const替代var

var与let、const的区别

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已经被声明了。

 注意:

  1. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  2. 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值