前言
ES6的出现是为了提高 javascript 的严谨性,安全性等方面,它代表着js的发展方向。网站开发的人员,无论前后端都必须熟稔 ES6 语法规范。
带着问题看书
1. ES6 新增的关键词 let 和 var 区别?
a. 使用let声明的变量,只在它所在的代码块内有效。即如果使用let,声明的变量仅在块级作用域内有效。
b. var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。而用let命令声明,不会发生变量提升。
c. let不允许在相同作用域内,重复声明同一个变量。let实际上为 JavaScript 新增了块级作用域。
2.为什么需要块级作用域?
为了更好的管理变量。
避免 内层变量可能会覆盖外层变量。
避免 用来计数的循环变量泄露为全局变量。
3.利用ES6中的块级作用域改写下面广泛使用的立即执行函数表达式(IIFE)?
// IIFE 写法
(function () {
var tmp = ...;
...
}());
// 块级作用域写法
{
let tmp = ...;
...
}
4.const命令的用法?
const声明一个只读的常量。一旦声明,常量的值就不能改变。
5.ES6 声明变量的六种方法?
var
function
let
const
import
class
为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined
6.什么是“解构”?哪些数据类型可以使用解构赋值?
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
数组,对象,字符串,类数组对象都可以解构赋值,另外数值和布尔值也可以结构赋值。
let [a, b, c] = [1, 2, 3];
let { foo, bar } = { foo: "aaa", bar: "bbb" };
const [a, b, c, d, e] = 'hello';
let {length : len} = 'hello';
let [a, b, c] = [1, 2, 3];
函数的参数也可以使用解构赋值。
例如:
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
7.rest参数和arguments的区别?
rest是数组,而argument是类数组对象。
ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。
// arguments变量的写法
function sortNumbers() {
return Array.prototype.slice.call(arguments).sort();
}
// rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();
8.使用ES6中的箭头函数改写下列常用结构?
var f = v => v;
上面的箭头函数等同于:
var f = function(v) {
return v;
};
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
var f = () => 5;
// 等同于
var f = function () { return 5 };
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
9.使用箭头函数有哪些注意点?
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
(5)由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。
长期以来,JavaScript 语言的this对象一直是一个令人头痛的问题,在对象方法中使用this,必须非常小心。箭头函数”绑定”this,很大程度上解决了这个困扰。
10.Promise对象的含义和用法?
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
其实,上面罗列的这些只是这本书的冰山一角,大概也就十分之一吧。