es6

发展

ECMAScrip是浏览器脚本语言的规范,而各种我们熟知的js语言,如JavaScript是es的具体实现。

  • 1997年,为了统一各种不同script脚本语言,ECMA欧洲计算机制造商协会以JavaScript为基础,制定了ECMAScript标准规范。
  • 1998年6月,2.0版本发布。
  • 1999年12月,3.0.
  • 2007年10月,4.0草案发布
  • 2009年12月,5.0发布
  • 2011年,5.1.
  • 2015年,6发布,也就是ECMAScript 2015.其后采用年号做版本。

ES6教程——阮一峰

let和const命令

问题:var用来声明全局变量,即使在for循环内声明,仍可在循环外使用。造成可能的数据交叉污染

let声明的变量,只在其所在的局部范围内有效

const声明的变量是常量,不能被修改

字符串扩展

includes():返回布尔值,表示是否找到了参数字符串

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

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

字符串模板

var str `hello
world
123`;

在两个反引号`之间的部分都会被作为字符串的值,保留换行,甚至js脚本

解构表达式

数组结构

let arr = [1,2,3]
const [x,y,z] = arr
console.log(x,y,z)

对象解构

const person = {name:"jack",age:21,lanuage:{'java','js','css'}}
const {name,age,language} = person;
console.log(name);
console.log(age);
console.log(language);

对象解构使用别名

const {name:n} = person;
console.log(n)

函数优化

给一个函数参数设置默认值

function add(a,b=1){
    return a+b;
}
console.log(add(10));

箭头函数

var print = function(obj){
    console.log(obj)
}
//简写为
var print2 = obj=>console.log(obj);
//多个参数
var sum2 = (a,b)=>a+b;
//代码不止一行,可以用{}括起来
var sum3 = (a,b)=>{return a+b;}

对象的函数属性简写

let person = {
    name:"jack",
    eat:function(food){
        console.log(this.name+"在吃"+food)
    }
    //箭头函数版:
    eat2:food=>console.log(persone.name+"在吃"+food)
    //简写版:
    eat3(food){
        console.log(this.name+"在吃"+food)
    }
}

箭头函数结合解构表达式

const person= {
    name:"jack",
    age:21,
    language: ['java','js','css']
}
function hello(person) {
    console.log("hello,"+person.name)
}
//等价于
varhi= ({name}) =>console.log("hello,"+name);

map和reduce

map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。

//将一个字符串数组,转换为int数组
let arr = ['1','20','-5','3'];
console.log(arr);
arr = arr.map(s=>parseInt(s))
console.log(arr)

reduce():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。

  • 第一个参数是上一次reduce处理的结果
  • 第二个参数是数组中要处理的下一个元素
const arr = [1,20,-5,3]
arr.reduce((a,b)=>a+b)

promise

promise是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

可以通过Promise的构造函数来创建Promise对象,并在内部封装一个异步执行的结果。

const promise=new Promise(function(resolve, reject) {
    // ... 执行异步操作
    if (/* 异步操作成功 */){
        resolve(value);
    // 调用resolve,代表Promise将返回成功的结果  
	} else {
        reject(error);
	// 调用reject,代表Promise会返回失败结果  
	}
});
promise.then(function(value){
    //异步执行成功后的回调
})。catch(function(error){
    //异步执行失败后的回调
})

set和map

与数组相比

  • Set中只能保存不同元素,如果元素相同会被忽略
//Set构造方法可以接收一个数组或空
let set = new Set();
set.add(1);
let set = new Set([2,3,4,5,5])
//普通方法
set.add(1);//添加
set.clear();//清空
set.delete(2);//删除指定元素
set.has(2);//判断是否存在
set.keys();//返回所有key
set.values();//返回所有值
set.entries();//返回键值对集合;其keys、values和entries方法返回值一样的
set.size;//元素个数,是属性不是方法
  • Map结构的key可以是任意对象
// map接收一个数组,数组中的元素是键值对数组
const map=new Map([
    ['key1','value1'],
    ['key2','value2'],
])
// 或者接收一个set
const set=new Set([
    ['key1','value1'],
    ['key2','value2'],
])
const map2=new Map(set)
// 或者其它map
const map3=new Map(map);

模块化

  • export命令用于规定模块的对外接口
  • import命令用于导入其它模块提供的功能
const util = {
    sum(a,b){return a+b;}
}
export util;
//等价于
export const util = {
    sum(a,b){return a+b;}
}
//一切js变量都可以导出,比如基本类型变量、函数、数组、对象
//可以导出多个
var name="zhangsna";
var age=21;
export {name,age}
//省略名称
export default{
    sum(a,b){return a+b;}
}

导入

//导入util
import util from 'hello.js'
util.sum(1,3)
//批量导入
import {name,age} from 'user.js'
console.log(name+",今年"+age+"岁了")
  • 浏览器目前还不支持ES6的导入和导出功能
  • 可借助Babel-cli工具编译

对象扩展

keys(obj) :获取对象的所有key形成的数组

values(obj):获取对象的所有value形成的数组

entries(obj):获取对象的所有key和value形成的二维数组

assian:将多个src对象的值拷贝到dest中(浅拷贝)

数组扩展

find(callback) :把数组中的元素逐个传递给函数callback执行,如果返回true,则返回该元素

findIndex(callback):与find类似,不过返回的是匹配到的元素的索引

includes(value) :与find类似,如果匹配到元素,则返回true,代表找到了

posted @ 2023-04-20 09:30  挖洞404  阅读(11)  评论(0编辑  收藏  举报