ES6第一部分(简介,Babel,let 命令,const,解构赋值)

ES6 https://es6.ruanyifeng.com/#docs/intro

1.简介

(1)Node 是javaScript的服务器的运行环境
可以使用 node --v8-options | findstr harmony 查看node已经实现的ES6特性
(2)访问ruanyf.github.io/es-checker,可以看到您的浏览器支持 ES6 的程度。 92%
(3)运行下面的命令,可以查看你正在使用的 Node 环境对 ES6 的支持程度。
npm install -g es-checker 再输入 es-checker 92%

2.Babel

(1) Babel 是一个广泛使用的ES6转码器,可以将 ES6 代码转为 ES5 代码

// 转码前input.map(item => item + 1);
// 转码后input.map(function (item) {
  return item + 1;});

下面的命令在项目目录中,安装 Babel。

npm install --save-dev @babel/core

(2).配置文件 .babelrc
Babel 的配置文件是.babelrc,存放在项目的根目录下.使用 Babel 的第一步,就是配置这个文件。
(2)命令行转码
安装命令:npm install --save-dev @babel/cli
(3)Babel-node
@babel/node模块的babel-node命令,提供一个支持 ES6 的 REPL 环境。它支持 Node 的 REPL 环境的所有功能,而且可以直接运行 ES6 代码。
安装命令: npm install --save-dev @babel/node
(4)@babel/register模块
@babel/register模块改写require命令,为它加上一个钩子。此后,每当使用require加载.js、.jsx、.es和.es6后缀名的文件,就会先用 Babel 进行转码。
安装命令:npm install --save-dev @babel/register
(5)@babel/polyfill
Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API。Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API
安装命令: npm install --save-dev core-js regenerator-runtime

3. let 命令
   所声明的变量,只在let命令所在的代码块内有效。

(1)for许循环的计数器,就很适合使用let命令。
For循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
(2)不存在变量提升
Var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined

// var 的情况console.log(foo); // 输出undefined
var foo = 2;
// let 的情况console.log(bar); // 报错ReferenceError
let bar = 2;

(3)暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
(4)不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。

4.匿名立即执行函数表达式(匿名IIFE)

// IIFE 写法(function () {
var tmp = …;
…}());

5.应该避免在块级作用域内声明函数,如果确实需要,也应该写成函数表达式,而不是函数声明语句。
6.Const

1.const声明一个只读的常量,一旦声明,常量的值就不能改变
2.const一旦声明变量,就必须立即初始化
3.只在声明所在的块级作用域内有效
4.将对象冻结,应该使用Object.freeze

7. 顶层对象的属性

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。

8. 解构赋值
数组的解构赋值

(1)ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。

let [a, b, c] = [1, 2, 3];

(2)解构赋值允许指定默认值。

let [foo = true] = [];
foo // true

对象的解构赋值
数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
(1)如果要将一个已经声明的变量用于解构赋值,必须非常小心。

// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error
// 正确的写法
let x;
({x} = {x: 1});

(2)解构赋值允许等号左边的模式之中,不防止任何变量名。

({} = [true, false]);
({} = 'abc')
({} = []);

上面的表达式虽然毫无意义,但是语法是合法的,可以执行。

字符串的解构赋值

字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。

const [a, b, c, d, e] = 'hello';
a // "h" 
b // "e" 
c // "l" 
d // "l" 
e // "o"
函数参数的解构赋值
[[1, 2], [3, 4]].map(([a, b]) => a + b);
// [ 3, 7 ]

undefined就会触发函数参数的默认值。

[1, undefined, 3].map((x = 'yes') => x);
// [ 1, 'yes', 3 ]
圆括号问题

只要有可能导致解构的歧义,就不得使用圆括号。建议只要有可能,就不要在模式中放置圆括号。

不能使用圆括号的情况

(1)变量声明语句
变量声明语句,模式不能使用圆括号
(2)函数参数
函数参数也属于变量声明,因此不能带有圆括号。
(3)赋值语句的模式
将整个模式放在圆括号之中,导致报错。

可以使用圆括号的情况

赋值语句的非模式部分,可以使用圆括号。

[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确

首先它们都是赋值语句,而不是声明语句;其次它们的圆括号都不属于模式的一部分。

用途

(1)交换变量的值

let x = 1;let y = 2;
[x, y] = [y, x];

(2)从函数返回多个值
函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。
(3)函数参数的定义
解构赋值可以方便地将一组参数与变量名对应起来。

// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);
// 参数是一组无次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});

(4)提取JSON数据
(5)函数参数的默认值

jQuery.ajax = function (url, {
  async = true,
  beforeSend = function () {},
  cache = true,
  complete = function () {},
  crossDomain = false,
  global = true,
  // ... more config
} = {}) {
  // ... do stuff};

(6)遍历Map结构
(7)输入模块的指定方法
加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值