📅  最后修改于: 2021-01-01 04:22:01             🧑  作者: Mango
下面列出了一些常见的ES6面试问答。
ES6于2015年6月发布,被称为该语言的第六版。最初,它被命名为ES6 ,后来被重命名为ECMAScript2015。该版本包括几个新功能,包括模块,迭代器,类,箭头函数,for … of循环,promise等。 Brendan Eich开发了它。
这是ECMA-262标准中定义的规范,用于创建通用脚本语言。
ES6中引入的新功能列出如下:
let:使用let关键字声明的变量将是可变的,即可以更改变量的值。它与var关键字类似,除了它提供块作用域。
const:使用const关键字声明的变量是不可变的,并且具有块作用域。如果使用const关键字声明了变量的值,则不能更改或重新分配它们。
箭头功能在ES6函数的简写形式。箭头函数的定义由参数,后跟箭头(=>)和函数主体组成。
箭头函数也称为“胖箭头”函数。我们不能将它们用作构造函数。
句法
const functionName = (arg1, arg2, ...) => {
//body of the function
}
箭头函数为我们提供了一种更准确的函数的方法。它们使我们能够编写较小的函数语法。
箭头函数中的上下文在词法或静态范围内。箭头函数不包含任何原型属性,并且不能与new关键字一起使用。
您可以通过单击链接ES6 Arrow Function来了解有关箭头功能的更多信息。
例
var myfun = () => {
console.log("It is an Arrow Function");
};
myfun();
输出量
It is an Arrow Function
箭头功能的优点
箭头函数的优点如下:
扩展运算符由三个点(…)表示,以获取参数列表。它允许在期望超过零个参数的地方扩展可迭代的数组或字符串。
扩展运算符的语法与其余运算符相似,但功能完全相反。它也可用于组合或执行数组之间的串联。让我们通过一个例子来理解它。
例
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
]
ES6中引入了它,以提高处理参数的能力。使用剩余参数,可以将不确定参数表示为数组。通过使用其他参数,我们可以调用任意数量的参数的函数。
例
function show(...args) {
let sum = 0;
for (let i of args) {
sum += i;
}
console.log("Sum = "+sum);
}
show(10, 20, 30);
输出量
Sum = 60
模板字面量是ES6中引入的新功能。它提供了创建多行字符串和执行字符串插值的简便方法。
模板字面量允许嵌入表达式,也称为字符串字面量。
在ES6之前,模板字面量被称为模板字符串。模板字面量用反引号(`)字符括起来。模板字面量中的占位符由美元符号和花括号($ {expression})表示。如果需要在反引号内使用表达式,则可以将该表达式放在($ {expression})中。
要了解有关ES6中模板字面量的更多信息,请点击此链接ES6模板字面量。
例
let str1 = "Hello";
let str2 = "World";
let str = `${str1} ${str2}`;
console.log(str);
输出量
Hello World
ECMAScript 2015或ES6中引入了解构,以从对象和数组中提取数据到单独的变量中。它允许我们从对象和数组中提取较小的片段。
要了解有关ES6中的数组解构的更多信息,请单击此链接ES6数组解构。
要了解有关ES6中对象分解的更多信息,请点击此链接ES6 Object Destructuring。
例
let fullname =['Alan','Rickman'];
let [fname,lname] = fullname;
console.log (fname,lname);
输出量
Alan Rickman
此关键字用于创建类。我们可以通过使用类表达式或通过类声明将类包括在代码中。类定义只能包含函数和构造函数。这些组件一起称为类的数据成员。
类中的构造函数将内存分配给类的对象。类中的函数负责对对象执行操作。
要了解有关ES6中类的更多信息,请单击此链接ES6类。
让我们看看创建类的语法。
语法:在ES5中
var var_name = new class_name {
}
语法:在ES6中(使用class关键字)
class class_name{
}
生成器为我们提供了一种使用迭代器和函数的新方式。生成器是一种特殊的函数,可以在中间暂停一次或多次,然后可以恢复。声明函数*(函数关键字后跟一个星号)用于定义生成器函数。
当生成器被调用时,它不会运行其代码。而是返回一个特殊的对象,称为生成器对象以管理执行。让我们看一下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
通过使用默认参数,如果没有值或未定义,则可以使用默认值初始化命名参数。
例
var show = (a, b=200) => {
console.log(a + " " + b);
}
show(100);
输出量
100 200
IIFE是JavaScript中的一个函数,它在定义后立即运行。它也称为自执行匿名函数。它包括两个主要部分,如下所示:
您可以通过单击此链接ES6 IIFE了解有关箭头功能的更多信息。
例
(function()
{
console.log("Hello World");
})();
输出量
Hello World
它类似于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
此循环用于迭代可迭代对象(数组,字符串等)。
例
var fruits = ['Apple', 'Banana', 'Mango', 'Orange'];
for(let value of fruits)
{
console.log(value);
}
输出量
Apple
Banana
Mango
Orange
集合是一种数据结构,可让我们创建唯一值的集合。它是类似于数组的值的集合,但不包含任何重复项。它支持对象引用和原始值。
要了解有关ES6中集合的更多信息,请点击此链接ES6集合。
例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
console.log(colors);
输出量
Set { 'Green', 'Red', 'Orange', 'Yellow' }
在ES6之前,当我们需要键和值的映射时,我们经常使用一个对象。 Map对象是ES6中引入的新集合类型。它包含键-值对,在其中可以将任何类型的值用作键或值。
映射对象始终记住键的实际插入顺序。地图是有序的,因此它们按其插入顺序遍历元素。
要了解有关ES6中的Map的更多信息,请点击此链接ES6 Maps 。
使用弱集,可以将弱保存的对象存储在集合中。与set类似,weakset无法存储重复值。弱集不能迭代。
弱集仅包含set对象的add(value),delete(value)和has(value)方法。
弱映射几乎与映射相似,但是弱映射中的键必须是对象。它将每个元素存储为键-值对,其中键被弱引用。这里,键是对象,值是任意的。
弱映射对象按其插入顺序迭代元素。它仅包括delete(key),get(key),has(key)和set(key,value)方法。
ES6 Promise是使用JavaScript进行异步编程的最简单方法。异步编程包括从主线程单独运行进程,并在完成后通知主线程。
在ES6之前,使用回调来执行异步编程。承诺用于克服回调地狱问题。
要了解有关承诺的更多信息,请单击以下链接: ES6 Promises 。
承诺主要有以下三种状态:
一旦诺言被兑现或兑现,那么它将是不可变的。 Promise()构造函数接受两个参数,分别为拒绝函数和解析函数。基于异步操作,它返回第一个参数或第二个参数。
回调:用于在另一个函数执行完成后处理函数的执行。回调将有助于处理事件。在回调中,一个函数可以作为参数传递给另一个函数。当我们处理诸如最少的异步操作之类的基本情况时,这是一个好方法。
回调地狱:当我们开发包含很多代码的Web应用程序时,使用回调是很麻烦的。这种过多的Callback嵌套通常称为Callback hell 。
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
模块是写在文件中的一段JavaScript代码。通过使用模块,可以轻松维护代码,调试代码和重用代码。每个模块都是一段代码,一旦加载,便会执行。
这是JavaScript的默认行为,用于在执行代码之前将所有声明移到作用域的顶部。它既可以应用于函数也可以应用于变量。它允许JavaScript在声明组件之前使用组件。它不适用于以严格模式运行的脚本。
ES6中有许多可用的数组方法,下面列出了这些方法:
要了解有关上述数组方法的更多信息,请单击以下链接: ES6数组方法。
ES6中引入了四种字符串方法,分别列出如下:
要了解有关字符串的更多信息,请单击以下链接: ES6字符串。
Babel是流行的JavaScript编译器之一。它主要用于将ES6 plus代码转换为可以由以前的JavaScript引擎运行的JavaScript的向后兼容版本。
这是一个开放源代码的JavaScript模块捆绑程序,用于处理具有依赖性的模块。它使我们可以运行托管Babel的环境。