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

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性