ECMAScript简介
ECMAScript6.0 ,简称 ES6 。ECMAScript 是一种由 ECMA 国际通过 ECMA-262 标准化的脚本,为 JavaScript 语言的下一代标准, 在 2015 年 6 月正式发布。
类比于 Java ,经典程度堪比 JDK 1.8 版本。
但是两者之间的区别, JDK 是具体实现,而 ES 就相当于 JSR 规范。
JSR,是 Java Specification Requests 的缩写,意思是 Java 规范提案,是指向 JCP(Java Community Process) 提出新增一个标准化技术规范的正式请求。
从层级上看, ECMAScript 是一种规范/接口,JavaScript 是规范的具体实现。
let关键字
- let不会作用到 {} 外,var 会越域到 {} 外,且 var 声明的变量有域提升的特性。
- var 可以多次声明同一变量,使用 let 则会报错,只能在作用范围内声明一次。
- var 定义之前可以使用,let 定义之前不可使用,关联域提升特性。
- let 的声明之后不允许改变,相当于 const 声明的变量。
解构表达式
解构表达式,是一种可以用来简化变量赋值的新语法。
- 支持
let arr = [1,2,3]; let [a,b,c] = arr;
语法- 该语法的特性,能够更方便地在变量之间进行值传递,属于数组解构表达式
- 支持对象解析
const { name: abc, age, language } = person;
语法- 该语法可以将一个
person
对象其中的name
属性赋值给 abc 对象,也就是将 name 属性值对应赋值给 abc ,而不是需要一定相同的属性名称。 - 这个过程类似于一种 JsonProperty 的转换功能,但是不同的是 JsonProperty 注解提供的只是给原对象起一个别名,而不像对象解构表达式是将对象字段赋值给新的语句。
- 该语法可以将一个
字符串扩展
在 ES6 中,对于字符串新增了一些扩展。主要是新增部分为字符串 API 以及字符串模板、变量值插入。
字符串 API 新增的主要常用的有:str.startsWith("")
、str.endsWith("")
、str.includes("")
几个。
字符串模板,主要用来输出一些特定格式的字符串,保留在编辑器中的换行空格等字符。字符串模板的使用方式很简单,只需要将目标模板使用
包起来即可。
变量值插入,类似于 Java 中的 @Value
注解所需要使用的表达式。格式为 ${}
。我们可以在 { }
中使用变量、表达式、函数,均可以输出对应的计算结果。
函数优化
在 ES6 中,新增了一些函数的优化。主要有:
- 函数默认值
# 原始的默认值的写法
function add1(a, b) {
b = b | 1
return a + b
}
# ES6 新增的写法
function add1(a, b = 2) {
return a + b
}
- 不定参数
function fun(...values) {
console.log(values.length);
}
- 箭头函数
var print = obj => console.log(obj);
# 调用
print("abc");
对象优化
对象函数
Object.keys(obj);
Object.values(obj);
Object.entries(obj);
# assign 函数将其他对象添加到目标对象中
Object.assign(target, obj1, obj2);
对象声明简写
# 对象的属性名和变量名一致,可以直接使用简写声明对象
const obj1 = { age, name };
对象拓展运算符
# 该符号可以将对象的所有属性取出来,可以用于对象的深拷贝、覆盖
let person = { name: "Real", age: 20 }
let someone = { ...person}
数组优化
在 ES6 中,数组新增了 Map 和 Reduce 方法。
- map 方法:接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组后返回。
arr = arr.map(item=> item*2);
- reduce 方法:为数组中的每个元素执行回调函数,不包含数组中被删除或者未被赋值初始化的元素。
/**
* 1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
* 2、currentValue (数组中当前被处理的元素)
* 3、index (当前元素在数组中的索引)
* 4、array (调用 reduce 的数组)
*/
arr.reduce(callback,[initialValue])
promise异步编排
<script>
//1、查出当前用户信息
//2、按照当前用户的id查出他的课程
//3、按照当前课程id查出分数
// $.ajax({
// url: "mock/user.json",
// success(data) {
// console.log("查询用户:", data);
// $.ajax({
// url: `mock/user_corse_${data.id}.json`,
// success(data) {
// console.log("查询到课程:", data);
// $.ajax({
// url: `mock/corse_score_${data.id}.json`,
// success(data) {
// console.log("查询到分数:", data);
// },
// error(error) {
// console.log("出现异常了:" + error);
// }
// });
// },
// error(error) {
// console.log("出现异常了:" + error);
// }
// });
// },
// error(error) {
// console.log("出现异常了:" + error);
// }
// });
//1、Promise可以封装异步操作
// let p = new Promise((resolve, reject) => { //传入成功解析,失败拒绝
// //1、异步操作
// $.ajax({
// url: "mock/user.json",
// success: function (data) {
// console.log("查询用户成功:", data)
// resolve(data);
// },
// error: function (err) {
// reject(err);
// }
// });
// });
// p.then((obj) => { //成功以后做什么
// return new Promise((resolve, reject) => {
// $.ajax({
// url: `mock/user_corse_${obj.id}.json`,
// success: function (data) {
// console.log("查询用户课程成功:", data)
// resolve(data);
// },
// error: function (err) {
// reject(err)
// }
// });
// })
// }).then((data) => { //成功以后干什么
// console.log("上一步的结果", data)
// $.ajax({
// url: `mock/corse_score_${data.id}.json`,
// success: function (data) {
// console.log("查询课程得分成功:", data)
// },
// error: function (err) {
// }
// });
// })
function get(url, data) { //自己定义一个方法整合一下
return new Promise((resolve, reject) => {
$.ajax({
url: url,
data: data,
success: function (data) {
resolve(data);
},
error: function (err) {
reject(err)
}
})
});
}
get("mock/user.json")
.then((data) => {
console.log("用户查询成功~~~:", data)
return get(`mock/user_corse_${data.id}.json`);
})
.then((data) => {
console.log("课程查询成功~~~:", data)
return get(`mock/corse_score_${data.id}.json`);
})
.then((data)=>{
console.log("课程成绩查询成功~~~:", data)
})
.catch((err)=>{ //失败的话catch
console.log("出现异常",err)
});
</script>
模块化
模块化就是把代码进行拆分,方便重复利用。类似于 Java 中的 import 导包;要使用一个包,必须先导入进来。而 JS 中没有包的概念,对应的是模块。
模块功能主要由两个命令构成:export 和 import
- export 命令用于规定模块的对外接口
- import 命令用于导入其他模块提供的功能
export 不仅可以导出对象,还可以导出变量、函数、数组等等一切 JS 中的变量。
- user.js
var name = "jack"
var age = 21
function add(a,b){
return a + b;
}
// 导出变量和函数
export {name,age,add}
- hello.js
// export const util = {
// sum(a, b) {
// return a + b;
// }
// }
// 导出后可以重命名
export default {
sum(a, b) {
return a + b;
}
}
// export {util}
//`export`不仅可以导出对象,一切JS变量都可以导出。比如:基本类型变量、函数、数组、对象。
- main.js
import abc from "./hello.js"
import {name,add} from "./user.js"
abc.sum(1,2);
console.log(name);
add(1,3);
本文由博客一文多发平台 OpenWrite 发布!
原文地址:http://www.cnblogs.com/real-blog/p/16852824.html