ES6 (总结篇一)

本文详细介绍了ES6中let、const命令的特点与使用方法,包括变量提升、暂时性死区等概念;探讨了块级作用域的优势及函数声明规则的变化;讲解了解构赋值的应用场景,如交换变量值、函数参数定义等。

一.let

1.不存在变量提升。

 var 定义变量时候会有变量提升现象,即变量可以在声明前使用,值为undefined,let改变这种现象,let声明的变量一定要在声明后使用,否则报错。

2.暂时性死区

 在代码块内,使用let声明变量之前,这个变量都是不可以使用的,这就叫做暂时性死区(TDZ),这也意味着,typeof检测类型不再是百分百正确,这里注意:如果typeof x;let x 这样会报错,但是typeof x结果是undefined,也就是没有let之前typeof运算符是百分百正确。

3.不允许重复声明

  let不允许在相同作用域内,重复声明同一个变量,同理,不能在函数内部重新声明参数

二.块级作用域

1.为了解决①.内层变量可能会覆盖外层变量 ②.用来计数的循环变量泄露为全局变量。只在使用大括号的情况下成立,如果没有大括号就会报错!  

2.块级作用域与函数声明

  ES5规定函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明

  ES6引入块级作用域,明确允许在块级作用域中可以声明函数,并且针对ES6的浏览器有以下几条规则:①.允许在块级作用域内声明函数,②.函数声明类似于var,即会提升到全局作用域或函数作用域的头部③,同时,函数声明还会提升到所在的块级作用域的头部

3.do表达式

 块级作用域是一个语句,将多个操作封装在一起,没有返回值,但是使用do表达式之后,可以得到返回值  

let x = do{
let t = f();
t*t+1
} 变量x会得到t*t+1

三.const命令

  const声明一个只读的常量,一旦声明,常量的值就不能改变,如果要改变则会报错;作用域和let一样:只在声明所在的块级作用域有效;也是不存在变量提升;存在暂时性死区;不可重复声明。

四.解构赋值

1.解构赋值不得使用圆括号的情况:①.变量声明的语句 ②.函数参数 ③.赋值语句的模式

  可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号

({ p: (d) } = {}); 
//p是模式,d不是模式,所以这个是对的
({ p: a }) = { p: 42 }; // 是错的

2.用途

(1).交换变量的值

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

(2).从函数返回多个值(函数只能返回一个值,用解构赋值,将他们放在数组或对象里面返回就可以返回多个值)

function example(){
    return [1,2,3]
}
let [a,b,c] = example   //返回一个数组

function example(){
     return {
        foo:1,
        bar:2
    };
}
    let { foo,bar } = example() //返回一个对象
                    

(3).函数参数的定义

  解构赋值可以方便的将一组参数与变量名对应起来

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

    function f({x,y,z}){...}
    f({z:3,y:2,x:1}) //参数是一组无序的值(参数是对象,无序)

(4).提取JSON数据

let jsonData = {
  id: 42,
  status: "OK",
  data: [867, 5309]
};

let { id, status, data: number } = jsonData;

console.log(id, status, number);

(5)遍历map

const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');

for (let [key, value] of map) {
  console.log(key + " is " + value);
}
// first is hello
// second is world

如果只想获取键名,或者只想获取键值,可以写成下面这样。

// 获取键名
for (let [key] of map) {
  // ...
}

// 获取键值
for (let [,value] of map) {
  // ...
}

  

 

转载于:https://www.cnblogs.com/alhh/p/8243257.html

### 关于ECMAScript 6 (ES6)文档和规范 ECMAScript 6(简称ES6),正式名称为ECMAScript 2015,是JavaScript语言的个重要里程碑版本。它引入了许多新特性,显著增强了开发者的编程能力[^1]。 #### 官方规范 官方的ECMAScript规范由Ecma International维护,最新版可以在其官方网站找到。对于ES6的具体细节,可以查阅《ECMA-262》第6版的标准文档[^1]。该文档提供了详尽的技术描述,适合深入研究语言内部机制的人士。 #### 学习资源推荐 除了官方文档外,还有许多优质的第三方资料可以帮助开发者更好地理解和应用ES6的新特性: 1. **Timothy Gu的文章**:如何阅读ECMAScript规范[^2]是非常实用的指南,帮助初学者克服理解官方文档时可能遇到的障碍。 2. **V8团队博客**:他们发布的关于理解ECMAScript的文章同样值得参考,尤其是针对实际实现层面的内容[^2]。 3. **ES6简明参考手册**:这份手册总结了ES6的主要功能点及其用法,非常适合快速入门[^3]。 以下是几个重要的ES6特性和对应的简单示例: #### 新增语法与特性举例 ##### 模块化支持 利用`import`/`export`语句,可以直接定义并导入模块而无需依赖额外工具: ```javascript // 导出函数或变量 export function greet(name) { console.log(`Hello, ${name}`); } // 在另个文件中导入 import {greet} from './module'; greet('World'); ``` ##### 解构赋值 简化对象属性或者数组元素提取过程: ```javascript const obj = {a: 1, b: 2}; let {a, b} = obj; console.log(a); // 输出1 ``` ##### 箭头函数 提供更简洁的函数表达方式以及绑定this上下文: ```javascript const add = (x, y) => x + y; console.log(add(2, 3)); // 输出5 ``` #### 总结 通过以上介绍可以看出,ES6极大地扩展了JavaScript的功能集,使得现代Web应用程序更加高效易读。无论是新手还是经验丰富的工程师都能从中受益匪浅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值