先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
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.运行机制
-
变量提升
-
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 (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
。
最后
我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。
篇幅有限,仅展示部分截图:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Dda3TslN-1713106401126)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!