365天打卡记录
🔥 创作不易、大家帮然叔 B栈 一键三连
- [如何利用闭包完成类库封装] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [谈谈闭包与即时函数的应用] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [分析一下箭头语法为什么不能当做构造函数] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [闭包与科里化、偏应用函数的关系] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [如何用闭包制造惰性函数?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [什么是闭包?如何产生闭包] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [new 一个构造函数,如果函数返回
return {}
、return null
,return 1
,return true
会发生什么情况?] 📺 Billbill视频 📚 掘金文稿 🐱 Github - [new 一个函数发生了什么?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [判断数据类型的方式有哪些?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [Number() 的存储空间是多大?如果后台发送了一个超过最大限制的数字怎么办?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [0.1 + 0.2 === 0.3 嘛?为什么?怎么解决?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [JS 整数是怎么表示的?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
\
今天开始每天打卡一道面试题
B栈同步视频
猛戳 www.bilibili.com/video/BV1BF…
知识讲解
系统 + 全面
万能的Number
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。
做一个实验
typeof 1 // number
typeof 1.0 // number
1 === 1.0
Number类型的表示范围
浮点数的结构
根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位。
- 第一部分(蓝色):用来存储符号位(sign),第1位:符号位,
0
表示正数,1
表示负数 - 第二部分(绿色):用来存储指数(exponent),第2位到第12位(共11位):指数部分
- 第三部分(红色):用来存储小数(fraction),第13位到第64位(共52位):小数部分(即有效数字)
fraction决定了整数安全表示范围
也就是
(-1)^s * f * 2^e
- 符号部分 -1 or 1
- f的范围为1<=f<2 使用52位表示
- 指数有正有负,指数位长度为11比特,所以能表示的数字范围为0~2047
所以很明显最大位应该由f决定,也就是说所有的52位用作表示整数部分。
52位为什么可以表示53位小数
因为小数部分只需要表示尾数就可以,整数部分可定等于一
52位太多不好理解,假设我们以3位(bit)数
0.10 (二进制) 可以表示为 1.00 * 2^-1
0.01 (二进制) 可以表示为 1.00 * 2^-2
这样的话由于整数部分一定等于1,所以可以把整数部分省略。
也就是说3位数可以表示做小数表示的时候可以表示4位小数
为什么不是指数部分决定的
0.1123 * 2^1024
当然这里面有人会问为什么不是指数部分决定呢。上面这个数的范围是不是比我们的讨论的数据范围更大呢。
其实并不是这样,因为实用指数表示并不能表示连续的数字。所以这个方案不可取。
整数的表示范围
Math.pow(2,53) - 1 // 最大
Number.MAX_SAFE_INTEGER // 常数表示
- (Math.pow(2,53) - 1) // 最大
Number.MIN_SAFE_INTEGER // 常数表示
面试攻略
精炼 + 系统 + 自洽
- 基本概念:JavaScript 内部,所有数字都是以64位浮点数形式储存。
- 整数表示范围不用直接分析
点评
-
这道题属于基本概念题,但是如何用二进制表示浮点数很容易能够看出来,逻辑非常复杂。很容易看出应聘这的基本功,和理性思维能力。
- 初级: 知道Number
- 中级: 说出表示范围推导过程
- 高级: 推导过程分析合理且可以和其他语言对比。
365天打卡记录
🔥 创作不易、大家帮然叔 B栈 一键三连
- [如何利用闭包完成类库封装] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [谈谈闭包与即时函数的应用] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [分析一下箭头语法为什么不能当做构造函数] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [闭包与科里化、偏应用函数的关系] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [如何用闭包制造惰性函数?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [什么是闭包?如何产生闭包] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [new 一个构造函数,如果函数返回
return {}
、return null
,return 1
,return true
会发生什么情况?] 📺 Billbill视频 📚 掘金文稿 🐱 Github - [new 一个函数发生了什么?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [判断数据类型的方式有哪些?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [Number() 的存储空间是多大?如果后台发送了一个超过最大限制的数字怎么办?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [0.1 + 0.2 === 0.3 嘛?为什么?怎么解决?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
- [JS 整数是怎么表示的?] 📺 Billbill视频 📚 掘金文稿 🐱 Github
\