ES6学习记录

1.新增了let命令用来命名变量,声明的变量只在let命令所在的代码块有效。

2.const命令声明的变量在初始化时就必须赋值,且只读,不能改变,同let块内有效。

3.es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,称之为解构。解构等号右边必须是可遍历的解构,且结构长度=左边变量,提取json数据特方便在这里插入图片描述
4.函数的扩展
在这里插入图片描述
可在函数的参数后直接赋值

5.rest参数

6.箭头函数
var f = v => v; 等同于 var f = function(v){return v};

如果箭头函数需要多个参数或者不需要参数,就使用一个圆括号代表参数部分。
var f= () => 5 等同于 var f=function(){return 5}
var f=(num1,num2)=>num1+num2
等同于
var f=function(num1,num2){return num1+num2;}
如果箭头函数的代码块多余一条语句,就需要用大括号{}括起来,并且用return语句返回
由于大括号被解释为代码块,所以箭头函数如果返回一个对象,必须加上()不然会报错在这里插入图片描述
7.字符串的扩展
字符串可被for循环遍历
for(let code of ‘abc’){
console.log(code);
//输出a b c
}

es6新提供3种方法检查字符串是否包含在另一字符串中
includes()//是否找到了参数字符串
startsWith()//参数字符串是否在原字符串头部
endWith()//是否在尾部
//皆为返回布尔值
let code = ‘abc’
code.includesI(‘a’) //返回true

模板字符串,用反引号标识code
传统js:
$(’#result’).append(‘今天是星期’+date.d+’’)
es6:
KaTeX parse error: Expected 'EOF', got '#' at position 3: ('#̲result').append…{date.d}`)

模板字符串中还能调用函数
function fu(){return ‘hello’}
abc$(fu())

8.对象的扩展
es6允许直接写入变量和函数,作为对象的属性和方法
const foo=‘abc’
const baz={foo}
baz // {foo: “bar”}
// 等同于const baz = {foo: foo};

方法简写
method: function(){return ‘’}
method: (){return ‘’}

function getInfo(){
const a=1;
const b=2;
return {a,b};
}
getInfo(); //输出{a:2,b:2}

9.set和map结构
es6提供了新数据结构Set,类似数组,但是成员值唯一,没有重复
Set本身是构造函数,用于生成Set数据结构
const a = new Set();
[2,3,4,5,2,4].forEach(x => a.add(x));
for(let i of s){
console.log(i); //输出2,3,4,5
}
Set函数可以接受一个数组(或者iterable接口的其他数据结构)作为参数,用来初始化
const set = new Set([1,2,3,4,4]); //可用于去重
Set实例的方法分为两大类:操作方法和遍历方法
Set结构没有键名,只有键值,遍历的键值和键名相等

传统js的对象(Object),本质上是键值对的集合(Hash结构),传统上只能用字符串当键
Es6提供了Map数据结构。类似对象,但是键不限于字符串,各种类型的值(包括对象)都能成为map的键,object(字符串:值),map(值:值)是一种更完善的Hash结构实现
Map的方法和Set类似,遍历顺序也都是插入顺序

Map转对象
如果Map的键都是字符串,可无损转为对象,如不为字符串,键会被转为字符串,再作为对象的键名
Map转对象
function strMapToObj(strMap){
let obj = Object.create(null);
for(let [k,v] of strMap){
obj[k] = v
}
return obj;
}

const myMap = new Map()
.set(‘yes’,true)
.set(‘no’,false);
staMapToObj(myMap); //输出{yes:true,no:false}

对象转Map
function ObjToMap(obj){
let strMap = new Map();
for(let k of Object.keys(obj)){
strMap.set(k,obj[k]);
}
return strMap;
}
ObjToMap({yes:true,no:false}) //输出Map{“yes”:true,“no”:false}

Map与JSON互转,正常情况下,键名都是字符串
Map转JSON
function staMapToJSON(strMap){
return JSON.stringify(strMapToObj(strMap));
}
let myMap = new Map().set(‘yes’, true).set(‘no’, false);
strMapToJson(myMap); // ‘{“yes”:true,“no”:false}’

JSON转Map
function jsonToStrMap(jsonStr) {
return objToStrMap(JSON.parse(jsonStr));}
jsonToStrMap(’{“yes”: true, “no”: false}’)
// Map {‘yes’ => true, ‘no’ => false}

10.Promise对象
Es6提供了Promise对象,简单说是一个容器,里面保存某个未来才会结束的事件的结构,通常是一个异步操作。Es6规定Promise对象是一个构造函数,用来生成Promise实例
const promise = new Promise(function(resolve,reject){
if(异步操作成功){resolve(value)}else{reject(error)}
})
Promise构造函数接受一个函数作为参数,该函数的两个参数分别为resolve和reject,这两参数为js引擎提供的两个函数
Promise对象代表一个异步操作,有3种状态:pending(进行中),fulfilled(已成功),rejected(已失败),状态改变只能为两种情况pending-fulfilled,pending-rejected,状态改变后就固定了,不能再变,称为resolved(已成型)
Promise方法可以接收两个回调参数作为函数,分别为状态变为fulfilled或rejected时调用,第二个非必选
etJSON(’/post.json’).then(function(value){} //成功
.catch(function(error)){} //失败
.finally(){} //无论成功失败都执行
)

Promise.all()可将多个Promise实例,包装成一个新的Promise实例
const p = Promise.all([p1,p2,p3]);
all()接收一个数组作为参数,数组内皆为promise实例,如不是会调用resolve()转换为provime实例
p的状态由数组内实例决定,数组都为fulfilled,p为fulfilled,数组的返回值组成一个数组,传递给p的回调函数
数组内如有一个rejected,p为rejected,第一个被reject实例的返回值会被传递给p的回调函数

Promise.rece()语法同上
数组中率先改变状态的实例的返回值会被传递给p的回调函数

11.模块化
传统js没有模块体系,无法将大程序拆分为互相依赖的小文件,再拼装。
Es6模块的设计思想是尽量的静态化,编译时就能确定模块的依赖关系,以及输入和输出的变量。
Es6模块不是对象,而是通过export命令显式指定输出的代码,再听过import命令输入
{a,b,c} from ‘fs’ //从fs模块加载a,b,c3个方法,其他方法不加载(称为编译时加载或静态加载)

ES6的模块自动采用严格模式
变量必须声明后使用
函数的参数不能同名
不能使用with语句
不能对只读属性赋值
不能使用前缀0表示八进制数
不能删除不可删除的属性
不能删除变量,只能删除变量中的属性
eval不会再它的外层作用域引入变量
eval和arguments不能被重新赋值
arguments不会自动反映参数变化
禁止this指向全局对象

export命令
模块功能主要由两个命令构成:export和import
export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能
一个模块就是一个独立的文件,该文件内部的变量只能用export输出,外部才能调用
export var year = 2020;
export {a,b,c}; //优先使用
export {a as q,b as w} //可用as关键字重命名

import命令
import {a,b,c} from ‘./xxx.js’ //大括号内变量名与对外接口内名一致,也可用as
import * as a from ‘./xxx.js’ //整体加载,代表一个对象,所有输出值都在

export default命令
export default function(){} //默认输出一个函数
import a from ‘export_default’ //可任意指定该匿名函数名字
一个模块只能有一个export default

export const a=3;//跨模块常量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值