📜  ES6面试的前30个问题

📅  最后修改于: 2021-01-01 04:22:01             🧑  作者: Mango

ES6面试题

下面列出了一些常见的ES6面试问答。

1)什么是ES6或ECMAScript 2015?

ES6于2015年6月发布,被称为该语言的第六版。最初,它被命名为ES6 ,后来被重命名为ECMAScript2015。该版本包括几个新功能,包括模块,迭代器,类,箭头函数,for … of循环,promise等。 Brendan Eich开发了它。

2)定义ECMAScript。

这是ECMA-262标准中定义的规范,用于创建通用脚本语言。

3)ES6中引入了哪些新功能?

ES6中引入的新功能列出如下:

  • Let和const关键字。
  • 默认参数。
  • 箭头功能。
  • 模板字面量。
  • 对象字面量。
  • 休息和传播运算符。
  • 销毁工作分配。
  • 模块,类,生成器和迭代器。
  • 承诺,还有更多。

4)定义let和const关键字。

let:使用let关键字声明的变量将是可变的,即可以更改变量的值。它与var关键字类似,除了它提供块作用域。

const:使用const关键字声明的变量是不可变的,并且具有块作用域。如果使用const关键字声明了变量的值,则不能更改或重新分配它们。

5)什么是箭头函数,以及如何创建?

箭头功能在ES6函数的简写形式。箭头函数的定义由参数,后跟箭头(=>)和函数主体组成。

箭头函数也称为“胖箭头”函数。我们不能将它们用作构造函数。

句法

const functionName = (arg1, arg2, ...) => {
    //body of the function
}

6)举一个ES6中的Arrow函数的例子吗?列出其优势。

箭头函数为我们提供了一种更准确的函数的方法。它们使我们能够编写较小的函数语法。

箭头函数中的上下文在词法或静态范围内。箭头函数不包含任何原型属性,并且不能与new关键字一起使用。

您可以通过单击链接ES6 Arrow Function来了解有关箭头功能的更多信息。

var myfun = () => {  
    console.log("It is an Arrow Function");     
   };
   myfun();

输出量

It is an Arrow Function

箭头功能的优点

箭头函数的优点如下:

  • 它减少了代码大小。
  • return语句对于单行函数是可选的。
  • 词汇绑定上下文。
  • 对于单行语句,功能括号是可选的。

7)通过一个示例讨论ES6中的传播运算符。

扩展运算符由三个点(…)表示,以获取参数列表。它允许在期望超过零个参数的地方扩展可迭代的数组或字符串。

扩展运算符的语法与其余运算符相似,但功能完全相反。它也可用于组合或执行数组之间的串联。让我们通过一个例子来理解它。

let num1 = [40,50,60];

let num2 = [10,20,30,...num1,70,80,90,100];

console.log(num2);

输出量

[
  10, 20, 30, 40,  50,
  60, 70, 80, 90, 100
]

8)通过示例讨论ES6中的Rest参数。

ES6中引入了它,以提高处理参数的能力。使用剩余参数,可以将不确定参数表示为数组。通过使用其他参数,我们可以调用任意数量的参数的函数。

function show(...args) {
    let sum = 0;
    for (let i of args) {
        sum += i;
    }
    console.log("Sum = "+sum);
  }
  
  show(10, 20, 30);

输出量

Sum = 60

9)ES6中的模板字面量是什么?

模板字面量是ES6中引入的新功能。它提供了创建多行字符串和执行字符串插值的简便方法。

模板字面量允许嵌入表达式,也称为字符串字面量。

在ES6之前,模板字面量被称为模板字符串。模板字面量用反引号(`)字符括起来。模板字面量中的占位符由美元符号和花括号($ {expression})表示。如果需要在反引号内使用表达式,则可以将该表达式放在($ {expression})中

要了解有关ES6中模板字面量的更多信息,请点击此链接ES6模板字面量。

let str1 = "Hello";

let str2 = "World";
 
let str = `${str1} ${str2}`;
console.log(str);

输出量

Hello World

10)在ES6中讨论解构分配。

ECMAScript 2015或ES6中引入了解构,以从对象和数组中提取数据到单独的变量中。它允许我们从对象和数组中提取较小的片段。

要了解有关ES6中的数组解构的更多信息,请单击此链接ES6数组解构。

要了解有关ES6中对象分解的更多信息,请点击此链接ES6 Object Destructuring。

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

输出量

Alan Rickman

11)如何在ES6中创建一个类?

此关键字用于创建类。我们可以通过使用类表达式或通过类声明将类包括在代码中。类定义只能包含函数构造函数。这些组件一起称为类的数据成员。

类中的构造函数将内存分配给类的对象。类中的函数负责对对象执行操作。

要了解有关ES6中类的更多信息,请单击此链接ES6类。

让我们看看创建类的语法。

语法:在ES5中

var var_name = new class_name {  
}

语法:在ES6中(使用class关键字)

class class_name{  
} 

12)您对生成器函数了解什么?

生成器为我们提供了一种使用迭代器和函数的新方式。生成器是一种特殊的函数,可以在中间暂停一次或多次,然后可以恢复。声明函数*(函数关键字后跟一个星号)用于定义生成器函数。

当生成器被调用时,它不会运行其代码。而是返回一个特殊的对象,称为生成器对象以管理执行。让我们看一下ES6中生成器的示例。

要了解有关ES6中的Generators的更多信息,请点击此链接ES6 Generators。

function* gen()  
{  
yield 100;  
yield;  
yield 200;  
}  
// Calling the Generator Function  
var mygen = gen();  
console.log(mygen.next().value);  
console.log(mygen.next().value);  
console.log(mygen.next().value);  

输出量

100
undefined
200

13)默认参数是什么?

通过使用默认参数,如果没有值或未定义,则可以使用默认值初始化命名参数。

var show = (a, b=200) => {
    console.log(a + " " + b);
}
show(100);

输出量

100 200

14)IIFE(立即调用的函数表达式)是什么意思?

IIFE是JavaScript中的一个函数,它在定义后立即运行。它也称为自执行匿名函数。它包括两个主要部分,如下所示:

  • 第一部分是具有词法作用域(静态作用域)的匿名函数,该函数包含在Grouping运算符()中
  • 第二部分创建IIFE,JavaScript引擎将通过该IIFE直接解释该函数。

您可以通过单击此链接ES6 IIFE了解有关箭头功能的更多信息。

(function()  
 {  
 console.log("Hello World");   
})();  

输出量

Hello World

15)讨论for … in循环。

它类似于for循环,它循环访问对象的属性。当我们需要访问对象的属性或键时,这很有用。

function Mobile(model_no){  
    this.Model = model_no;  
    this.Color = 'White';  
    this.RAM = '4GB';  
    }  
    var Samsung = new Mobile("Galaxy");  
    for(var props in Samsung)  
    {  
    console.log(props+ " : " +Samsung[props]);  
    }  

输出量

Model: Galaxy
Color:  White
RAM: 4GB

16)讨论for … of循环。

此循环用于迭代可迭代对象(数组,字符串等)。

var fruits = ['Apple', 'Banana', 'Mango', 'Orange'];  
for(let value of fruits)  
{  
  console.log(value);   
}  

输出量

Apple
Banana
Mango
Orange

17)定义集合。

集合是一种数据结构,可让我们创建唯一值的集合。它是类似于数组的值的集合,但不包含任何重复项。它支持对象引用和原始值。

要了解有关ES6中集合的更多信息,请点击此链接ES6集合。

let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);  
console.log(colors);  

输出量

Set { 'Green', 'Red', 'Orange', 'Yellow' }

18)定义地图。

在ES6之前,当我们需要键和值的映射时,我们经常使用一个对象。 Map对象是ES6中引入的新集合类型。它包含键-值对,在其中可以将任何类型的值用作键或值。

映射对象始终记住键的实际插入顺序。地图是有序的,因此它们按其插入顺序遍历元素。

要了解有关ES6中的Map的更多信息,请点击此链接ES6 Maps 。

19)您对Weakset有什么了解?

使用弱集,可以将弱保存的对象存储在集合中。与set类似,weakset无法存储重复值。弱集不能迭代。

弱集仅包含set对象的add(value),delete(value)has(value)方法。

20)您对Weakmap了解什么?

弱映射几乎与映射相似,但是弱映射中的键必须是对象。它将每个元素存储为键-值对,其中键被弱引用。这里,键是对象,值是任意的。

弱映射对象按其插入顺序迭代元素。它仅包括delete(key),get(key),has(key)set(key,value)方法。

21)解释ES6中的承诺。

ES6 Promise是使用JavaScript进行异步编程的最简单方法。异步编程包括从主线程单独运行进程,并在完成后通知主线程。

在ES6之前,使用回调来执行异步编程。承诺用于克服回调地狱问题。

要了解有关承诺的更多信息,请单击以下链接: ES6 Promises 。

22)ES6中承诺的状态是什么?

承诺主要有以下三种状态:

  • 待定:这是每个承诺的初始状态。它表示结果尚未计算。
  • 已完成:表示操作已完成。
  • 已拒绝:表示计算期间发生的故障。

一旦诺言被兑现或兑现,那么它将是不可变的。 Promise()构造函数接受两个参数,分别为拒绝函数和解析函数。基于异步操作,它返回第一个参数或第二个参数。

23)您对JavaScript中的Callback和Callback hell有什么了解?

回调:用于在另一个函数执行完成后处理函数的执行。回调将有助于处理事件。在回调中,一个函数可以作为参数传递给另一个函数。当我们处理诸如最少的异步操作之类的基本情况时,这是一个好方法。

回调地狱:当我们开发包含很多代码的Web应用程序时,使用回调是很麻烦的。这种过多的Callback嵌套通常称为Callback hell

24)列出ES5和ES6之间的比较。

ES5和ES6在本质上相似,但是它们之间存在一些差异。 ES5和ES6之间的比较列表如下:

Based on ES5 ES6
Definition ES5 is the fifth edition of the ECMAScript (a trademarked scripting language specification defined by ECMA International) ES6 is the sixth edition of the ECMAScript (a trademarked scripting language specification defined by ECMA International).
Release It was introduced in 2009. It was introduced in 2015.
Data-types ES5 supports primitive data types that are string, boolean, number, null, and undefined. In ES6, there are some additions to JavaScript data types. It introduced a new primitive data type ‘symbol’ for supporting unique values.
Defining Variables In ES5, we could only define the variables by using the var keyword. In ES6, there are two new ways to define variables that are let and const.
Performance As ES5 is prior to ES6, there is a non-presence of some features, so it has a lower performance than ES6. Because of new features and the shorthand storage implementation ES6 has a higher performance than ES5.
Support A wide range of communities supports it. It also has a lot of community support, but it is lesser than ES5.
Object Manipulation ES5 is time-consuming than ES6. Due to destructuring and speed operators, object manipulation can be processed more smoothly in ES6.
Arrow Functions In ES5, both function and return keywords are used to define a function. An arrow function is a new feature introduced in ES6 by which we don’t require the function keyword to define the function.
Loops In ES5, there is a use of for loop to iterate over elements. ES6 introduced the concept of for…of loop to perform an iteration over the values of the iterable objects.

要了解有关ES5和ES6之间差异的更多信息,请访问以下链接: ES5 v / s ES6

25)在JavaScript中定义模块。

模块是写在文件中的一段JavaScript代码。通过使用模块,可以轻松维护代码,调试代码和重用代码。每个模块都是一段代码,一旦加载,便会执行。

26)您对JavaScript提升一词有什么了解?

这是JavaScript的默认行为,用于在执行代码之前将所有声明移到作用域的顶部。它既可以应用于函数也可以应用于变量。它允许JavaScript在声明组件之前使用组件。它不适用于以严格模式运行的脚本。

27)列出ES6中引入的新数组方法?

ES6中有许多可用的数组方法,下面列出了这些方法:

  • Array.of()
  • Array.from()
  • Array.prototype.copyWithin()
  • Array.prototype.find()
  • Array.prototype.findIndex()
  • Array.prototype.entries()
  • Array.prototype.keys()
  • Array.prototype.values()
  • Array.prototype.fill()

要了解有关上述数组方法的更多信息,请单击以下链接: ES6数组方法。

28)ES6中引入了哪些新的String方法?

ES6中引入了四种字符串方法,分别列出如下:

  • 字符串.startsWith()
  • 字符串.endsWith()
  • 字符串.includes()
  • 字符串.repeat()

要了解有关字符串的更多信息,请单击以下链接: ES6字符串。

29)定义通天塔。

Babel是流行的JavaScript编译器之一。它主要用于将ES6 plus代码转换为可以由以前的JavaScript引擎运行的JavaScript的向后兼容版本。

30)定义Webpack。

这是一个开放源代码的JavaScript模块捆绑程序,用于处理具有依赖性的模块。它使我们可以运行托管Babel的环境。