注意:每道题前面出现的 (xx) 数字代表这道题出现的频次,此 JS 基础是基于 30+ 篇前端面经整理出的问题和对应的回答、参考链接等。
(2)问:0.1 + 0.2 === 0.3 嘛?为什么?
JavaScirpt 使用 Number 类型来表示数字(整数或浮点数),遵循 IEEE 754 标准,通过 64 位来表示一个数字(1 + 11 + 52)
最大安全数字:Number.MAX_SAFE_INTEGER = Math.pow(2, 53) - 1,转换成整数就是 16 位,所以 0.1 === 0.1,是因为通过 toPrecision(16) 去有效位之后,两者是相等的。
在两数相加时,会先转换成二进制,0.1 和 0.2 转换成二进制的时候尾数会发生无限循环,然后进行对阶运算,JS 引擎对二进制进行截断,所以造成精度丢失。
所以总结:精度丢失可能出现在进制转换和对阶运算中
参考链接
https://juejin.im/post/5b90e00e6fb9a05cf9080dff
(4)问:JS 数据类型
基本类型:Number、Boolean、String、null、undefined、symbol(ES6 新增的),BigInt(ES2020) 引用类型:Object,对象子类型(Array,Function)
参考链接
问:JS 整数是怎么表示的?
通过 Number 类型来表示,遵循 IEEE754 标准,通过 64 位来表示一个数字,(1 + 11 + 52),最大安全数字是 Math.pow(2, 53) - 1,对于 16 位十进制。(符号位 + 指数位 + 小数部分有效位)
问:Number() 的存储空间是多大?如果后台发送了一个超过最大自己的数字怎么办
Math.pow(2, 53) ,53 为有效数字,会发生截断,等于 JS 能支持的最大数字。
(4)写代码:实现函数能够深度克隆基本类型
浅克隆:
- function shallowClone(obj) {
- let cloneObj = {};
- for (let i in obj) {
- cloneObj[i] = obj[i];
- }
- return cloneObj;
- }
深克隆:
RegExp、Date、函数 不是 JSON 安全的
会丢失 constructor,所有的构造函数都指向 Object
破解循环引用
- function deepCopy(obj) {
- if (typeof obj === 'object') {
- var result = obj.constructor === Array ? [] : {};
- for (var i in obj) {
- result[i] = typeof obj[i] === 'object' ? deepCopy(obj[i]) : obj[i];
- }
- } else {
- var result = obj;
- }
- return result;
- }
问:事件流
事件流是网页元素接收事件的顺序,"DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。首先发生的事件捕获,为截获事件提供机会。然后是实际的目标接受事件。最后一个阶段是时间冒泡阶段,可以在这个阶段对事件做出响应。虽然捕获阶段在规范中规定不允许响应事件,但是实际上还是会执行,所以有两次机会获取到目标对象。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>事件冒泡</title>
- </head>
- <body>
- <div>
- <p id="parEle">我是父元素 <span id="sonEle">我是子元素</span></p>
- </div>
- </body>
- </html>
- <script type="text/javascript">
- var sonEle = document.getElementById('sonEle');
- var parEle = document.getElementById('parEle');
- parEle.addEventListener('click', function () {
- alert('父级 冒泡');
- }, false);
- parEle.addEventListener('click', function () {
- alert('父级 捕获');
- }, true);
- sonEle.addEventListener('click', function () {
- alert('子级冒泡');
- }, false);
- sonEle.addEventListener('click', function () {
- alert('子级捕获');
- }, true);
- </script>
前两天,新疆喀什疫情冲上热搜。一夜之间,喀什激增了137例新冠肺炎无症状感染者...
创建个网站多少钱?创建个网站多少钱主要看你是选择什么样的方式 建站 。如果是...
近日,国家市场监管总局发布《关于平台经济领域的反垄断指南(征求意见稿)》,向...
公司简介 佛山照明成立于1958年,一直专注于研发、生产、推广高品质的绿色节能照...
前言 一寸光阴一寸金,时间难买寸光阴,时间,是个多么重要的东西。 同样,在我...
Google 于2015年2月从 ICANN 购买了 .app TLD 所有权,价格为25,001,000美元,这...
您还在为临时分享某个文件夹而烦恼吗?您是否对授权的复杂度感到震惊?关于存储...
常见的数据结构与算法 最基本的数据结构和算法包括: 排序算法 递归 链表 数组 ...
很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不...
本文转载自公众号读芯术(ID:AI_Discovery) 当我开始学习数据科学的旅程时,这些...