📜  面向开发人员的 10 个最常见的 ES6 面试问题和答案

📅  最后修改于: 2021-10-19 05:50:09             🧑  作者: Mango

当 JavaScript 出现在编程世界的画面中时,出于营销原因选择了这个名字。那时Java在世界各地都很流行(但你最好知道两者是不同的)。后来它被提交给 ECMA(欧洲计算机制造商协会)以标准化该语言及其规范。

10 个最常被问到的 ES6 面试问题-开发者答案

后来它被命名为 ES 的 ECMAScript。第一版于 1997 年 6 月发布。ES6 是该语言的第六版,后来更名为 ECMAScript 2015。该版本引入了许多新特性,例如类、模块、迭代器、for/of 循环、箭头函数、类型化数组、承诺、反思等。

2016 年 6 月,ES6 发布,后来更名为 ECMAScript 2015。2017 年 6 月,第 8 版发布,其中包含一些并发和原子性、与 promise 的语法集成(async/await)的功能。让我们讨论一些您应该为面试准备的常见问题。这些问题将有助于清除专门针对前端开发角色的面试。

1. ES6 有哪些常见的 Features?

以下是 ES6 的共同特性……

  • 支持常量/不可变变量。
  • 块作用域支持变量、常量、函数。
  • 箭头函数
  • 扩展参数处理
  • 默认参数
  • 模板字面量和扩展字面量。
  • 解构赋值
  • 箭头函数
  • 承诺
  • 班级
  • 模块
  • 支持 Map/Set 和 WeakMap/WeakSet
  • Promises、本地化、元编程、国际化

2. let 和 const 是什么?两者与 var 有何不同?

在 JavaScript 中,当我们使用 var 关键字声明任何变量时。 var 关键字是函数作用域。我们可以在函数内访问变量。这导致每当我们必须创建一个新的作用域时,都会将代码包装在一个函数。

Let 和 const 都是块作用域。如果您使用这些关键字声明一个变量,那么它只存在于围绕它们的最里面的块中。假设您在块内使用 let 声明了一个变量(如果是条件或 for 循环),那么它只能在块内访问。

下面是一个 let 关键字的例子……

Javascript
if(true) {
    let a=0;
    console.log(a); //prints 0;
}
  
console.log(a); throws ReferenceError: a is not defined.


Javascript
const a=0;
a=1; // TypeError: Assignment to constatnt variable.
const b= [1, 2];
b.push(3); //[1, 2, 3]
b[3]= 4; // [1, 2, 3, 4]


Javascript
function add(a, b) {
    return a+b;
};
  
//Implementation with arrow function
  
const add = (a, b) =>a+b;
  
// With single argument, no parenthesis required
  
const add5 = a => 5+a;


Javascript
var mySet = new Set();
  
mySet.add(1); // Set [1]
mySet.add(5); // Set [1, 5]
mySet.add(5); // Set [1, 5] --ignored


Javascript
function *infiniteNumbers() {
    let n=1;
    while(true) {
        yield n++;
    }
}
  
const numbers = infiniteNumbers(); // returns an iterable object
  
numbers.next(); // { value: 1, done: false}
numbers.next(); // { value: 2, done: false}
numbers.next(); // { value: 3, done: false}


Javascript
let num1 = [40,50,60];  
    
let num2 = [10,20,30,...num1,70,80,90,100];  
    
console.log(num2);


Javascript
let fullname =['Alan','Rickman'];  
let [fname,lname] = fullname;  
console.log (fname,lname);


Const 在 JavaScript 中是不可变的。一旦它被声明,你就不能改变或重新分配它的值。

Javascript

const a=0;
a=1; // TypeError: Assignment to constatnt variable.
const b= [1, 2];
b.push(3); //[1, 2, 3]
b[3]= 4; // [1, 2, 3, 4]

练习使用 let 和 const 而不是 var 关键字。

3. 什么是箭头函数?普通函数和箭头函数什么区别?

在 ES6 中定义了箭头函数来定义函数并使用它。基本上,它是箭头函数的速记符号。您可以将参数列表 (…..) 传递给箭头函数,然后是 =>marker 和函数体。如果您使用单个参数声明箭头函数,则不需要使用括号。

Javascript

function add(a, b) {
    return a+b;
};
  
//Implementation with arrow function
  
const add = (a, b) =>a+b;
  
// With single argument, no parenthesis required
  
const add5 = a => 5+a;

让我们讨论箭头函数和普通函数之间的一些区别。

  • 他们没有自己的版本,并且他们关闭了这一点。
  • 它们可以有一个简洁的正文而不是冗长的正文。 (他们也可以有一个冗长的身体)
  • 您不能将它们用作构造函数。不允许将 new 与箭头函数一起使用。这只是意味着箭头函数不能有原型属性。
  • 箭头函数没有生成器语法。例如:没有等效于函数 *foo() {…} 的箭头。

4. 设置了什么?

Set是新值的集合。在 Set 中,不应有任何重复值。所有的值都应该是唯一的。这些值可以是原始类型或对象引用。

Javascript

var mySet = new Set();
  
mySet.add(1); // Set [1]
mySet.add(5); // Set [1, 5]
mySet.add(5); // Set [1, 5] --ignored

NaN 和 undefined 可以存储在 Set 中。

5. 什么是生成器函数?

这是 ES6 的一个新特性。生成器函数允许您随时间生成许多值,返回一个对象。我们可以迭代这个对象,我们可以一次从函数提取一个值。当您调用生成器函数,它会返回一个可迭代对象。我们在 ES6 中使用 * 符号作为带有新的“yield”关键字的生成器函数。

Javascript

function *infiniteNumbers() {
    let n=1;
    while(true) {
        yield n++;
    }
}
  
const numbers = infiniteNumbers(); // returns an iterable object
  
numbers.next(); // { value: 1, done: false}
numbers.next(); // { value: 2, done: false}
numbers.next(); // { value: 3, done: false}

6. ES6 中的展开运算符是什么?

展开运算符用于获取参数列表。它由三个点 (…) 表示。基本上展开运算符采用可迭代对象(例如 array 或字符串)并将其扩展为单个元素。在 JavaScript 中,主要用于制作 JS 的浅拷贝。它使您的代码简洁并提高了代码的可读性。

您可以使用扩展运算符来组合或执行数组之间的串联。下面给出一个例子……

Javascript

let num1 = [40,50,60];  
    
let num2 = [10,20,30,...num1,70,80,90,100];  
    
console.log(num2);

7. ES6 中的解构是什么?

在 ES6 中,解构被引入来从数组和对象中提取数据到一个单独的变量中。它允许您从对象和数组中提取较小的片段。下面给出一个例子……

Javascript

let fullname =['Alan','Rickman'];  
let [fname,lname] = fullname;  
console.log (fname,lname);

8. 在 ES6 中定义 Map。

在引入 ES6 之前,我们使用对象来映射键和值。 Map 成为 ES6 中一种以键值对表示数据的新方式。 Map 是有序的,它会记住键的插入顺序。您可以按元素的插入顺序遍历元素。

下面是 Map 的表示

var map = new Map([iterable]);

9. 解释 ES6 中的 Promise。

在 JavaScript 中,有一个异步编程的概念。在异步编程中,您可以从主线程单独运行进程。在 ES6 中,promise 是处理异步编程的最简单方法。根据操作结果,可以拒绝或解决承诺。在 ES6 中引入 promise 之前,回调用于处理异步编程。

但它产生了回调地狱的问题,并引入了承诺来克服这个问题。

10. JavaScript 中的回调和回调地狱是什么?

在回调中,一个函数在另一个函数完成后被执行。在 JavaScript 中,回调有助于处理事件。我们将一个函数作为另一个函数的参数传递给另一个函数。

当我们在 Web 应用程序中使用回调时,很多时候回调会嵌套。过度使用回调会使您的 Web 应用程序变得混乱并导致回调地狱。

结论

我们已经包含了 ES6 的 10 个重要问题,这些问题对于面试来说非常重要。除了这些问题,ES6 中还有一些其他重要的概念。例如…

  • JavaScript 中的模块
  • 在 JavaScript 中提升
  • 巴别塔的概念
  • Webpack 的概念
  • 弱集的概念
  • 弱图的概念
  • 模板字面量

要学习 JavaScript,请参阅JavaScript 教程