0
点赞
收藏
分享

微信扫一扫

ECMAScript6新特性(一)-全面详解(学习总结---从入门到深化)

 

命令行工具

 在正式讲解ES6新特性之前,我们需要了解一些命令行工具,在日后的课程中,我们会经常用到命令行

 

 实时效果反馈

1. 如何快速打开 CMD 命令行工具:

A win+R

B win+E

C win+P

D win+L


2. CMD 命令行中进入文件夹或目录:

A win+R

B mkdir 文件夹名称

C cd ../

D cd 文件夹名称

ECMAScript 6 简介

 ECMAScript 和 JavaScript 的关系

ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现,常场合,这两个词是可以互换的。

名称详解

ECMAScript 6(以下简称 ES6)是 JavaScript 语言的标准,在 2015 年 6 月发布。它的目标,是使得 JavaScript 语言可以用来编 写复杂的大型应用程序,成为企业级开发语言。

 

 因此,ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后 的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等

语法提案的批准流程

任何人都可以向标准委员会(又称 TC39 委员会)提案,要求修改语言标准。

一种新的语法从提案到变成正式标准,需要经历五个阶段。每个阶段的变动都需要由 TC39 委员会批准。

 

 一个提案只要能进入 Stage 2,就差不多肯定会包括在以后的正式 标准里面。ECMAScript 当前的所有提案,可以在 TC39 的官方网站 ​​GitHub.com/tc39/ecma262​​查看。

 

 Babel转码器

 Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代 码,从而在老版本的浏览器执行。这意味着,你可以用 ES6 的方式 编写程序,又不用担心现有环境是否支持

 浏览器支持性查看 ​​https://caniuse.com/​​

 转码示例

原始代码用了箭头函数,Babel 将其转为普通函数,就能在不支持 箭头函数的 JavaScript 环境执行了

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

Babel安装流程

第一步:安装 Babel

npm install --save-dev @babel/core

第二步:配置文件 .babelrc

Babel 的配置文件是.babelrc,存放在项目的根目录下。使用 Babel 的第一步,就是配置这个文件。 该文件用来设置转码规则和插件,基本格式如下

{
"presets": [],
"plugins": []
}

第三步:转码规则

presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装

npm install --save-dev @babel/preset-env

 第四步:将规则加入 .babelrc

{
"presets": [
"@babel/env"
],
"plugins": []
}

Babel命令行转码

Babel 提供命令行工具 @babel/cli ,用于命令行转码

npm install --save-dev @babel/cli

 基本用法如下

# 转码结果输出到标准输出
$ npx babel example.js

# 转码结果写入一个文件
# --out-file 或 -o 参数指定输出文件
$ npx babel example.js --out-file compiled.js

# 或者
$ npx babel example.js -o compiled.js

# 整个目录转码
# --out-dir 或 -d 参数指定输出目录
$ npx babel src --out-dir lib

# 或者
$ npx babel src -d lib

实时效果反馈

1. Babel的作用是什么:

A Babel是ES6的一部分,是ES6的新特性

B Babel是ES6的转码器,可以将 ES6 代码转为 ES5 代码

C Babel是配置文件,配置ES6环境

D Babel是ES5的基础知识


2. 下列哪个是安装Babel命令转码工具:

A npm install --save-dev @babel/core

B npm install --save-dev @babel/preset-env

C npm install --save-dev @babel/cli

D npx babel example.js

 Let 命令

 ES6 新增了 let 命令,用来声明变量。它的用法类似于 var ,但是所声 明的变量,只在 let 命令所在的代码块内有效。

 let块级作用域

{
let itxiaotong = 10;
var sxt = 1;
}
itxiaotong // ReferenceError: itxiaotong is not
defined.
sxt // 1

for 循环的计数器,就很合适使用 let 命令

for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined

对比 var 和 let 在循环中的应用

var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10

上面代码,输出的 10 ,而我们期待的是 6

var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6

上面代码,输出的 6

let不存在变量提升

var 命令会发生“变量提升”现象,即变量可以在声明之前使用,值为 undefined 。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量 应该在声明语句之后才可以使用 为了纠正这种现象, let 命令改变了语法行为,它所声明的变量一定 要在声明后使用,否则报错。

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

let不允许重复声明

let 不允许在相同作用域内,重复声明同一个变量。

// 报错
function func() {
let a = 10;
var a = 1;
}
// 报错
function func() {
let a = 10;
let a = 1;
}

实时效果反馈

1. 下列那个不是Let的特性:

A Let是块级作用域

B Let不存在变量提升

C Let不允许重复声明

D Let和Var一样并没有区别

 Let命令应用场景

let 明 显更加方便和更好理解

for(var i = 0;i<lis.length;i++){
(function(i){
lis[i].onmouseenter = function(){
for(var j = 0;j<lis.length;j++){
lis[j].removeAttribute("class");
divs[j].removeAttribute("class")
}
lis[i].setAttribute("class","select")
divs[i].setAttribute("class","div-select")
}
}(i))
}

改之后 

for(let i = 0;i<lis.length;i++){
lis[i].onmouseenter = function(){
for(var j = 0;j<lis.length;j++){
lis[j].removeAttribute("class");
divs[j].removeAttribute("class")
}
lis[i].setAttribute("class","select")
divs[i].setAttribute("class","div-select")
}
}

Const 命令

 const 声明一个只读的常量。一旦声明,常量的值就不能改变

const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.

const 声明的变量不得改变值,这意味着, const 一旦声明变量,就必须立即初始化,不能留到以后赋值

const foo;
// SyntaxError: Missing initializer in const declaration

const 的作用域与let命令相同:只在声明所在的块级作用域内有效

if (true) {
const MAX = 5;
}
MAX // Uncaught ReferenceError: MAX is not defined

const 命令声明的常量也是不提升

if (true) {
console.log(MAX); // ReferenceError
const MAX = 5;
}

const 声明的常量,也与 let 一样不可重复声明

var message = "Hello!";
let age = 25;
// 以下两行都会报错
const message = "Goodbye!";
const age = 30;

实时效果反馈

1. 下列 const 特性描述错误的是:

A const 命令声明的常量不提升

B const 命令不可重复声明

C const 命令是块级作用域

D const 命令声明可以改变

举报

相关推荐

0 条评论