Es6常见面试题必看!

编程入门 行业动态 更新时间:2024-10-28 00:28:49

Es6常见面试题<a href=https://www.elefans.com/category/jswz/34/1769817.html style=必看!"/>

Es6常见面试题必看!

1.let、var和const的区别

1. 作用域规则let和const 声明的变量 形成 块级作用域,在块级作用域下起作用, var 声明的变量 在 全局作用域或者局部作用域下 起作用
2. 是否存在变量提升let 和 const 不存在变量提升, var存在变量提升(在声明之前可以使用)
3. 是否可以重复声明 和 是否可以重复赋值var 可以重复声明,也可以重复赋值let和const 都不可以重复声明,而 let可以重复赋值,const不可以重复赋值
4. 暂时性死区let 和 const存在暂时性死区(let和const声明之前的
区域都称为暂时性死区),而var不存在

2.ECMAScript 和 JavaScript 的关系

该标准从一开始就是针对 JavaScript 语言制定的,但是之所以不叫 JavaScript,有两个原因。一是商标,Java 是 Sun 公司的商标,根据授权协议,
只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript 本身也已经被 Netscape公司注册为商标。二是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性。
因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现

3.箭头函数中的this和普通函数中的this的区别

箭头函数中的this指向定义它的地方(父级作用域),而不指向调用它的地方。

 注意:1) 用let const var 定义的箭头函数 在全局环境下指向window 2) 对象的字面量写法 不产生新的作用域3) 箭头函数中的this不可以使用call apply  bind 改变4) 构造函数 和 构造函数原型对象中的函数 如果用箭头函数依然只 window5) 箭头函数中不含arguments1) 箭头函数不合适使用在 构造函数和原型对象的函数中2) 箭头函数不适合使用在 对象的方法 和 事件后绑定的函数3)  适合在闭包函数中使用4) 适合在数组方法的回调函数中使用5) 适合在计时器的回调函数中使用

4.块级作用域和块级作用域的优势

let和const会形成块级作用域,只要含有{}(除了对象的{}之外) 都会形成块级作用域
ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
第一种场景,内层变量可能会覆盖外层变量。
第二种场景,用来计数的循环变量泄露为全局变量。

5.什么是 暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区” 

6.定义一个person类,自定义一些属性和方法,定义一个Student类继承person类 (用es6语法实现)

class Person{// 构造器 写私有属性和方法constructor(name,age){this.name=name;this.age=age;}//原型方法run(){console.log(this.name+"会跑步")}// 静态方法Cv  isPerson(){console.log(123);}}

7.set和map的区别

1.	Map是键值对,Set是值的集合,当然键和值可以是任何的值;
2.	Map可以通过get方法获取值,而set不能因为它只有值;因为set的值就是键
3.	都能通过迭代器进行for...of遍历;
4.	Set的值是唯一的可以做数组去重,Map由于没有格式限制,可以做数据存

8.什么是promise

Promise 是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大。

Promise对象是一个构造函数,用来生成Promise实例。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)
的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 
API,各种异步操作都可以用同样的方法进行处理。

9.什么是Symbol以及特点

 Symbol为了给对象的属性,提供独一无二的名字,它是一种原始数据类型, JavaScript 语言 的第七 种数据类型,表示独一无二的值,是一种类似于字符串的数据类型特点:1)Symbol的值是唯一的,用来解决命名冲突的问题2)Symbol 值不能与其他类型的值进行运算,会报错。3)Symbol 定义的属性不可以使用for...in进行遍历,可以使用Reflect.ownKeys()获取所有的键名,可以通过Object.getOwnPropertySymbols获取所有的Symbol值4)可以通过显示的方式转为字符串或者布尔类型,不可以转为数字类型

10. Symbol.for()与Symbol()区别

Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境
中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给
定的key是否已经存在,如果不存在才会新建一个值。比如,如果你调用Symbol.for("cat")30 次,每次都
会返回同一个 Symbol 值,但是调用Symbol("cat")30 次,会返回 30 个不同的 Symbol 值。

11.描述promise如何使用,举例说明

let p5=new Promise(function(resolve,reject){$.ajax({url:'data/p5.json',type:'get',success:function(res){resolve(res);},error:function(res){reject(res);}})})
Promise.all([p5]).then(function(res){console.log(res);res.forEach(item=>console.log(item));}).catch(function(res){console.log(res);})

promise详情链接供参考

12.Es6字符串新增方法

includes() 判断是否有该字符串 有返回true;
stratsWith() 判断开头是否有该字符串 有返回true;
endsWith() 判断末尾是否有该字符串 有返回true;
repeat()    返回字符串 将原来字符串重复n次
padStart()用于头部补全,padEnd()用于尾部补全
消除空格  trim  trimStart  trimEnd  trimLeft  trimRight
消除头部和尾部空格  中间的不可消除
replaceAll() 

13.什么是Iterator

遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。
任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。作用:
Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构
的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of
消费。

14. 什么是解构赋值

解构赋值 : 主要是针对数组和对象的解构 , 可以看成是一种匹配模式 ,对其中的变量进行赋值是 对赋值运 算符的一种扩展
优点: 在代码的书写上更加易读,语义更加清晰明了,方便从数组和对象中取数据保持两边一致解构源 : 等号右边解构目标 :  等号的左边

15.设置一个Person类,使得该类可迭代,可以使用for…of循环属性方法

let c = [];class Fn {constructor(name, age) {this.name = name,this.age = age,this.a = thisc.push(name, age);this.s=function(){}}say() {console.log('我是原型方法')}static jt() {console.log('我是静态方法')}[Symbol.iterator]() {let index = 0;return {next() {if (index >= c.length) {return {value: undefined,done: true}} else {let result = {value: c[index],done: false}index++;return result}}}}}let a = new Fn('lili', 19);let b = new Fn('lili', 19);let iterator = a[Symbol.iterator]();console.log(a);console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());

16.es6提供的数组方法有哪些

Array.from()方法,将类似数组的对象转为数组。
Array.of()方法用于将一组值,转换为数组。
coypWithin() 循环  没有返回值
find()找出第一个满足条件的数据
findIndex()找出第一个满足条件的下标fill() 用指定的值 将数组中的数据替换Includes()返回新数组
map()映射  
filter()过滤
reduce()求和
every()遇假则停  返回值为boolean  
some()遇真则停  返回值为boolean

17.写出es6中module的导出文件和导入文件的写法

1) 分别暴露数据
export let a=100;
export function show(){console.log(123);}
import * as m1 from "js/m1.js";
2)使用{}统一暴露数据
let a=100;
let b=200;
let obj={name:"zhangsan",age:18
}
let arr=[1,2,3];
function fn(){console.log(123);
}export {a,b,obj as o,arr,fn}
import {a,b,obj as o,arr,fn} from "./src/js/m1.js"
3)默认暴露数据
export default {name:"lisi",fn:function(){console.log(this.name);}
}
import {default as m3} from "./src/js/m3.js"

18. ES6 与 ECMAScript 2015 的关系

ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了
ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。
平常提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”。

19.Object.defineProperty()

直接在一个对象上添加属性,修改属性,也可以把属性设置为是否可写,可以设置为响应式数据
Object.defineProperty(obj,'num',{value:10000,// 设置当前属性是否可以修改  默认 false不可以修改, true可以修改writable:true,// 设置当前属性是否可以枚举  默认 false不可以枚举, true可以枚举enumerable:true,//设置当前属性是否可以被删除   默认 是 false  不被删除  true可以被删除configurable:true,});

20.什么是Generator

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator 函数有多种理解角度。语法上,首先可以把它理解成,Generator 函数是一个状态机,
封装了多个内部状态。
执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个
遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

更多推荐

Es6常见面试题必看!

本文发布于:2023-06-25 21:51:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/884891.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:必看   面试题   常见

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!