ES6新增语法及内置对象(声明变量、解构、箭头函数、剩余参数、数组、字符串以及集合)、ES7新特性

ES6简介

ES全称ECMAScript,它是由ECMA国际标准化组织制定的一项脚本语言的标准化规范。ES6(ECMAScript 2015)

ES6新增语法

声明变量

let和const 是ES6新增的声明变量的方式,用于补全ES5标准中var声明变量的不足:在JavaScript中用‘var’来声明变量会出现变量提升的情况(即通过"var"声明的变量系统都会把声明 隐式的升至顶部,从而变量在全局起作用)

作用域:
(1)ES5:全局作用域,函数作用域
(6)ES6:块级作用域:用于声明作用域之外无法访问的变量(使用letconst声明,通过let和const声明的常量会放在临时死区

let

let是ES6中新增的用于声明变量的关键字。

注意:

(1)它声明的变量只在所处的块级中有效;

(2)不存在变量的提升

(3)let声明变量必须先声明后使用

如:

console.log(a)       //直接报错
let a=20

const

const用于声明常量,常量就是值(内存地址不能变的量)

注意:

(1)const具有块级作用域

if(true){
	const a=10
}
console.log(a)   //a is not defined

(2)声明常量时必须赋值,且常量赋值后,值不能修改

const PI=3.1515926;   //声明常量
PI=100;   // Assignment to constant variable. 声明常量以后值不能修改
const arr = [1, 2];
 arr[0] = 'a';
 arr[1] = 'b';
 console.log(arr);   // ['a', 'b']; 
 ary = ['a', 'b']; // Assignment to constant variable.

补充:const声明的对象属性值可以修改

const obj={
	name:'张三',
	age:20
}
console.log(obj)
obj.name='李四'
console.log(obj)    //{name:'李四',age:20}

如果想要const声明的对象属性值不可以修改,则可以使用冻结对象

Object.freeze(obj)
obj.name='李四'
console.log(obj) 

但是冻结对象是不能多层冻结的,例如:

const obj={
	name:'张三',
	age:20,
	family:{
		father:{
			name:'李安',
			age:45
		}
	}
}
Object.freeze(obj)    //多层冻结不起作用
obj.family.father.age=50 
console.log(obj) //age改为50了

var

var用于声明全局变量,其作用域为该语句所在的函数内,且存在变量提升现象。

例如:

 console.log(a);  //输出   undefined
 const a=1;

三者区别

在这里插入图片描述

解构赋值

ES6允许从数组中提取值,按照对应位置,对变量进行赋值,对象也可以实现解构。

数组解构:

let [a,b,c]=[1,2,3]
console.log(a)    //1
console.log(b)     //2
console.log(c)     //3

对象解构:

let person = { name: 'xiaowen', age: 18 }; 
let {name: myName, age: myAge} = person; // myName myAge 是属性name,age的别名
console.log(myName); // 'xiaowen' 
console.log(myAge); // 18

箭头函数

箭头函数:使用箭头符号(=>)声明的函数

var 变量名 = ([参数])=> {
    函数体语句;
}

若函数体语句只有一条,可以省略’{}’

用法:

(1)无参

var 变量=()=>{语句}

var 变量=()=>语句    //函数体只有一条语句时

var 变量=function(){语句}

(2)一个参数

var 变量=(参数arg)=>{语句}

(3)多个参数

var 变量名=(x1,x2)=>{语句}

例如:

var f1=x=>x

//等价于

var f1=function(x){
	return x
}

console.log(f1(1))    //  1

剩余参数

剩余参数语法允许我们将一个不定数量的参数表示为一个数组

例如:

let stu=['小吴','小张','小李']
let [s1,...s2]=stu

console.log(s1)   //小吴
console.log(s2)   //['小张','小李']

ES6内置对象

Array对象

1、扩展运算符:可以将数组做对象转换为用逗号分隔的参数序列

let arr=[1,2,3]
console.log(...arr)   //1 2 3
//...arr: 1,2,3

扩展运算符还可以合并数组

let arr1=[1,2,3]
let arr2=[4,5,6]
let arr3=[...arr1,...arr2]   //[1,2,3,4,5,6]

或者

arr1.push(...arr2)

2、构造函数方法

Array.from():将类数组或可遍历对象转换成真正的数组。

此方法还可以接受第二个参数,作用类似于数组的map方法,用于对每个元素进行处理,并将处理后的值放入返回的数组。

let obj={
	'0':1,
	'1':2,
	'2':3,
	length:3   //转换后为数组长度
}

let arr1=Array.from(obj)   //[1,2,3]

let arr2=Array.from(obj,item=>item*2)  //[2,4,6]

3、实例方法
find():用于找出第一个符合条件的数组成员(可以发现NaN)。

[1,3,-1,5].find(n=>n<0)  //-1

findIndex():用于找出第一个符合条件的数组成员的位置,如果没有找到就返回-1。

let arr=[1,5,10]
let index=arr.findIndex((value,index)=>value>5)
console.log(index)   //  2

String对象

1、模板字符串

ES6新增的创建字符串的方式,使用反引号定义,使用模板字符串可以解析变量(使用‘$’引入变量或者调用函数)。

let name='小张'
let sayHello=`Hello,my name is ${name}.`//Hello,my name is 小张.

2、实例方法

(1)startsWith():表示参数字符串是否在原字符串的头部,返回布尔值

(2)endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值

let str = 'Hello world!';
str.startsWith('Hello') // true 
str.endsWith('!')       // true

(3)includes():表示某个字符串是否包含给定的串,返回布尔值

'abcde.includes(bc)   //true

(4)repeat():将原字符串重复n次,返回一个新的字符串

'a'.repeat(3)      //'aaa'

Set集合

集合:无序,不重复的数据集合

1、基本方法

(1)add(x):添加值

(2)has(x):判断x是否在集合中,返回布尔型

(3)delete(x):删除集合中的元素

(4)clear():清空集合

其他方法:

var s1=new Set([45,23,78,44,56])

console.log(s1)  //{45,23,78,44,56}
console.log(s1.keys())    //键名   通过迭代器(遍历器Iterator)遍历集合中的元素        {45,23,78,44,56} 
console.log(s1.values())   //Set集合没有键只有值(即键和值是相同的)  {45,23,78,44,56}
console.log(s1.entries())   //遍历键值对   {45,23,78,44,56}

2、集合的遍历

(1)[...集合名]

var s2=new Set(['red','blue','green'])
let arr=[...s2]      //遍历集合,将集合元素赋值给arr
console.log(arr)  // [ 'red', 'blue', 'green' ]

(2)map遍历

let set=new Set([1,2,3])
set=new Set([...set].map(x=>x*2))    //先遍历set集合,然后通过map遍历集合中的元素
console.log(set)   {246}

(3)filter过滤集合元素

let set1=new Set([1,2,3,4,5,6,7,8,9])
let set=new Set([...set1].filter(x => x%2==0))   //filter是过滤器,将集合中的偶数遍历出来
console.log(set)   //{2,4,6,8}

(4)forEach()遍历集合

集合与数组一样,也具有forEach()的遍历方法。

let set1=new Set([1,2,3])
set1.forEach(value => console.log(value))
//1
//2
//3

ES7

ES7即ECMAScript 2016。

ES7新特性

Array.prototype.includes()方法

在ES6中有String.prototype.includes(),可以查询给定字符串是否包含一个字符,而在ES7中,数组也可以用Array.prototype.includes()方法来判断一个数组是否包含一个指定的值。

[1,2,3,4].includes(1)   //true
[1,2,3,4].includes(1,1)  //false  //第一个参数是要查找的数,第二个参数是搜索的起始位置,默认是0.

[1, NaN, 2, 3].indexOf(NaN)        //-1  indexof无法判断NaN
[1, NaN, 2, 3].includes(NaN)       //true

求幂运算符**

ES7中引入了指数运算符,具有与Math.pow()等效的计算结果。

conosle.log(2**10)  //1024
console.log(Math.pow(2,10))   //1024
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值