六、ES6规范

系统管理员 2022-04-02 20:10 340阅读 0赞

ES6规范

  1. 编程语言JavaScriptECMAScript的实现和扩展 ECMAScript是由ECMA(一个类似W3C的标准组织)参与进行标准化的语法规范。ECMAScript定义了:
  2. 语言语法 语法解析规则、关键字、语句、声明、运算符等。
  3. 类型 布尔型、数字、字符串、对象等。
  4. 原型和继承
  5. 内建对象和函数的标准库 JSONMath、数组方法、对象自省方法等
  6. ECMAScript标准不定义HTMLCSS的相关功能,也不定义类似DOM(文档对象模型)的Web API,这些都在独立的标准中进行定义。ECMAScript涵盖了各种环境中JS的使用场景,无论是浏览器环境还是类似node.js的非浏览器环境。
  7. ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,20156月正式发布。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

1、Node.js中使用ES6

ES6+ 太棒了,但是很多高级功能node是不支持的,就需要使用babel转换成ES5

(1)babel转换配置,项目根目录添加.babelrc 文件

  1. {
  2. "presets" : ['es2015']
  3. }

(2)安装es6转换模块

  1. cnpm install babel-preset-es2015 --save-dev

(3)全局安装命令行工具

  1. cnpm install babel-cli -g

(4)使用

  1. babel-node js文件名

2、变量声明let

我们都是知道在ES6以前,var关键字(全局关键字,无论何处,变量都是全局的)声明变量。无论声明在何处,都会被视为声明在函数的最顶部,这就是函数变量提升。例如

  1. function aa() {
  2. if(bool) {
  3. var test = 'hello man'
  4. } else {
  5. console.log(test)
  6. }
  7. }

以上的代码实际上是:

  1. function aa() {
  2. var test // 变量提升
  3. if(bool) {
  4. test = 'hello man'
  5. } else {
  6. //此处访问test 值为undefined
  7. console.log(test)
  8. }
  9. //此处访问test 值为undefined
  10. }

所以不用关心bool是否为true or false。实际上,无论如何test都会被创建声明。

接下来ES6主角登场:

我们通常用let和const来声明,let表示变量、const表示常量。let和const都是块级作用域。怎么理解这个块级作用域?在一个函数内部 ,在一个代码块内部。看以下代码

  1. function aa() {
  2. if(bool) {
  3. let test = 'hello man'
  4. } else {
  5. //test 在此处访问不到
  6. console.log(test)
  7. }
  8. }

3、常量声明

const 用于声明常量,看以下代码

  1. const name = 'lux'
  2. name = 'joe' //再次赋值此时会报错

4、模板字符串

es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点。

第一个用途,基本的字符串格式化(只能使用``字符)。将表达式嵌入字符串中进行拼接。用${}来界定。

  1. //es5
  2. var name = 'lux'
  3. console.log('hello' + name)
  4. //es6
  5. const name = 'lux'
  6. console.log(`hello ${ name}`) //hello lux

第二个用途,在ES5时我们通过反斜杠()来做多行字符串或者字符串一行行拼接。ES6反引号(``)直接搞定。

  1. // es5
  2. var msg = "Hi \ man!"
  3. // es6
  4. const template = `<div> <span>hello world</span> </div>`

5、函数默认参数

ES6为参数提供了默认值。在定义函数时便初始化了这个参数,以便在参数没有被传递进去时使用。

看例子代码

  1. function action(num = 200) {
  2. console.log(num)
  3. }
  4. action() //200
  5. action(300) //300

6、箭头函数

ES6很有意思的一部分就是函数的快捷写法。也就是箭头函数。

箭头函数最直观的三个特点。

1不需要function关键字来创建函数

2省略return关键字

3继承当前上下文的 this 关键字

看下面代码(ES6)

  1. (response,message) => {
  2. .......
  3. }

相当于ES5代码

  1. function(response,message){
  2. ......
  3. }
  4. function add(a,b){
  5. console.log(a+b);
  6. }
  7. add(2,3);
  8. //箭头函数
  9. add2=(a,b)=>{
  10. console.log(a+b);
  11. }
  12. add2(2,3);
  13. //省略函数名,省略return关键字
  14. add3=(a,b)=>a+b;
  15. console.log(add3(2,3));

7、对象初始化简写(变量转对象)

ES5我们对于对象都是以键值对的形式书写,是有可能出现键值对重名的。例如

  1. function people(name, age) {
  2. return {
  3. name: name,
  4. age: age
  5. };
  6. }

以上代码可以简写为

  1. function people(name, age) {
  2. return {
  3. name,
  4. age
  5. };
  6. }

8、解构(对象、数组中属性转变量)

数组和对象是JS中最常用也是最重要表示形式。为了简化提取信息,ES6新增了解构,这是将一个数据结构分解为更小的部分的过程

ES5我们提取对象中的信息形式如下

  1. const people = {
  2. name: 'lux',
  3. age: 20
  4. }
  5. const name = people.name
  6. const age = people.age
  7. console.log(name + ' --- ' + age)

是不是觉得很熟悉,没错,在ES6之前我们就是这样获取对象信息的,一个一个获取。现在,ES6的解构能让我们从对象或者数组里取出数据存为变量,例如

  1. //对象
  2. const people = {
  3. name: 'lux',
  4. age: 20
  5. }
  6. const { name, age } = people
  7. console.log(`${ name} --- ${ age}`)
  8. //数组
  9. const color = ['red', 'blue']
  10. const [first, second] = color
  11. console.log(first) //'red'
  12. console.log(second) //'blue'

9、Spread Operator(数据追加的过程)

ES6中另外一个好玩的特性就是Spread Operator 也是三个点儿…接下来就展示一下它的用途。 组装对象或者数组(表示对象、数组的扩展,值的融合)

  1. //数组
  2. const color = ['red', 'yellow']
  3. const colorful = [...color, 'green', 'pink']
  4. console.log(colorful) //[red, yellow, green, pink]
  5. //对象
  6. const alp = { fist: 'a', second: 'b'}
  7. const alphabets = { ...alp, third: 'c' }
  8. console.log(alphabets) //{ "fist": "a", "second": "b", "third": "c"

6.3.9 import 和 export

import导入模块、export导出模块

lib.js

  1. let fn0=function(){
  2. console.log('fn0...');
  3. }
  4. export { fn0}

demo9.js

  1. import { fn0} from './lib'
  2. fn0();

注意:node(v8.x)本身并不支持import关键字,所以我们需要使用babel的命令行工具来执行(配置详见6.2小节内容)

  1. babel-node demo9

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV85MDc0ODY4NTI_size_16_color_FFFFFF_t_70_pic_center

发表评论

表情:
评论列表 (有 0 条评论,340人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6规范

    文章开篇我要放一下最敬佩的大神阮叔的ES6入门书籍《ECMAScript 6入门》    链接地址:[http://es6.ruanyifeng.com/][http_es6