发展
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.其后采用年号做版本。
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,代表找到了
标签:es6,set,const,name,数组,console,log From: https://www.cnblogs.com/wd404/p/17335628.html