先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
组件间传递数据(props/emit、$parent/$childen
、eventBus、vuex/localStorage,provide/inject,$attr/$listien
;好吧,我只知道前四个。
详细的参考:vue组件间通信六种方式(完整版)
vue 双向绑定的原理是基于 vue 响应式原理的
也就是说双向绑定原理解决的是
-
视图的变化–>影响到内部的data
-
内部data变化–>影响到视图
第一步的实现就是用监听事件来实现
而第二步的实现就是响应式原理所解决的。
例如
会被编译成
从而第一步就实现了,接下来要实现内部data变化–>影响到视图,就是响应式原理的工作了。
6.sessionStrage 会话结束就是失效,那会话究竟是什么时候失效?
所有人都知道,localStorage和sessionStorage的最大区别是生命周期,一个永久,一个仅针对一个会话期间有效。那么,到底什么是一个会话?多个标签页之间的数据是否会共享呢?
后台的session
我们对会话session的认识一般都是从后台的session开始的,比如Java的session,它是基于往cookie写入一个JSESSIONID来实现的,所以,只要你不是打开一个隐身窗口,无论你开多少个标签页,不同标签页之间都会被认为是一个session,你在这个标签页登录了,新开一个标签输入地址,仍然是登录状态。
sessionStorage的session
但是直到今天才发现,HTML5中的这个sessionStorage和传统后台的session并不完全是同一个东西,主要是在多个标签页数据是否会共享的问题上的不同。
误区:之前一直以为,同一个窗口,只要会话还没有过期,不同标签页之间,相同域名下的sessionStorage是一样的。
正确答案:刷新当前页面,或者通过location.href、window.open、或者通过带target="_blank"的a标签打开新标签,之前的sessionStorage还在,但是如果你是主动打开一个新窗口或者新标签,对不起,打开F12你会发现,sessionStorage空空如也。
也就是说,sessionStorage的session仅限当前标签页或者当前标签页打开的新标签页,通过其它方式新开的窗口或标签不认为是同一个session。
大家可以亲自测试一下,手动打开的新标签和点A标签打开的新标签效果完全不一样。
今天又碰到有关sessionStorage的一个问题,比如当我通过A标签打开新的窗口时,在新窗口删除同样的数据,旧窗口的却还在。
经过测试发现:
通过带target="_blank"的A标签、window.open等方式打开新窗口时,会把旧窗口(或标签)的sessionStorage数据带过去,但从此之后,新窗口(或标签)的sessionStorage的增删改和旧窗口已经没有关系了,如果只是在当前标签内跳转新页面(或者刷新),数据还会保留(前提当然是同域)。
总之,在处理sessionStorage时,只要打开新窗口就要特别注意了,新旧窗口数据不会互相同步。
8. {} 和 [] 的 valueOf 和 toString 的结果是什么?
{} 的 valueOf 结果为 {} ,toString 的结果为 “[object Object]”
[] 的 valueOf 结果为 [] ,toString 的结果为 “”
-
toString是把对象转换为字符串;
-
valueOf是把对象转换du成一个基zhi本数据的值
-
valueOf偏向dao于运算,toString偏向于显示。
-
在进行对象转换时(例如:alert(a)),将优先调用toString方法,如若没有重写toString将调用valueOf方法,如果两方法都没有重写,按Object的toString输出。
-
在进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。
-
在有运算操作符的情况下,valueOf的优先级高于toString。
// 对象在参与运算及比较的时候,js引擎会自动的帮我们去调用这两个方法.
// 调用规则:
// 1. 默认先调用valueOf方法(valueOf 来源于 Object的原型),尝试把对象转成简单数据类型,
- 如果没有得到简单数据类型,再继续去调用toString方法
// 作用: 将对象转成原始值(简单数据类型),但是Object原型上的valueOf达不到目的, 把对象自身给返回了
/* var arr = [1,2,3];
console.log(arr + 1); // 1,2,31
// arr.valueOf() ==> arr
// arr.toString() ==> “1,2,3”
// “1,2,3” + 1 ==> “1,2,31”
console.log(arr - 0); // NaN
// “1,2,3” - 0
console.log(arr + “6班学习好努力”); // 1,2,36班学习好努力*/
// var obj = {
// name: “lw”
// };
// console.log(obj * 1); // NaN
// obj.valueOf() ==> obj
// obj.toString() ==> “[object Object]”
// “[object Object]” * 1
// console.log(obj + “1”); // [object Object]1
// console.log([] == ![]); // true
// [] == false ==> 都转数值进行比较
// [].valueOf() ==> []
// [].toString() ==> “”
// +“” ==> 0
// console.log({} == !{});
// {} == false ==> 都转数值进行比较
// {}.valueOf() ==> {}
// {}.toString() ==> “[object Object]”
// +“[object Object]” ==> NaN (字符串转成数值 ===> NaN, 不是一个数字)
例1:
// var obj = {};
// console.log(obj.toString()); // “[objectObject]”
例2:
// var a = {},
// b = { key: ‘b’ };
// c = { key: ‘c’ };
// a[b] = 123;
// a[c] = 456;
// console.log(a[b]); //456
// 给如果对象的属性类型不是一个字符串时,就会去转换.
// js会自动让对象去调用这两个方法,默认先valueOf(),如果没有得到简单数据类型,再去调用toString()
// 其中对象a中的属性 b ==> “[object,Object]” ,等同于 给对象a,使用[]语法,去添加属性并赋值
// 再看对象a中的属性 c ==> “[object,Object]” ,等同于 修改同一个属性的属性值,所以最终的到的结果是456
const EventUtils = {
// 视能力分别使用dom0||dom2||IE方式 来绑定事件
// 添加事件
addEvent: function(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent(“on” + type, handler);
} else {
element[“on” + type] = handler;
}
},
// 移除事件
removeEvent: function(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.detachEvent) {
element.detachEvent(“on” + type, handler);
} else {
element[“on” + type] = null;
}
},
// 获取事件目标
getTarget: function(event) {
return event.target || event.srcElement;
},
// 获取 event 对象的引用,取到事件的所有信息,确保随时能使用 event
getEvent: function(event) {
return event || window.event;
},
// 阻止事件(主要是事件冒泡,因为 IE 不支持事件捕获)
stopPropagation: function(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
},
// 取消事件的默认行为
preventDefault: function(event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
};
算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
[外链图片转存中…(img-eKRAt6PL-1713477552471)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Kun2GZ9C-1713477552471)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!