前端面试之ES6篇(高产似母猪)

这也是前端面试经常询问的问题,经常问你es6出现了哪些新的特性,平时又使用过那些。在编写此教程的时候,第一句话往往就是面试常常问到的地方,然后后面就是他的详细解释,面试要求的内容我会用*标记出来。写技术文档是真的累啊,虽然是看别人的文档,但是你得看很多,而且还得自己总结啊。所以说要是觉得对你有用还是帮我点个star吧https://github.com/skychenbo

1、箭头函数需要注意的地方
2、ES6 let、const
3、set数据结构
4、promise对象的用法,手写一个promise
5、class的理解
6、模版语法的理解
7、rest参数
8、    module体系

箭头函数需要注意的地方

*当要求动态上下文的时候,就不能够使用箭头函数。也就是this的固定化
1、在使用=>定义函数的时候,this的指向是定义时所在的对象,而不是使用时所在的对象
2、不能够用作构造函数,这就是说,不能够使用new命令,否则就会抛出一个错误
3、不能够使用arguments对象
4、不能使用yield命令
这是一道当年很困惑我的一道题不知道你在第一眼能不能看出其结果,this的指向总是让人困扰,但是有了=>以后妈妈再也不用担心你使用this了

class Animal {
    constructor(){
        this.type = ‘animal‘
    }
    says(say) {
        setTimeout(function () {
            console.log(this.type + ‘says‘ + say)
        },1000)
    }
}
var animal = new Animal()
animal.says(‘hi‘) // undefined says hi

我们再来看看=>的情况

class Animal() {
    constructor() {
        this.type = ‘animal‘
    }
    says(say) {
        setTimeout(() => {
            console.log(this.type + ‘ says ‘ + say)
        }, 1000)
    }
}
var animal = new Animal()
animal.says(‘hi‘) // animal says hi

ES6 let、const
*let是更完美的var,不是全局变量,具有块级函数作用域,大多数情况不会发生变量提升。const定义常量值,不能够重新赋值,如果值是一个对象,可以改变对象里边的属性值
let
1、let声明的变量具有块级作用域
2、let声明的变量不能通过window.变量名进行访问
3、形如for(let x..)的循环是每次迭代都为x创建新的绑定
下面是var带来的不合理场景

var a = []
for (var i = 0; i < i; i++) {
    a[i] = function () {
        console.log(i)
    }
}
a[5]() // 10

在上述代码中,变量i是var声明的,在全局范围类都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出都是10
而如果对循环使用let语句的情况,那么每次迭代都是为x创建新的绑定代码如下

var a = []
for (let i = 0; i < i; i++) {
    a[i] = function () {
        console.log(i)
    }
}
a[5]() // 5

当然除了这种方式让数组中的各个元素分别是不同的函数,我们还可以采用闭包和立即函数两种方法
这是闭包的方法

function showNum(i) {
    return function () {
        console.log(i)
    }
}
var a = []
for (var i = 0; i < 5; i++) {
    a[i] = showNum(i)
}

这是立即函数的方法

var a = []
for (var i = 0; i < 5; i++) {
    a[i] = (function (i) {
        return function () {
            console.log(i)
        }
    })(i)
}
a[2]()

Set数据结构

*es6方法,Set本身是一个构造函数,它类似于数组,但是成员值都是唯一的

const set = new Set([1,2,3,4,4])
[...set] // [1,2,3,4]
Array.from(new Set())是将set进行去重

promise对象的用法,手写一个promise

promise是一个构造函数,下面是一个简单实例

var promise = new Promise((resolve,reject) => {
    if (操作成功) {
        resolve(value)
    } else {
        reject(error)
    }
})
promise.then(function (value) {
    // success
},function (value) {
    // failure
})

Class的讲解

*class语法相对原型、构造函数、继承更接近传统语法,它的写法能够让对象原型的写法更加清晰、面向对象编程的语法更加通俗
这是class的具体用法

class Animal {
    constructor () {
        this.type = ‘animal‘
    }
    says(say) {
        console.log(this.type + ‘says‘ + say)
    }
}
 let animal = new Animal()
 animal.says(‘hello‘) // animal says hello

 class Cat extends Animal {
     constructor() {
         super()
         this.type = ‘cat‘
     }
 }
 let cat = new Cat()
 cat.says(‘hello‘) // cat says hello

可以看出在使用extend的时候结构输出是cat says hello 而不是animal says hello。说明contructor内部定义的方法和属性是实例对象自己的,不能通过extends 进行继承。在class cat中出现了super(),这是什么呢
在ES6中,子类的构造函数必须含有super函数,super表示的是调用父类的构造函数,虽然是父类的构造函数,但是this指向的却是cat

Object.assign 方法

var n = Object.assign(a,b,c)向n中添加a,b,c的属性

模版语法

*就是这种形式${varible},在以往的时候我们在连接字符串和变量的时候需要使用这种方式‘string‘ + varible + ‘string‘但是有了模版语言后我们可以使用string${varible}string这种进行连接

rest参数

*es6引入rest参数,用于获取函数的多余参数,这样就不需要使用arguments对象了
ex:

function add(...values) {
    let sum = 0
    for(var val of values) {
        sum += val
    }
    return sum
}

module体系

*历史上js是没有module体系,无法将一个大程序拆分成一些小的程序。在es6之前,有commonJs,AMD两种
CommonJS是如何书写的呢



const animal = require(‘./content.js‘)
    // content.js
    module.exports = ‘a cat‘

require.js是这样做的
// content.js

define(‘content.js‘, function () {
    return ‘A cat‘
})

require([‘./content.js‘], function (animal) {
    console.log(animal) // a cat
})

ES6的语法(在我用的vue中,就使用的是这个)

import animal from ‘./content‘
// content.js
export default ‘a cat‘

es6 import的其他用法
在vue中可以 import animal from ‘./content‘
animal这个值可以根据你的喜欢而改变,但是有一个问题就是如果一旦引入的是函数或者变量时,你就必须和content中的名字保持一致,可以参照
import { say, type } from ‘./content‘
常用的还有一种写法
import * as content from ‘./content‘
这种写法就是表示所有的输出值都在这个对象上

原文地址:https://www.cnblogs.com/10yearsmanong/p/12208440.html

时间: 2024-11-05 17:34:25

前端面试之ES6篇(高产似母猪)的相关文章

前端面试系列--前言篇

这个系列的文章将记录我准备春招的整个过程,我会将自己学习到的新知识记录在这个系列里 文章目录 前言说明 准备方向 目标 前言说明 ??作为半个科班出身学数学的应届生,在学习计算机的时候还是比较吃力的,从今年3月份开始接触前端,到现在也有8个月左右了.也许是初生牛犊不怕虎,我在5月份就各种投简历找实习,当时我甚至连前端是什么都不知道,只学过html和css,还只是通过看<Head First Html与Css>来了解关于写页面的知识的,这本书是2013年出版的,距离现在已经有5年的时间了,现在看

前端面试集锦——CSS篇

三.CSS篇 3.1.谈谈你对CSS布局的理解 3.2.请列举几种可以清除浮动的方法(至少两种) 浮动会漂浮于普通流之上,像浮云一样,但是只能左右浮动.正是这种特性,导致框内部由于不存在其他普通流元素了,表现出高度为0(高度塌陷). a. 添加额外标签,例如<div ></div> b. 使用br标签和其自身的html属性,例如<br clear="all" /> c. 父元素设置 overflow:hidden:在IE6中还需要触发hasLayou

前端面试基础-html篇之H5新特性

h5的新特性(目前个人所了解)如下 语义化标签 表单新特性 视频(video)和音频(audio) canvas画布 svg绘图 地理定位 为鼠标提供的拖放API webworker (重点)Storage (重点)Websocket HTML语义化是什么? 语义化是指根据内容的结构化(内容语义化),选择合适的标签(代码语义化),便于开发者阅读和写出更优雅的代码的同时,让浏览器的爬虫和机器很好的解析. 为什么要语义化? 有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各

前端面试之js篇

请解释事件委托(event delegation). 事件委托是将事件监听器添加到父元素,而不是每个子元素单独设置事件监听器.当触发子元素时,事件会冒泡到父元素,监听器就会触发.这种技术的好处是: 内存占用减少,因为只需要一个父元素的事件处理程序,而不必为每个后代都添加事件处理程序. 无需从已删除的元素中解绑处理程序,也无需将处理程序绑定到新元素上. 原文地址:https://www.cnblogs.com/aisiqi-love/p/10436218.html

前端面试的面试经验

?? 文章列表 前端面试总结--基础javascript篇 前端面试总结--进阶javascript篇 前端面试总结--http.html和浏览器篇 前端面试总结--css篇 一.基础javascript篇 1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的. 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少.对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度.为了明确这个概

2020年前端面试复习必读文章【超百篇文章/赠复习导图】

前言 之前写过一篇 一年半经验如何准备阿里巴巴前端面试,给大家分享了一个面试复习导图,有很多朋友说希望能够针对每个 case 提供一个参考答案. 写答案就算了,一是「精力有限」,二是我觉得大家还是需要自己「理解总结会比较好」. 给大家整理了一下每个 case 一些还算不错的文章吧(还包括一些躺在我收藏夹里的好文章),大家可以自己看文章总结一下答案,这样也会理解更深刻. 「并不是所有文章都需要看」,希望是一个抛砖引玉的作用,大家也可以锻炼一下自己寻找有效资料的能力 ~ ( 文章排序不分前后,随机排

最全前端面试集合(4)总结篇

面试时注意: 自我介绍不能太长,也不能过短,3分钟左右最合适,尤其做为web前端技术 方面的面试,更加要说到点上,我依次从学习方面.项目实践.未来规划这 三个方面写下web前端面试的自我介绍. 下载资源:https://www.yinxiangit.com 前端开发面试全面知识大纲集合: HTML+CSS:对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应 JavaScript:数据类型.面向对象.继承.闭包.

【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...

原文:前端面试“http全过程”将所有HTTP相关知识抛出来了... 来一篇串通,一个http全过程的问题,把所有HTTP相关知识点都带过一遍 http全过程 输入域名(url)-->DNS映射为IP-->TCP三次握手-->HTTP请求-->HTTP响应-->(浏览器跟踪重定向地址)-->服务器处理请求-->服务器返回一个html响应-->(视情况决定释放TCP连接)-->客户端解析HTML-->获取嵌入在HTML中的对象重新发起http请求

web前端面试经历分享

十天前,我还在纠结这个暑假到底是呆在实验室研究技术好还是找一份实习见识世面好,而现在我已经接到offer准备工作了.这几天真是累得够呛,一方面需要拼命准备期末考试,另一方面,需要往公司里面跑接受面试.欣慰的是,我不仅顺利通过了公司的面试,还认识了好几个厉害的师兄,自己的人生规划也稍有改变. 开始的纠结是有原因的,主要是考虑到了一下几个方面: 第一,作为一个大二的学生有必要这么着急跑出去找实习么? 第二,去找实习主要目的应该是赚钱还是学习技术? 第三,难得有那么两个月的时间,就这样去工作了会不会浪