前端八股文(js篇)

一.强制类型转换规则

首先需要了解隐式转换所调用的函数。

当程序员显示调用Boolean(value),Number(value),String(value)完成的类型转换,叫做显示类型转换。

当通过new Boolean(value),new Number(value),new String(value)传入各自对应的原始类型的值,可以实现"装箱",将原始类型封装成一个对象。

其实这三个函数不仅仅是可以当做构造函数,它们可以直接当作普通的函数来使用,将任何类型的参数转换成原始类型的值:

Boolean('sdfsd') //true
Number("23") //12
String({a:24}); // "[object object]"

其实这三个函数用于类型转换的时候,调用的就是js内部的ToBoolean,ToNumber,ToString方法,从而达到显示转换的效果


二.Object.is()与操作符 "===" ,"=="的区别

==(或者!=)操纵在需要的情况下自动进行了类型转换 。===(或!==)操作不会执行如何转换。

===在比较值和类型时,可以说比==更快。

而在ES6中,Object.is()类似于 ===,但在三等号判定的基础上特别处理NaN,-0和+0,保证-0和+0不再相同,但Object.is(NaN,NaN)会返回true。


三.事件以及事件相关的兼容性问题

事件最早是在IE3和Navigator2中出现的,当时作为分担服务器运算负担的一种手段。要实现和网页的互动,就需要通过JavaScript里面的事件来实现。

每次用户与一个网页进行交互,例如点击链接,按下一个按键或者移动鼠标时,就会触发一个事件。我们的程序可以检测到这些事件,然后对此做出响应。从而形成一种交互。

当我们绑定事件时,需要遵循事件三要素

  • 事件源:是指那个元素引发的事件。比如当你点击图标的时候,会跳转到百度首页。那么这个图标就是事件源。
  • 事件:事件是指执行的动作。例如,点击鼠标,按下键盘,获得焦点。
  • 事件驱动程序:事件驱动程序即执行的结果。例如,当你点击图标的时候,会跳转到百度首页。那么跳转到百度首页就是事件的处理结果。
事件源.事件= function (){事件处理函数
}

 三.什么是预编译?

所谓的预编译就是:在当前作用域中,JavaScript代码执行之前,浏览器首先会默认的把所有带var和function声明的变量进行提前的声明或者定义。

另外,var声明的变量和function声明的函数在预解析的时候有区别,var声明的变量在预解析的时候只是提前的声明,function 声明的函数在预解析的时候会提前声明并且会同时定义。也就是说var声明的变量和function声明的函数的区别是在声明的同时有没有同时进行定义。


四.Promise有几种状态,Promise有什么优缺点?

Promise有三种状态:

pending,fulfilled,rejected(未决定,履行,拒绝),同一时间只能存在一种状态,且状态一旦改变就不能再变。Promise是一个构造函数,promise对象代表一项有两种可能结果(成功或失败)的任务,它还持有多个回调,出现不同结果时分别发出相应回调。

  • 初始化状态:pending
  • 当调用resolve(成功)状态:pending=> fulfilled
  • 当调用rejecte(失败)状态:pending=>rejected

Promise的优点是解决了回调地狱,缺点是代码并没有因为新方法的出现而减少,反而变得更加复杂,同时理解难度也加大,所以后面出现了async/await的异步解决放案


五.document.write和innerHTML的区别?

document.write是直接写入到页面的内容流,如果在写之前没有调用document.open,浏览器会自动调用open,每次写完关闭之后重新调用该函数,会导致页面全部重绘。

innerHTML则是DOM页面元素的一个属性,代表该元素的html内容。你可以精确到某一个具体的元素来进行更改。如果想修改document的内容,则需要修改document.documentElement.innerElement。innerHTML很多情况下都优于document.write,其原因在于不会导致页面全部重绘。


六.call,apply,bind的区别?

call和apply的功能相同,区别在于传承的方式不一样:

  • fn.call(obj,arg1,arg2,...)调用一个函数,具有一个指定的this值和分别地提供的参数(参数的列表)
  • fn.apply(obj,[argsArray])调用一个函数,具有一个指定的this值,以及作为一个数组(或类数组对象)提供的参数。

bind和call/apply有一个很重要的区别,一个函数被call/apply的时候,会直接调用,但是bind会创建一个新函数。当这个新函数被调用时,bind()的第一参数将作为它运行时的this,之后的一序列参数将会在传递的实参前传入作为它的参数。


七.this的指向哪几种?

总结起来,this的指向规律有如下几条:

  • 在函数体中,非显式或隐式地简单调用函数时,在严格模式下,函数内的this会被this绑定到undefined上,在非严格模式下则会被绑定到全局对象window/global上。
  • 一般使用new方法调用构造函数时,构造函数内的this会被绑定到新创建的对象上。
  • 一般通过call/apply/bind方法显示调用函数时,函数体内的this会被绑定到指定参数的对象上。
  • 一般通过上下文对象调用函数时,函数体内的this会被绑定到该对象上。
  • 在箭头函数中,this的指向是由外层(函数或全局)作用域来决定的。

八.什么是js的闭包?有什么作用

一个函数和对其周围状态的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。

闭包的用处:

  • 匿名自执行函数
  • 结果缓存
  • 封装
  • 实现类和继承

九.ES6箭头函数的特性

1.更简洁的语法,例如:

  • 只有一个形参就不需要用括号括起来
  • 如果函数体只有一行,就不需要放到一个块中
  • 如果return语句是函数体内唯一的语句,就不需要return关键字

2.箭头函数没有自己的this,arguments,super

3.箭头函数的this只会从自己的作用域链上一层继承this


十.JS的作用域类型

在JavaScript里面,作用域一共有4种:全局作用域,局部作用域,函数作用域以及eval作用域。

  1. 全局作用域:这是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境。
  2. 局部作用域:当使用let或者const声明变量时,这些变量在一对花括号中存在局部作用域,只能够在花括号内部进行访问使用。
  3. 函数作用域:当进入到一个函数的时候,就会产生一个函数作用域。函数作用域里面所声明的变量只在函数中提供访问使用。
  4. eval作用域:当调用eval()函数的时候,就会产生一个eval作用域。

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

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

相关文章

Golang硬件控制:将软件力量扩展到物理世界

Golang硬件控制:将软件力量扩展到物理世界 2023-11-1728发布于吉林 版权 简介: Golang硬件控制:将软件力量扩展到物理世界 引言 在过去的几十年中,计算机科学和软件工程领域取得了巨大的发展和进步。现在,我们可以编写各种强大的软件应用程序来解决各种问题。然而,软…

蓝桥杯备赛 day 1 —— 递归 、递归、枚举算法(C/C++,零基础,配图)

目录 🌈前言 📁 枚举的概念 📁递归的概念 例题: 1. 递归实现指数型枚举 2. 递归实现排列型枚举 3. 递归实现组合型枚举 📁 递推的概念 例题: 斐波那契数列 📁习题 1. 带分数 2. 反硬币 3. 费解的…

手把手教你安装Kali Linux

Kali Linux操作系统 Kali Linux,一种基于Debian的Linux发行版,是用于渗透测试和网络安全领域的专业工具。它包含了大量的安全测试工具和漏洞扫描器,用于评估网络的安全性和防御能力。Kali Linux有一个友好的界面和易于使用的工具&#xff0c…

数字调制学习总结

调制:将基带的信号的频谱搬移到指定的信道通带内的过程。 解调:把指定信号通带内的信号还原为基带的过程。 1、2ASK调制 原理如下图所示,基带信号为单极不归零码,与载波信号相乘,得到调制信号。 调制电路可以用开关…

力扣-收集足够苹果的最小花园周长[思维+组合数]

题目链接 题意: 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。 给你一个整…

非对称加密与对称加密的区别是什么?

在数据通信中,加密技术是防止数据被未授权的人访问的关键措施之一。而对称加密和非对称加密是两种最常见的加密技术,它们被广泛应用于数据安全领域,并且可以组合起来以达到更好的加密效果。本文将探讨这两种技术的区别,以及它们在…

Java生成UUID的常用方式

java.util.UUID类来生成UUID import java.util.UUID;public class UUIDGenerator {public static void main(String[] args) {//随机生成一个UUID对象UUID uuid UUID.randomUUID();System.out.println("生成的UUID为:" uuid.toString());//通过给定的…

输电线路导线舞动在线监测装置_带气象监测-深圳鼎信

导线舞动是指输电线路上的导线在风的作用下产生的高频振动现象。如果导线舞动幅度过大,会给电网运行造成威胁,例如可能会导致导线相间放电、挂线等问题,长时间的高频振动还可能引发断线、杆塔倒塌等事故。为了保障电网的安全运行,…

DBAPI个人版如何升级到企业版

安装好企业版软件,并启动 注意要新建mysql数据库,执行新版本的ddl_mysql.sql脚本 在旧版本系统中分别导出数据源、分组、API,得到3个json文件 注意全选所有的数据导出 在新版本系统中导入数据源 在新版本系统中导入分组 进入分组管理菜单&…

【Vue3干货】template setup 和 tsx 的混合开发实践

前言 一般而言,我们在用Vue的时候,都是使用模板进行开发,但其实Vue 中也是支持使用jsx 或 tsx的。 最近我研究了一下如何在项目中混合使用二者,并且探索出了一些模式, 本文就是我在这种开发模式下的一些总结和思考&am…

华为配置策略路由(基于IP地址)示例

组网需求 如图1所示,汇聚层Switch做三层转发设备,接入层设备LSW做用户网关,接入层LSW和汇聚层Switch之间路由可达。汇聚层Switch通过两条链路连接到两个核心路由器上,一条是高速链路,网关为10.1.20.1/24;另…

基于大语言模型LangChain框架:知识库问答系统实践

ChatGPT 所取得的巨大成功,使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括 API 集成、交互逻辑、数据存储等…

Databend 开源周报第 125 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 密码策略 Data…

智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.浣熊算法4.实验参数设定5.算法结果6.参考文献7.MA…

vol----随记!!!

目录 一、代码生成1.先新建一个功能的对应的代码配置各项解释: 2.后设置配置菜单3.再点保存,生成vue页面,生成model,生成业务类4.再通过菜单设置编写系统菜单 一、代码生成 1.先新建一个功能的对应的代码配置 各项解释&#xff…

麒麟V10arm桌面版的安装包在麒麟V10服务器版安装

安装过后,可执行程序可能运行不了,看起来就像没识别为可执行程序。在终端运行,会发现其实是缺少了某些库,比如libicui18n.so.66、libicuuc.so.66、libicudata.so.66和libm.so.6库版本不对。 报这个错:error while loa…

UV胶型号分类性能

产品介绍 型号 性能特点 典型应用 U201 粘度低、淡黄或无色透明、粘接力强、硬度低、韧性好、耐候性好。 PVC、PET、尼龙、玻璃、不锈钢、PCB板、柔性PCB、线材、铁、铝、等粘接的生产制造 U301 粘度较高、淡黄或无色透明、表干好、粘接力强、硬度较高、韧性好、耐候性好…

Unity VR Pico apk安装失败:INSTALL_FAILED_UPDATE_INCOMPATIBLE

我的报错: PICO4企业版。安装apk,报错“安装失败。(所属的Unity项目打包的apk,被我在同一台pico4安装了20次) 调试方法: PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生…

Quartz持久化(springboot整合mybatis版本实现调度任务持久化)--提供源码下载

1、Quartz持久化功能概述 1、实现使用quartz提供的默认11张持久化表存储quartz相关信息。 2、实现定时任务的编辑、启动、关闭、删除。 3、实现自定义持久化表存储quartz定时任务信息。 4、本案例使用springboot整合mybatis框架和MySQL数据库实现持久化 5、提供源码下载 …

众和策略:12月新批国产网游版号数量过百

上星期五(22日),A股冲高回落,三大股指挨近午盘拉升走高,午后再度回落走低,沪指尾盘跌幅收窄。到收盘,沪指跌0.13%报2914.78点,深成指跌0.39%报9221.31点,创业板指跌0.37%…