先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
举个栗子:
let num = 996;
console.log(num.toString(8));//转为8进制字符串
console.log(num.toString(16));//转为16进制字符串
console.log(num.toString(32));//转为32进制字符串
代码执行结果如下:
base
的范围可以从2
到36
,如果不填默认为10
。
注意,如果使用数字直接调用toString
方法,在有些情况下需要是应用两个.
,举例如下:
console.log(123.toString(8));//Error,语法错误
console.log(123…toString(8));//正确,173
数字后面有两个.
,这是因为在JavaScript
中数字后面的第一个.
被认为是小数点,第二个点才是调用函数的.
。
如果是小数就不存在这个问题,举个栗子:
console.log(3.14.toString(8));
亦或者,我们使用小括号可以避免使用两个点,举个栗子:
console.log((123).toString(8));//'173
舍入是数字最常用的操作之一,通常包括:
- 向下取整,
Math.floor(num)
console.log(Math.floor(3.14));//3
console.log(Math.floor(9.99));//9
console.log(Math.floor(-3.14));//-4
console.log(Math.floor(-9.99));//-10
不遵循四舍五入原则,直接取小于等于当前数值的最近整数。
- 向上取整,
Math.ceil(num)
console.log(Math.ceil(3.14));//4
console.log(Math.ceil(9.99));//10
console.log(Math.ceil(-3.14));//-3
console.log(Math.ceil(-9.99));//-9
不遵循四舍五入原则,直接取大于等于当前数字的最近整数。
- 就近取整,
Math.round(num)
console.log(Math.round(3.14));//3
console.log(Math.round(9.99));//10
console.log(Math.round(-3.14));//-3
console.log(Math.round(-9.99));//-10
遵循四舍五入原则,取距离当前数字最近的整数。
- 移除小数,
Math.trunc(num)
console.log(Math.trunc(3.14));//3
console.log(Math.trunc(9.99));//9
console.log(Math.trunc(-3.14));//-3
console.log(Math.trunc(-9.99));//-9
直接移除小数点后面的数字,取整数位。IE浏览器不支持这个方法
对比以上四种方法:
| | Math.floor | Math.ceil | Math.round | Math.trunc |
| :-: | :-: | :-: | :-: | :-: |
| 3.14 | 3 | 4 | 3 | 3 |
| 9.99 | 9 | 10 | 10 | 9 |
| -3.14 | -4 | -3 | -3 | -3 |
| -9.99 | -10 | -9 | -10 | -9 |
上述方法只是简单的把小数舍入成了整数,在有些情况下,我们需要特定精度的小数,例如取圆周率后4
位应该怎么办呢?
有两种方法:
- 数学乘除计数
let pi = 3.1415926;
console.log(Math.round(pi * 10000) / 10000);//3.1416
上述代码先将pi
乘以10000
,然后取整,再除以10000
,从而得到了符合精度要求的结果。但是,这么做看起啦呆呆的,JavaScript
为我们提供了更简单的方法。
- toFixed(n)
let pi = 3.1415926;
console.log(pi.toFixed(4));//3.1416
以上代码看起来输出上没有什么问题,实际上,toFixed
返回的是一个字符串,如果我们需要一个数字类型,要转换一下才行,可以使用单目运算符+ pi.toFixed(4)
。
此外,如果小数的尾数长度不够,toFixed
会在后面补上'0'
:
let num = 3.1;
console.log(num.toFixed(9));
代码执行结果如下:
这也侧面证明了toFixed
的返回值是一个字符串,否则0
会被省略。
浮点数表示在很多情况下总是存在偏差
在计算机内部,浮点数根据IEEE-754
标准进行表示,其中单精度浮点数32
位,双精度浮点数64
位。在双精度浮点数中,1
位用于表示符号,52
位用于存储有效数字,11
位存储小数点的位置。
偏差现象
虽然64
位已经可以表示非常大的数字了,但是仍然存在越界的可能,例如:
let bigNum = 1e999;
console.log(bigNum);//Infinity
越过做最大值的数字将变为Infinity
(无穷),这样就丢失了原有数字的大小,属于偏差的一种。
还有一种偏差,需要我们学习:
console.log(0.1+0.2 === 0.3);//false
console.log(0.1 + 0.2);
代码执行结果如下:
没错,0.1 + 0.2
的结果并不是0.3
,而是一堆0
后面加个4
。
这种偏差是非常致命的,尤其在商城、银行工作场景中,即使是一个非常小的偏差,在高流水场景下都会丢失无尽的财富。
曾经听说过一个银行员工通过克扣工人工资,盗取百万财富的故事,每个员工的工资只克扣2毛!
我想这种事情发生在我身上,我肯定发现不了,所以无时无刻的精确是多么的重要。
这个故事不知真假~~
偏差原因
先以我们常见的十进制为例,我们都知道,小数中存在两个奇葩,一个叫无限循环小数,另一个叫无限不循环小数,例如1/3
就是一个无限循环小数0.3333333(3)
,而圆周率就是一个无限不循环小数。无限就意味着无法用数字清楚的描述这个数字的大小,我们能写出来的都是不精确的。
二进制同样存在一些无限循环的数字,不同的是在十进制中0.1
这种看起啦很简单的数字,在二进制中却是无限循环小数。
举个例子:
let x = 0.1;
console.log(x.toFixed(20));
代码执行结果如下:
是不是觉得不可思议呢?我们只是简单的创建了一个变量并赋值0.1
,然后取小数点后20
位,却得到了一个匪夷所思的结果。
如果我们换一个角度或许会更容易理解这种现象,在十进制中,任何整数除以10
或者10
整数次幂都是正常的精确的数字,例如1/10
或者996/1000
。但是,如果以3
为除数,就会得到循环的结果,例如1/3
。
这种描述如果换到二进制上,同样是成立的。
在二进制中,任何整数除以2
或者2
的整数次幂都是正常的精确的数字,但是,如果以10
为除数,就会得到无限循环的二进制数。
所以,我们就可以得出结论,二进制数字无法精确表示0.1
和0.2
就像十进制没有办法描述1/3
一样。
注意:
这种数据上的偏差并非JavaScript的缺陷,像PHP、Java、C、Perl、Ruby都是同样的结果。
解决方法
- 舍入
在展示一个无限循环小数的时候,我们可以直接使用toFixed
方法对小数进行舍入,该方法直接返回字符串,非常方便用于展示价格。
0.3.toFixed(2);//0.30
- 使用小单位
另外一种方式是,我们可以使用较小的单位计算诸如价格、距离,例如采用分而不是元计算总价,实际上很多交易网站都是这么做的。但是这种方法只是降低小数出现的次数,并没有办法完全避免小数的出现。
JavaScript
数字中有两个特殊值:Infinity
和NaN
。
如何判断一个数字是不是正常数字呢?
我们可以使用两个方法:
- isFinite(val)
console.log(isFinite(NaN));//false
console.log(isFinite(Infinity));//false
console.log(isFinite(3));//true
console.log(isFinite(‘12’));//true
代码执行结果如下:
console.log(isFinite(‘xxxx’));//false
console.log(isFinite(‘Infinite’));//false
console.log(isFinite(’ '));//true,空串转为0
代码执行结果如下:
- isNaN(val)
console.log(isNaN(NaN));//true
console.log(isNaN(‘Infinite’));//true
代码执行结果:
为什么要使用isNaN
函数而不是直接判读呢?
console.log(NaN === NaN);//false
代码执行结果如下:
这是因为NaN
不等于任何数,包括自身。
Object.is(a,b)
可以判断参数a
和b
是否相等,若相等返回true
,否则返回false
,它的结果只有三种情况:
- 可以比较NaN
console.log(Object.is(NaN,NaN));//true
代码执行结果:
- 0 和 -0
console.log(Object.is(0,-0));//false
代码执行结果:
在计算机内部,正负使用0
和1
表示,由于符号不同,导致0
和-0
实际上是不同的,二者的表示方式也不一样。
- 其他
其他比较情况和a === b
完全相同。
parseInt
和parseFloat
可以把字符串转为数字,与+
、Number
不同的是,二者的限制更为松散。例如,像"100¥"
这样的字符串使用+
和Number
必然返回NaN
,而parseInt
和parseFloat
却能轻松应对。
举个例子:
console.log(+“100¥”);
console.log(parseInt(“100¥”));
console.log(parseFloat(“12.5¥”));
代码执行结果:
parseInt
和parseFloat
会从字符串中读取数字,直到无法读取为止。二者特别适合处理像"99px"
、"11.4em"
这种数字开头的字符串情况,但是对于其他字符开头的字符串则返回NaN
。
console.log(parseInt(‘ff2000’));//NaN
但是,我们发现ff2000
实际上是一个十六进制的数字字符串,parseInt
同样可以处理这种情况,不过需要添加一个进制参数。
举个例子:
console.log(parseInt(‘FF2000’,16));//16719872
console.log(parseInt(‘0xFF2000’,16));//16719872
最后
javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
举个例子:
console.log(parseInt(‘FF2000’,16));//16719872
console.log(parseInt(‘0xFF2000’,16));//16719872
最后
javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。
[外链图片转存中…(img-A0WVeTkf-1713276520510)]
[外链图片转存中…(img-lWmgd86D-1713276520511)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-E78UYFPB-1713276520511)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!