前端最新面试题(Javascript模块篇)

目录
1 数据类型基础

1.1 JS内置类型

1.2 null和undefined区别

1.3 null是对象吗?为什么?

1.4 '1'.toString()为什么可以调用?

1.5 0.1+0.2为什么不等于0.3?如何让其相等

1.6 如何理解BigInt

1.7 JS 整数是怎么表示的

1.8 Number() 的存储空间是多大?如果后台发送了一个超过最大自己的数字怎么办

2 数据类型检测

2.1 typeof类型判断

2.2 typeof 于 instanceof 区别

2.3 Object.is和===的区别

2.4 总结

3 数据类型转换

3.1 转化规则

3.2 转Boolean

3.3 对象转原始类型是根据什么流程运行的

3.4 如何让if(a == 1 &&a == 2)条件成立

3.5 四则运算符

3.6 比较运算符

3.7 [] == ![]结果是什么?为什么?

3.8 == 和 ===有什么区别

4 闭包

4.1 闭包产生的原因

4.2 闭包有哪些表现形式

4.3 如何解决下面的循环输出问题

4.4 闭包的几种使用场景

5 原型和原型链链

5.1 原型/构造函数/实例

5.2 原型对象和构造函数有何关系

5.3 能不能描述一下原型链

6 继承

6.1 方式1: 借助call

6.2 方式2: 借助原型链

6.3 方式3:将前两种组合

6.4 方式4: 组合继承的优化1

6.5 方式5(最推荐使用): 组合继承的优化2

6.6 ES6的extends被编译后的JavaScript代码

6.7 从设计思想上谈谈继承本身的问题

6.8 继承-简版

7 this

8 内存机制

9 执行上下文

10 变量提升

11 模块化

12 异步编程

12.1 浏览器中的Event loop

12.2 Node 中的 Event loop

12.3 实现一个Promise A+ 规范

12.4 setTimeout、Promise、Async / Await 的区别

12.5 setTimeout(fn, 0)多久才执行,Event Loop

12.6 async原理

13 内存泄露

13.1 Chrome devTools查看内存情况

13.2 内存泄漏的场景

14 垃圾回收机制

15 深浅拷贝

16 对象的几种创建方式

16.1 工厂模式,创建方式

16.2 构造函数模式

16.3 使用原型模式

16.4 组合使用构造函数模式和原型模式

16.5 动态原型模式

17 数组相关

17.1 数组常用方法

17.2 Array(3)和Array(3, 4)的区别?

17.3 请创建一个长度为100,值都为1的数组

17.4 请创建一个长度为100,值为对应下标的数组

17.5 如何转化类数组成数组

17.6 forEach中return有效果吗?如何中断forEach循环?

17.7 JS判断数组中是否包含某个值

17.8 JS中flat---数组扁平化

18 操作DOM

18.1 说说有几种类型的DOM节点

18.2 操作DOM节点方法

19 Ajax总结

19.1 Ajax 有那些优缺点

19.2 关于http,XMLHttpRequest,Ajax的关系

19.3 XMLHttpRequest的发展历程是怎样的?

19.4 使用XMLHttpRequest封装一个get和post请求

20 定时器

20.1 setInterval存在哪些问题?

20.2 链式调用setTimeout对比setInterval

20.3 实现比 setTimeout 快 80 倍的定时器

22.4 说一下requestAnimationFrame

22.5 requestAnimationFrame对比setTimeout

21 谈谈你对for in/for of的理解

22 JavaScript 实现对上传图片的压缩?


  • 1 数据类型基础
    • 1.1 JS内置类型
    • JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object )。
    • 基本类型有七种: null ,undefined ,boolean ,number ,string ,symbol , bigint
      • BigInt 是 ES10 新增的数据类型
      • Symbol 代表独一无二的值,最大的用法是用来定义对象的唯一属性名。
      • BigInt 可以表示任意大小的整数。
    • 其中 JS 的数字类型是浮点类型的,没有整型。并且浮点类型基于 IEEE 754 标准实现,在使用中会遇到某些 Bug。NaN 也属于 number 类型,并且 NaN 不等于自身。
    • 对于基本类型来说,如果使用字面量的方式,那么这个变量只是个字面量,只有在必要的时候才会转换为对应的类型。
    • 引用数据类型:
    • 对象Object (包含普通对象-Object ,数组对象-Array ,正则对象-RegExp ,日期对象-Date ,数学函数-Math ,函数对象-Function )
    • let a = 111
      // 这只是字面量,不是 number 类型
      a.toString()
      // 使用时候才会转换为对象类型

      对象(Object )是引用类型,在使用过程中会遇到浅拷贝和深拷贝的问题。

    • let a = {name: 'FE',
      }
      let b = a
      b.name = 'EF'
      console.log(a.name)
      // EF

      说出下面运行的结果,解释原因。

    • function test(person) {person.age = 26person = {name: 'hzj',age: 18,}return person
      }
      const p1 = {name: 'fyq',age: 19,
      }
      const p2 = test(p1)
      console.log(p1)
      // ->?
      console.log(p2)
      // ->?// 结果:
      p1 = {name: 'fyq',age: 26,
      }
      p2 = {name: 'hzj',age: 18,
      }

      原因: 在函数传参的时候传递的是对象在堆中的内存地址值,test函数中的实参person是p1对象的内存地址,通过调用person.age = 26 确实改变了p1的值,但随后person 变成了另一块内存空间的地址,并且在最后将这另外一份内存空间的地址返回,赋给了p2。

  • 1.2 null和undefined区别

Undefined 类型只有一个值,即undefined 。当声明的变量还未被初始化时,变量的默认值为undefined 。用法

  • 变量被声明了,但没有赋值时,就等于undefined 。
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined 。
  • 对象没有赋值的属性,该属性的值为undefined 。
  • 函数没有返回值时,默认返回undefined

Null 类型也只有一个值,即null 。null 用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。用法

  • 作为函数的参数,表示该函数的参数不是对象。
  • 作为对象原型链的终点
  • 1.3 null是对象吗?为什么?

结论: null 不是对象。

解释: 虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object 。

  • 1.4 '1'.toString()为什么可以调用?

        其实在这个语句运行的过程中做了这样几件事情

var s = new Object('1')s.toString()s = null
  • 第一步: 创建Object类实例。注意为什么不是String ? 由于Symbol和BigInt的出现,对它们调用new都会报错,目前ES6规范也不建议用new来创建基本类型的包装类。
  • 第二步: 调用实例方法。
  • 第三步: 执行完方法立即销毁这个实例。

整个过程体现了基本包装类型 的性质,而基本包装类型恰恰属于基本数据类型 ,包括Boolean, Number和String。

  • 1.5 0.1+0.2为什么不等于0.3?如何让其相等

0.1 和0.2 在转换成二进制后会无限循环,由于标准位数的限制后面多余的位数会被截掉,此时就已经出现了精度的损失,相加后因浮点数小数位的限制而截断的二进制数字在转换为十进制就会变成0.30000000000000004

我们都知道计算机时是通过二进制来进行计算的,即 0 和 1

  • 就拿 0.1 + 0.2 来说,0.1 表示为0.0001100110011001... ,而0.2 表示为0.0011001100110011...
  • 而在二进制中 1 + 1 = 10 ,所以 0.1 + 0.2 = 0.0100110011001100...
  • 转成10 进制就近似表示为 0.30000000000000004

简单来说就是,浮点数转成二进制时丢失了精度,因此在二进制计算完再转回十进制时可能会和理论结果不同

1. ES6提供的Number.EPSILON方法

        

function isEqual(a, b) {return Math.abs(a - b) < Number.EPSILON
}
console.log(isEqual(0.1 + 0.2, 0.3))
// true

 Number.EPSILON 的实质是一个可以接受的最小误差范围,一般来说为 Math.pow(2, -52)

2. 乘以一个10的幂次方

把需要计算的数字乘以10 的n 次方,让数值都变为整数,计算完后再除以10 的n 次方,这样就不会出现浮点数精度丢失问题

(0.1 * 10 + 0.2 * 10) / 10 == 0.3
//true
  • 1.6 如何理解BigInt

        

什么是BigInt?

BigInt 是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。这种数据类型允许我们安全地对大整数执行算术操作,表示高分辨率的时间戳,使用大整数id,等等,而不需要使用库。

为什么需要BigInt?

在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?

这导致JS中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,确切地说,JS中的Number 类型只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991((2^53-1)) ,任何超出此范围的整数值都可能失去精度。

console.log(999999999999999)
//=>10000000000000000

 同时也会有一定的安全性问题:

9007199254740992 === 9007199254740993
// → true 居然是true!

如何创建并使用BigInt?

要创建BigInt ,只需要在数字末尾追加n 即可

console.log(9007199254740995n)
// → 9007199254740995n
console.log(9007199254740995)
// → 9007199254740996

 另一种创建BigInt 的方法是用BigInt() 构造函数

BigInt('9007199254740995 ')
// → 9007199254740995n

 简单使用如下:

10n + 20n
// → 30n
10n - 20n
// → -10n
+10n
// → TypeError: Cannot convert a BigInt value to a number
-10n
// → -10n
10n * 20n
// → 200n
20n / 10n
// → 2n
23n % 10n
// → 3n
10n ** 3n
// → 1000n
const x = 10n
++x
// → 11n
--x
// → 9n
console.log(typeof x)
//"bigint "

值得警惕的点

BigInt 不支持一元加号运算符, 这可能是某些程序可能依赖于 + 始终生成 Number 的不变量,或者抛出异常。另外,更改 + 的行为也会破坏 asm.js 代码。

因为隐式类型转换可能丢失信息,所以不允许在bigint 和 Number 之间进行混合操作。当混合使用大整数和浮点数时,结果值可能无法由BigInt 或Number 精确表示。

10 + 10n
// → TypeError

 不能将BigInt 传递给Web api 和内置的 JS 函数,这些函数需要一个 Number 类型的数字。尝试这样做会报TypeError错误。

Math.max(2n, 4n, 6n)
// → TypeError

当 Boolean 类型与 BigInt 类型相遇时,BigInt 的处理方式与Number 类似,换句话说,只要不是0n ,BigInt 就被视为truthy 的值。

if (0n) {//条件判断为false
}
if (3n) {//条件为true
}

  • 元素都为BigInt的数组可以进行sort。
  • BigInt 可以正常地进行位运算,如| 、& 、<< 、>> 和^
  • 浏览器兼容性

    caniuse的结果:

    其实现在的兼容性并不怎么好,只有chrome67、firefox、Opera这些主流实现,要正式成为规范,其实还有很长的路要走

  • 1.7 JS 整数是怎么表示的

通过 Number 类型来表示,遵循 IEEE754 标准,通过 64 位来表示一个数字,(1 + 11 + 52),最大安全数字是 Math.pow(2, 53) - 1,对于 16 位十进制。(符号位 + 指数位 + 小数部分有效位)

  • 1.8 Number() 的存储空间是多大?如果后台发送了一个超过最大自己的数字怎么办

Math.pow(2, 53) ,53 为有效数字,会发生截断,等于 JS 能支持的最大数字。

  • 2 数据类型检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/19329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WAF几种代理模式详解

WAF简介 WAF的具体作用就是检测web应用中特定的应用&#xff0c;针对web应用的漏洞进行安全防护&#xff0c;阻止如SQL注入&#xff0c;XSS&#xff0c;跨脚本网站攻击等 正向代理 WAF和客户端与网络资源服务器都建立连接&#xff0c;但是WAF 的工作口具有自己的 IP 地址&…

oracle数据回显时候递归实战

太简单的两篇递归循环 orcale 在项目里递归循环实战 先看资产表T_ATOM_ASSET结构 看业务类别表T_ATOM_BUSI_CATEGORY结构 问题出现 页面显示 实际对应的归属业务分类 涉及到oracle递归实战(这里不会如何直接在atomAsset的seelct里面处理递归回显) 直接在实现层看atomAs…

推荐系统三十六式学习笔记:开篇词|用知识去对抗技术不平等

目录 开篇词知识点汇总 开篇词 生活中每桩糟糕事&#xff0c;几乎都是时机不当的结果&#xff0c;每一件美好事&#xff0c;都是恰逢其时的结果。在恰到好处的时候&#xff0c;用户邂逅到美好的事物&#xff0c;想必正是一件美好的事情。是的&#xff0c;推荐系统就是促成美好…

【JavaScript脚本宇宙】不可或缺的Web开发工具:图表和可视化

图形化你的数据&#xff1a;六款顶级JavaScript库全接触 前言 在本文中&#xff0c;我们将深入探讨六个强大的JavaScript库&#xff0c;这些库被广泛应用于数据可视化和交互式图形展示。我们将了解每个库的概述、主要特性、使用示例以及使用场景&#xff0c;以帮助读者更全面…

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

因客户要求zynq开发板只有FLASH和emmc&#xff0c;然而还得在petalinux进行开发系统&#xff0c;因FLASH大小有限&#xff0c;所以没办法把内核和根文件地址全部存储到FLASH中&#xff0c;于是想配合emmc进行启动&#xff0c;但是在网上搜索的大多都是只把根文件系统放到了emmc…

Leetcode - 131双周赛

一&#xff0c;3158. 求出出现两次数字的 XOR 值 本题是一道纯模拟题&#xff0c;直接暴力。 代码如下&#xff1a; class Solution {public int duplicateNumbersXOR(int[] nums) {int ans 0;long t 0;for(int x : nums){if(((t>>x)&1) 1){ans ^ x;}else{t | (…

三种路由协议RIP,OSPF和BGP

RIP&#xff08;Routing Information Protocol&#xff09; 概述 类型&#xff1a;距离矢量路由协议&#xff08;Distance Vector Routing Protocol&#xff09;用途&#xff1a;主要用于小型到中型的局域网&#xff08;LAN&#xff09;。工作原理&#xff1a;通过周期性地广…

知识笔记——jieba分词初探

1. 简介 jieba 是python中一个非常好用的 中文分词组件&#xff0c;但它并不是只有分词这一个功能&#xff0c;还提供了很多在分词之上的算法&#xff0c;如关键词提取、词性标注等。 安装方式&#xff1a; pip install jieba2. 分词 支持 3 种分词模式&#xff1a;精确模式…

U-Net网络

U-Net网络 一、基本架构 各个箭头的解释&#xff1a; conv 3 * 3, ReLU&#xff1a;表示通过一个3 * 3的卷积层&#xff0c;并且该层自动附带一个非线性激活层&#xff08;ReLu&#xff09;copy and crop&#xff1a;表示进行裁剪然后再进行拼接&#xff08;在channel的维度上…

Nmap使用方法

Nmap 介绍 Nmap是一个免费开放的网络扫描和嗅探工具包&#xff0c;也叫网络映射器&#xff08;Network Mapper&#xff09;。该工具其基本功能有三个&#xff0c;一是探测一组主机是否在线&#xff1b;其次是扫描主机端口&#xff0c;嗅探所提供的网络服务&#xff1b;三是可…

代码覆盖率工具JaCoCo用法总结及示例

JaCoCo 是一个用于计算 Java 代码覆盖率的工具&#xff0c;它可以测量单元测试覆盖了代码的哪些部分。JaCoCo官网&#xff1a;EclEmma - JaCoCo Java Code Coverage Library 目录 1. JaCoCo 基本用法 2.JaCoCo 集成到构建流程 3.设置 JaCoCo 覆盖率目标 4.集成到现有测试框…

【CALayer-时钟练习-CADisplayLink Objective-C语言】

一、我们接着来看,这个CADisplayLink啊, 1.刚才我们说那个时间呢,差上1秒钟的样子,然后呢,我们现在呢,用这个叫做CADisplayLink的东西,来解决,用这个类,来解决啊, 我们说,NSTimer,是跑到这儿了以后,一秒钟以后, 它才会执行,这个timeChange方法,真正的时间,不…

docker mqqt 安装

安装 cd /data/mqqt/ 目录准备 mkdir /data/mqqt/mosquitto/config/ #vim Dockerfile # 使用官方Eclipse Mosquitto镜像作为基础镜像 FROM eclipse-mosquitto:latest # 复制配置文件到容器内 COPY mosquitto.conf /data/mqqt/mosquitto/config/mosquitto.conf# 暴露默认的M…

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…

基于PTP实现主机与相机系统时钟同步功能

基于PTP实现主机与相机系统时钟同步功能 一、PTP简介二、工业相机PTP功能支持三、工业相机时间戳介绍3.1基本概念3.2海康工业相机时间戳介绍3.2.1相机参数时间戳3.2.2图像嵌入式时间戳3.2.3相机event事件时间戳3.2.4各种时间戳的时序关系3.2.5通过工业相机SDK获取相机时间戳 四…

JS实现彩色图片转换为黑白图片

1. 使用 Canvas 研究 canvas 时发现一个有趣的现象——将彩色图片巧妙地转换为黑白图片。以下是实现这一功能的简洁代码示例&#xff1a; <div style"display: flex"><img src"./panda.jpeg" /><button onclick"change()">转…

香港Web3媒体:Techub News

Techub News&#xff1a;香港领先&#xff0c;世界一流的科技媒体平台 在数字化时代&#xff0c;Web3技术的崛起为媒体行业注入了新的活力。作为香港领先的Web3媒体平台&#xff0c;Techub News凭借其专业的团队、丰富的资源和创新的业务模式&#xff0c;成为了行业内的佼佼者。…

Idea java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space 解决

咱们平时的开发过程中一定会进行本地调试&#xff0c;今天我也是安装了新的idea之后拉了一个比较大的项目进行本地调试的时候报错。报错信息如下&#xff1a; java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Ja…

浅谈网络安全态势感知

前言 网络空间环境日趋复杂&#xff0c;随着网络攻击种类和频次的增加&#xff0c;自建强有力的网络安全防御系统成为一个国家发展战略的一部分&#xff0c;而网络态势感知是实现网络安全主动防御的重要基础和前提。 什么是网络安全态势感知&#xff1f; 态势感知一词来源于对…

【NumPy】全面解析mean函数:高效计算数组平均值的方法

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…