ES6中有哪些新特性?

148 阅读5分钟

一,什么是es6

ES6全称为EMAScript 6,是由ECMA国际标准组织制定的一项针对JavaScirpt脚本语言的标准化规范,同时也新增了许多特性。是 JavaScript 语言的下一代标准。
参考文档:es6.ruanyifeng.com/

二,var,let 和 const 命令

1.声明变量的方式:

ES6之前: var 变量名称;
es6出现之后:只使用let 或者 const

2.三者的区别:

如果通过var定义变量,可以重复定义同名的变量,并且不会报错,并且后定义的会覆盖先定义的;
如果通过var定义变量,可以先使用后定义(预解析);
如果通过var定义的局部变量,和全局变量一样,后续都可以被使用;

如果通过let定义变量,不可以重复定义同名的变量;
如果通过let定义变量,不可以先使用再定义;
如果通过let定义的局部变量,那么这个变量只能在当前定义变量的{}中使用;

const 声明的变量 一旦声明了就不能改变。
const 是一个只读常量 固定不变
如果const的是一个对象,对象所包含的值是可以被修改的。抽象一点儿说,就是对象所指向的地址没有变就行

三,模板字符串

模板字符串指是增强版的字符串,用反引号(`)标识,标签将会被解析
将表达式嵌入字符串中进行拼接,用${}来界定,

在ES6之前,我们往往这么处理字符串

console .log('我今年‘+age+’岁')

使用模板字符串

console .log(`我今年${age}岁`)

四,变量的解构赋值

解构赋值是ES6中新增的一种赋值方式,指的是ES6允许按照一定的模式从数组或对象中取出值,对变量进行赋值。  如果解构不成功,变量的值就等于undefined。

1,把数组中的数值取出,赋值给新的变量

let arr = [1, 3, 5];
const  [a,b,c]= arr
console.log("a=" + a);
console.log("b=" + b);
console.log("c=" + c);
输出:  a=1;b=3;c=5

2,对象的解构

const obj = {
  username: '悟空',
  height: 100,
};
const { username, height } = obj;
console.log(username, height);	// ‘悟空’	100

3,在数组的解构赋值中,左边的个数可以和右边的不一样(解构不到的为undefined)

let [a, b,c] = [1, 3];
console.log("a=" + a);
console.log("b=" + b);
输出: a=1;b=3;c=undefined  // 解构不到的为undefined

4,在数组的解构赋值中,左边的个数比右边的个数多,可以给左边设置指定的默认值

let [a, b,c=666] = [1, 3];
console.log("a=" + a);
console.log("b=" + b);
console.log("c=" + c);
输出: a=1;b=3;c=666 	

5,在数组的解构赋值中,左边的个数和右边的不一样,那么设置默认值会被覆盖;

let [a, b,c=666,d=888] = [1, 3,5,7];
console.log("a=" + a);
console.log("b=" + b);
console.log("c=" + c);
console.log("d=" + d);
输出: a=1;b=3;c=5,d=7	

五,扩展运算符

拓展运算符是三个点  (...),常见作用如下
1,打包剩余的数据
数组使用会把剩下数据打包成数组,对象使用会把剩下的对象打包为对象
就算是只有一个数,也会返回一个数组,一个数都没有,就返回一个空数组

//1,获取剩下 数组
const [a, ...b] = [1, 3,5,7];
console.log(a);//1
console.log(b);//[3,5,7]

//2,获取剩下 对象
const { a, ...c } = { a: 1, b: 2, c: 3 };
console.log(c);// {b:2,c:3}

const { a,b,c ,...d } = { a: 1, b: 2, c: 3 };
console.log(d); // 空对象 {}

2,用在函数的形参上,会解构成数组

function calc(...args) {	// ...args 数组 装载这所有传给calc的参数
  
  let sum = 0;
  args.forEach((value) => (sum += value));
  console.log(sum);
}
calc(1, 2);
calc(1, 2, 3);
calc(1, 2, 3, 4);

3,延展作用

//在新的存储空间把 原来obj的值 通过扩展运算符解构放进去 newObj再添加其他属性就不会影响原来的obj
const obj = {
  username: '悟空',
  height: 200,
};	
const newObj = { ...obj, color: 'yellow' };

4,扩展运算符 对数组操作

const arr = ['a', 'b', 'c'];

//在数组的后面 新增一个 元素 'd'
const newArr=[...arr,'d'];

//在数组前面 新增一个元素 w
const newArr = ['w', ...arr];

六,交换两个变量的值

let a = 1; let b = 2;
// 交换两个值 [a,b]=[b,a]; 
console.log(a,b); 
// a = 2 b = 1

七,函数参数默认值

函数没有传递实参时,输出默认值,
函数传递了实参,输出实参

function show(msg = '你好',str="你我都好") {
  console.log(msg,str);
}
show(); // 没有传递参数  输出你好 你我都好
show('大家好'); // 输出 大家好 你我都好
show('大家好',"世界美好"); // 输出 大家好 世界美好

八,对象的简写

1,对象的属性名和值简写
无须再次定义属性名

const username = 123;
const color = 'red';

const obj = {
  //变量名和属性名一致 对象属性可以简写 
  username, 
  color, 
};

2,对象的方法简写
内部定义函数时无须function关键字

const person={
   
  //show方法 没有简写  
  show:function(){
    console.log("show");
  },
    
  //say方法 简写
  say(){
    console.log("say");			
  } 
  
}
person.show();
person.say();

九,set对象

1,set对象是es6才推出的一种语法,set是一个对象,不是一个数组;;

2,主要功能是去重

3,可以实现数组和对象之间的相互转换

const beforeArr=['a','b',3,4];

// 1,数组转成set对象
const set = new Set(beforeArr)

//2,给set添加数据的时候 使用 add方法  
set.add(1);
set.add(2);
set.add(2);// 3,发现有重复数据了,自己内部过滤重复,不会添加进去

//4 set 转成 数组(map、forEach。。。)
const arr=[...set];
console.log(arr);

结尾

好了今天的内容就到这里了,es6中还有许多新增的功能,如果感兴趣可以继续学习
参考文档:es6.ruanyifeng.com/