面试拼多多前端开发岗,已拿到offer,这些知识点该放出来了

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,如果对原型链不怎能了解,后边俺会具体的写到,这里大体记一下就 OK。

我们再测一下 ES6 中的 class 语法糖是什么类型。

class A{}

console.log(A instanceof Function) // true

注意:原型链中的prototype 随时可以被改动的,改变后的值可能不存在于 object的原型链上,instanceof返回的值可能就返回 false。

4、类型转换

类型转换通常在面试笔试中出现的比较多,对于类型转换的一些细节应聘者也是很容易忽略的,所以俺整理的尽量系统一些。javaScript是一种弱类型语言,变量不受类型限制,所以在特定情况下我们需要对类型进行转换。

「类型转换」分为显式类型转换和隐式类型转换。每种转换又分为原始类型转换和对象类型转换。

显式类型转换就是我们所说强制类型转换。

其他数据类型转字符串类型!

对于原始类型来说,转字符串类型会默认调用 toString() 方法。

String(123); // “123”

String(true); // “true”

String(null); // “null”

String(undefined);// “undefined”

String([1,2,3]) // “1,2,3”

String({}); // “[object Object]”

其他数据类型转布尔类型!

除了特殊的几个值 ‘’、 undefined、 NAN、 null、 false、 0 转化为 Boolean 为 false 之外,其他类型值都转化为 true。

Boolean(‘’) // false

Boolean(undefined) // false

Boolean(null) // false

Boolean(NaN) // false

Boolean(false) // false

Boolean(0) // false

Boolean({}) // true

Boolean([]) // true

转化为数字类型!

Number(10); // 10

Number(‘10’); // 10

Number(null); // 0

Number(‘’); // 0

Number(true); // 1

Number(false); // 0

Number([]); // 0

Number([1,2]); // NaN

Number(‘10a’); // NaN

Number(undefined); // NaN

对象类型转原始类型!

对象类型在转原始类型的时候,会调用内置的 valueOf()和 toString() 方法,这两个方法是可以进行重写的。

转化原始类型分为两种情况:转化为字符串类型或其他原始类型。

  • 如果已经是原始类型,不需要再进行转化。

  • 如果转字符串类型,就调用内置函数中的 toString()方法。

  • 如果是其他基本类型,则调用内置函数中的 valueOf()方法。

  • 如果返回的不是原始类型,则会继续调用 toString() 方法。

  • 如果还没有返回原始类型,则报错。

5、四则运算

隐士类型转化是不需要认为的强制类型转化,javaScript 自动将类型转化为需要的类型,所以称之为隐式类型转换。

加法运算符是在运行时决定,到底是执行相加,还是执行连接。运算数的不同,导致了不同的语法行为,这种现象称为“重载”。

  • 如果双方都不是字符串,则将转化为数字字符串

  • Boolean + Boolean会转化为数字相加。

  • Boolean + Number 布尔类型转化为数字相加。

  • Object + Number 对象类型调用 valueOf,如果不是 String、Boolean或者 Number类型,则继续调用 toString()转化为字符串。

true + true // 2

1 + true // 2

[1] + 3 // ‘13’

  • 字符串和字符串以及字符串和非字符串相加都会进行连接

1 + ‘b’ // ‘1b’

false + ‘b’ // ‘falseb’

其他运算

其他算术运算符(比如减法、除法和乘法)都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。

1 * ‘2’ // 2

1 * [] // 0

6、逻辑运算符

逻辑运算符包括两种情况,分别为条件判断和赋值操作。

条件判断

  • && :所有条件为真,整体才为真。

  • || :只有一个条件为真,整体就为真。

true && true // true

true && false // false

true || true // true

true || false // true

赋值操作

A && B

首先看 A 的真假, A 为假,返回 A 的值, A 为真返回 B 的值。(不管 B 是啥)

console.log(0 && 1) // 0

console.log(1 && 2) // 2

A || B

首先看 A 的真假, A 为真返回的是 A 的值, A 为假返回的是 B 的值(不管 B 是啥)

console.log(0 || 1) // 1

console.log(1 || 2) // 1

7、比较运算符

比较运算符在逻辑语句中使用,以判定变量或值是否相等。

== 和 === 的区别?

对于 === 来说,是严格意义上的相等,会比较两个操作符的类型和值。

如果 X 和 Y 的类型不同,返回 false ;

如果 X 和 Y 的类型相同,则根据下方表格进一步判断

而对于 ==来说,是非严格意义上的相等,先判断两个操作符的类型是否相等,如果类型不同,则先进行类型转换,然后再判断值是否相等。

  • 如果 X 和 Y 的类型相同,返回 X == Y 的比较结果;

  • 如果 X 和 Y 的类型不同,根据下方表格进一步判断;

  • this

  • new

  • 闭包

闭包面试中的重点,但是对于很多初学者来说都是懵懵的,所以俺就从最基础的作用域讲起,大佬请绕过。

什么是作用域?什么是作用域链?

规定变量和函数的可使用范围叫做作用域。只看定义,挺抽象的,举个例子:

function fn1() {

let a = 1;

}

function fn2() {

let b = 2;

}

声明两个函数,分别创建量两个私有的作用域(可以理解为两个封闭容器),fn2 是不能直接访问私有作用域 fn1 的变量 a 的。同样的,在 fn1 中不能访问到 fn2 中的 b 变量的。一个函数就是一个作用域。

每个函数都会有一个作用域,查找变量或函数时,由局部作用域到全局作用域依次查找,这些作用域的集合就称为作用域链。 如果还不是很好理解,俺再举个例子​:

let a = 1

function fn() {

function fn1() {

function fn2() {

let c = 3;

console.log(a);

}

// 执行 fn2

fn2();

}

// 执行 fn1

fn1();

}

// 执行函数

fn();

虽然上边看起来嵌套有点复杂,我们前边说过,一个函数就是一个私有作用域,根据定义,在 fn2 作用域中打印 a,首先在自己所在作用域搜索,如果没有就向上级作用域搜索,直到搜索到全局作用域,a = 1,找到了打印出值。整个搜索的过程,就是基于作用域链搜索的。

什么是闭包?闭包的作用?闭包的应用?

很多应聘者喜欢这样回答,“函数里套一个函数”,但是面试官更喜欢下面的回答,因为可以继续为你挖坑。

函数执行,形成一个私有的作用域,保护里边的私有变量不受外界的干扰,除了保护私有变量外,还可以保存一些内容,这样的模式叫做闭包。

闭包的作用有两个,保护和保存。

保护的应用

团队开发时,每个开发者把自己的代码放在一个私有的作用域中,防止相互之间的变量命名冲突;把需要提供给别人的方法,通过 return 或 window.xxx 的方式暴露在全局下。

jQuery 的源码中也是利用了这种保护机制。

封装私有变量。

保存的应用

选项卡闭包的解决方案。

循环绑定事件引发的索引什么问题?怎么解决这种问题?

// 事件绑定引发的索引问题

var btnBox = document.getElementById(‘btnBox’),

inputs = btnBox.getElementsByTagName(‘input’)

var len = inputs.length;

for(var i = 0; i < 1en; i++){

inputs[i].onclick = function () {

alert(i)

}

}

整理的知识点除了上文我详细讲述的,还有下面我简要概述的,如果全部陈述会导致文章篇幅过长,如有兴趣可以【点击我】领取。
  • 原型和原型链

  • 继承

1.经典继承

2.组合继承

3.原型继承

4.寄生式继承

  • 垃圾回收机制

1.两种垃圾回收策略

2.标记清除法

3.引用计数法

4.如何管理内存

5.深拷贝和浅拷贝

  • 异步编程

1.执行上下文

2.执行栈

3.宏任务

4.微任务

5.运行机制

ES6


  • 变量提升

  • var、let、const

  • map、filter、reduce

1.map

2.filter

3.reduce

  • Proxy字面量定义

1.ES6 中的 Class 定义

2.Object.definedProperty()

3.Proxy 代理

  • ES6/7 的异步编程

1.Generator 生成器

2.Promise

3.async 及 await

  • 模块化方式一:函数

方式二:立即执行函数

方式三:CommonJS

方式四:AMD 和 CMD

方式五:ES6 Moudle

小结

如果想要领取全部面试知识点,可以【点击我】

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

篇幅有限,仅展示部分截图:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

篇幅有限,仅展示部分截图:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Dda3TslN-1713106401126)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值